CodePipeline でポーリングパイプラインの一覧を取得する方法を教えてください
困っていた内容
構築済みの CodePipeline で変更の検出方法をポーリングからイベントに変更することを検討しています。
パイプラインが大量にあるので、まずはポーリングを使用しているパイプライン(ポーリングパイプライン)の一覧を作成したいです。方法を教えてください。
どう対応すればいいの?
次の AWS 公式ドキュメントで紹介されているスクリプトを実行してください。
ポーリングパイプラインを移行してイベントベースの変更検出を使用する - AWS CodePipeline
アカウントのポーリングパイプラインを表示する (スクリプト)
上記で紹介されているスクリプトを実行すると、ポーリングを使用しているパイプライン名と、最終の実行時間の一覧が取得できます。
AWS CLI と AWS SDK(Boto3)の2種類が提供されているので、環境にあわせてお好きな方を選択してください。
# ./pollingPipelineExtractor.sh us-west-2 | Polling Pipeline Name | Last Executed Time | | _____________________ | __________________ | | myCodeBuildPipeline | Wed Mar 8 09:35:49 PST 2023 | | myCodeCommitPipeline | Mon Apr 24 22:32:32 PDT 2023 | | TestPipeline | Not executed in last year | Saving list of polling pipeline names to us-west-2-1682496174.csv...%
やってみた
今回は AWS CLI のスクリプトを使用します。
エディタを開き、次のスクリプトを作成します。
#!/bin/bash set +x POLLING_PIPELINES=() LAST_EXECUTED_DATES=() NEXT_TOKEN=null HAS_NEXT_TOKEN=true if [[ $# -eq 0 ]] ; then echo 'Please provide region name' exit 0 fi REGION=$1 while [ "$HAS_NEXT_TOKEN" != "false" ]; do if [ "$NEXT_TOKEN" != "null" ]; then LIST_PIPELINES_RESPONSE=$(aws codepipeline list-pipelines --region $REGION --next-token $NEXT_TOKEN) else LIST_PIPELINES_RESPONSE=$(aws codepipeline list-pipelines --region $REGION) fi LIST_PIPELINES=$(jq -r '.pipelines[].name' <<< "$LIST_PIPELINES_RESPONSE") NEXT_TOKEN=$(jq -r '.nextToken' <<< "$LIST_PIPELINES_RESPONSE") if [ "$NEXT_TOKEN" == "null" ]; then HAS_NEXT_TOKEN=false fi for pipline_name in $LIST_PIPELINES do PIPELINE=$(aws codepipeline get-pipeline --name $pipline_name --region $REGION) HAS_POLLABLE_ACTIONS=$(jq '.pipeline.stages[].actions[] | select(.actionTypeId.category == "Source") | select(.actionTypeId.owner == ("ThirdParty","AWS")) | select(.actionTypeId.provider == ("GitHub","S3","CodeCommit")) | select(.configuration.PollForSourceChanges == ("true",null))' <<< "$PIPELINE") if [ ! -z "$HAS_POLLABLE_ACTIONS" ]; then POLLING_PIPELINES+=("$pipline_name") PIPELINE_EXECUTIONS=$(aws codepipeline list-pipeline-executions --pipeline-name $pipline_name --region $REGION) LAST_EXECUTION=$(jq -r '.pipelineExecutionSummaries[0]' <<< "$PIPELINE_EXECUTIONS") if [ "$LAST_EXECUTION" != "null" ]; then LAST_EXECUTED_TIMESTAMP=$(jq -r '.startTime' <<< "$LAST_EXECUTION") LAST_EXECUTED_DATE="$(date -r ${LAST_EXECUTED_TIMESTAMP%.*})" else LAST_EXECUTED_DATE="Not executed in last year" fi LAST_EXECUTED_DATES+=("$LAST_EXECUTED_DATE") fi done done fileName=$REGION-$(date +%s) printf "| %-30s | %-30s |\n" "Polling Pipeline Name" "Last Executed Time" printf "| %-30s | %-30s |\n" "_____________________" "__________________" for i in "${!POLLING_PIPELINES[@]}"; do printf "| %-30s | %-30s |\n" "${POLLING_PIPELINES[i]}" "${LAST_EXECUTED_DATES[i]}" printf "${POLLING_PIPELINES[i]}," >> $fileName.csv done printf "\nSaving Polling Pipeline Names to file $fileName.csv."
作成したスクリプトを実行すると、パイプライン名と実行日時が表示されます。
※リージョン(ap-northeast-1
)は必要に応じて修正してください。
$ bash ./PollingPipelinesExtractor.sh ap-northeast-1 | Polling Pipeline Name | Last Executed Time | | _____________________ | __________________ | | Polling-test-codepipeline | 2023年 5月12日 金曜日 10時15分00秒 JST | Saving Polling Pipeline Names to file ap-northeast-1-123456789.csv.%
補足
AWS CLI のバージョン 2 がインストールされた環境で実行した場合、タイムスタンプの自動表記に伴い時刻処理でエラーが発生する場合があります。
エラーが発生した場合は、AWS SDK(Boto3)のご利用や、AWS CLI のconfig
ファイルに次の値を追加してください。
cli_timestamp_format=wire
AWS CLI バージョン 2 の新機能と変更点 - AWS Command Line Interface
AWS CLI バージョン 2 はデフォルトで、すべてのタイムスタンプレスポンス値を ISO 8601 形式で返します。AWS CLI バージョン 1 では、コマンドによって返されるタイムスタンプ値が HTTP API レスポンスによって返された値の形式になっており、これはサービスによって異なる可能性がありました。
HTTP API レスポンスから返された形式でタイムスタンプを表示するには、config ファイルで値 wire を使用します。詳細については、「cli_timestamp_format」を参照してください。