翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ポーリングパイプラインをイベントベースの変更検出の使用に移行する
AWS CodePipeline は、コードが変更されるたびにパイプラインを開始するなど、フルで end-to-end 継続的な配信をサポートします。コードの変更時にパイプラインを開始するために、イベントベースの変更検出とポーリングの 2 つの方法がサポートされています。パイプラインにはイベントベースの変更検出を使用することをお勧めします。
ここで説明する手順を使用して、ポーリングパイプラインからイベントベースの変更検出方法に移行 (更新) します。
パイプラインの推奨されるイベントベースの変更検出方法は、 などのパイプラインソースによって決定されます CodeCommit。例えば、ポーリングパイプラインは を使用してイベントベースの変更検出に移行する必要があります EventBridge。
ポーリングパイプラインを移行する方法
ポーリングパイプラインを移行するには、ポーリングパイプラインを選択した後、推奨されるイベントベースの変更検出方法を選択します。
-
アカウント内のポーリングパイプラインの表示 のステップを使用して、ポーリングパイプラインを選択します。
-
表でパイプラインのソースタイプを見つけて、ポーリングパイプラインの移行に使用する実装の手順を選択します。各セクションには、 CLIまたは を使用するなど、複数の移行方法が含まれています AWS CloudFormation。
パイプラインを推奨される変更検出方法に移行する方法 | ||
---|---|---|
パイプラインソース | イベントベースの検出 (推奨方法) | 移行手順 |
AWS CodeCommit | EventBridge (推奨)。 | 「ポーリングパイプラインを CodeCommit ソースに移行する」を参照してください。 |
Amazon S3 | EventBridge および バケットは、イベント通知 (推奨) に対して有効になっています。 | 「イベントに対応した S3 ソースを使用してポーリングパイプラインを移行する」を参照してください。 |
Amazon S3 | EventBridge と証 AWS CloudTrail 跡。 | 「S3 ソースと CloudTrail 証跡を使用してポーリングパイプラインを移行する」を参照してください。 |
GitHub バージョン 1 | Connections (推奨) | 「 GitHub バージョン 1 のソースアクションのポーリングパイプラインを接続に移行する」を参照してください。 |
GitHub バージョン 1 | ウェブフック | 「 GitHub バージョン 1 のソースアクションのポーリングパイプラインをウェブフックに移行する」を参照してください。 |
重要
バージョン 1 アクションの GitHubパイプラインなど、該当するパイプラインアクション設定の更新では、パイプラインのポーリングを停止するために、ソースアクションの設定内で PollForSourceChanges
パラメータを false に明示的に設定する必要があります。その結果、 EventBridge ルールの設定や PollForSourceChanges
パラメータの省略などによって、イベントベースの変更検出とポーリングの両方を使用してパイプラインを誤って設定する可能性があります。これにより、パイプラインが重複して実行される可能性があり、パイプラインはポーリング中のパイプラインの合計数の制限に対してカウントされます。この制限はデフォルトではイベントベースのパイプラインよりもかなり低くなっています。詳細については、「のクォータ AWS CodePipeline」を参照してください。
アカウント内のポーリングパイプラインの表示
最初のステップとして、以下のスクリプトのいずれかを使用して、アカウント内のどのパイプラインに対してポーリングが設定されているかを確認します。これらがイベントベースの変更検出に移行するパイプラインです。
アカウント内のポーリングパイプラインの表示 (スクリプト)
以下の手順でスクリプトを使用して、アカウントでポーリングを使用しているパイプラインを特定します。
-
ターミナルウィンドウを開き、次のいずれかの操作を行います。
-
次のコマンドを実行して、PollingPipelinesExtractor.sh という名前の新しいスクリプトを作成します。
vi PollingPipelinesExtractor.sh
-
Python スクリプトを使用するには、次のコマンドを実行して、PollingPipelinesExtractor.py という名前の新しい Python スクリプトを作成します。
vi PollingPipelinesExtractor.py
-
-
次のコードをコピーしてPollingPipelinesExtractorスクリプトに貼り付けます。次のいずれかを行います。
-
次のコードをコピーして PollingPipelinesExtractor.sh スクリプトに貼り付けます。
#!/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."
-
次のコードをコピーして PollingPipelinesExtractor.py スクリプトに貼り付けます。
import boto3 import sys import time import math hasNextToken = True nextToken = "" pollablePipelines = [] lastExecutedTimes = [] if len(sys.argv) == 1: raise Exception("Please provide region name.") session = boto3.Session(profile_name='default', region_name=sys.argv[1]) codepipeline = session.client('codepipeline') def is_pollable_action(action): actionTypeId = action['actionTypeId'] configuration = action['configuration'] return actionTypeId['owner'] in {"AWS", "ThirdParty"} and actionTypeId['provider'] in {"GitHub", "CodeCommit", "S3"} and ('PollForSourceChanges' not in configuration or configuration['PollForSourceChanges'] == 'true') def has_pollable_actions(pipeline): hasPollableAction = False pipelineDefinition = codepipeline.get_pipeline(name=pipeline['name'])['pipeline'] for action in pipelineDefinition['stages'][0]['actions']: hasPollableAction = is_pollable_action(action) if hasPollableAction: break return hasPollableAction def get_last_executed_time(pipelineName): pipelineExecutions=codepipeline.list_pipeline_executions(pipelineName=pipelineName)['pipelineExecutionSummaries'] if pipelineExecutions: return pipelineExecutions[0]['startTime'].strftime("%A %m/%d/%Y, %H:%M:%S") else: return "Not executed in last year" while hasNextToken: if nextToken=="": list_pipelines_response = codepipeline.list_pipelines() else: list_pipelines_response = codepipeline.list_pipelines(nextToken=nextToken) if 'nextToken' in list_pipelines_response: nextToken = list_pipelines_response['nextToken'] else: hasNextToken= False for pipeline in list_pipelines_response['pipelines']: if has_pollable_actions(pipeline): pollablePipelines.append(pipeline['name']) lastExecutedTimes.append(get_last_executed_time(pipeline['name'])) fileName="{region}-{timeNow}.csv".format(region=sys.argv[1],timeNow=math.trunc(time.time())) file = open(fileName, 'w') print ("{:<30} {:<30} {:<30}".format('Polling Pipeline Name', '|','Last Executed Time')) print ("{:<30} {:<30} {:<30}".format('_____________________', '|','__________________')) for i in range(len(pollablePipelines)): print("{:<30} {:<30} {:<30}".format(pollablePipelines[i], '|', lastExecutedTimes[i])) file.write("{pipeline},".format(pipeline=pollablePipelines[i])) file.close() print("\nSaving Polling Pipeline Names to file {fileName}".format(fileName=fileName))
-
-
パイプラインがあるリージョンごとに、そのリージョンに対してこのスクリプトを実行する必要があります。スクリプトを実行するには、以下のいずれかの操作を行います。
-
次のコマンドを実行して、PollingPipelinesExtractor.sh という名前のスクリプトを実行します。この例では、リージョンは us-west-2 です。
./PollingPipelinesExtractor.sh us-west-2
-
Python スクリプトの場合は、次のコマンドを実行して、PollingPipelinesExtractor.py という名前の Python スクリプトを実行します。この例では、リージョンは us-west-2 です。
python3 PollingPipelinesExtractor.py us-west-2
スクリプトからの以下のサンプル出力では、リージョン us-west-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...%
スクリプトの出力を分析し、リスト内のパイプラインごとに、ポーリングソースを推奨されるイベントベースの変更検出方法に更新します。
注記
ポーリングパイプラインは、
PollForSourceChanges
パラメータのパイプラインのアクション設定によって決まります。パイプラインソース設定でPollForSourceChanges
パラメータが省略されている場合、 CodePipeline はデフォルトで、ソース変更のためにリポジトリをポーリングします。この動作は、PollForSourceChanges
が含まれており、true に設定されている場合と同じです。詳細については、Amazon S3 ソースアクションリファレンス で「Amazon S3 のソースアクションの設定パラメータ」など、「パイプラインのソースアクションの設定パラメータ」を参照してください。このスクリプトは、アカウント内のポーリングパイプラインのリストを含む .csv ファイルも生成し、その .csv ファイルを現在の作業フォルダに保存します。
-
ポーリングパイプラインを CodeCommit ソースに移行する
ポーリングパイプラインを移行して、ソースリポジトリまたは Amazon S3 ソースバケットの変更 EventBridge CodeCommitを検出できます。
CodeCommit -- CodeCommit ソースを持つパイプラインの場合、変更検出が を通じて自動化されるようにパイプラインを変更します EventBridge。以下のいずれかの方法で移行を実装します。
ポーリングパイプライン (CodeCommit または Amazon S3 ソース) の移行 (コンソール)
CodePipeline コンソールを使用してパイプラインを更新し、 EventBridge を使用して CodeCommit ソースリポジトリまたは Amazon S3 ソースバケットの変更を検出できます。
注記
コンソールを使用して、 CodeCommit ソースリポジトリまたは Amazon S3 ソースバケットを持つパイプラインを編集すると、ルールとIAMロールが作成されます。を使用してパイプライン AWS CLI を編集する場合は、 EventBridge ルールとIAMロールを自分で作成する必要があります。詳細については、「 CodeCommit ソースアクションと EventBridge」を参照してください。
定期的なチェックを使用しているパイプラインを編集するには、これらの手順を使用します。パイプラインを作成する場合は、「パイプライン、ステージ、アクションを作成する」を参照してください。
パイプラインソースステージを編集するには
-
にサインイン AWS Management Console し、http://console.aws.amazon.com/codesuite/codepipeline/home
で CodePipeline コンソールを開きます。 AWS アカウントに関連付けられているすべてのパイプラインの名前が表示されます。
-
[Name] で、編集するパイプラインの名前を選択します。これにより、パイプラインの詳細ビューが開いて、パイプラインの各ステージの各アクションの状態などがわかります。
-
パイプライン詳細ページで、[編集] を選択します。
-
[Edit (編集)] ステージで、ソースアクションの編集アイコンを選択します。
-
変更検出オプションを展開し、 CloudWatch イベントの使用を選択して、変更が発生したときにパイプラインを自動的に開始します (推奨)。
このパイプライン用に作成される EventBridge ルールを示すメッセージが表示されます。[Update] (更新) を選択します。
Amazon S3 ソースを含むパイプラインを更新する場合は、以下のメッセージが表示されます。[Update] (更新) を選択します。
-
パイプラインの編集が終わったら、[パイプラインの変更を保存] を選択して概要ページに戻ります。
メッセージには、パイプライン用に作成する EventBridge ルールの名前が表示されます。[Save and continue] を選択します。
-
アクションをテストするには、 を使用して変更をリリース AWS CLI し、パイプラインのソースステージで指定されたソースに変更をコミットします。
ポーリングパイプラインの移行 (CodeCommit ソース) (CLI)
EventBridge ルールを使用してパイプラインを起動するためにポーリング (定期チェック) を使用しているパイプラインを編集するには、次の手順に従います。パイプラインを作成する場合は、「パイプライン、ステージ、アクションを作成する」を参照してください。
を使用してイベント駆動型パイプラインを構築するには CodeCommit、パイプラインの PollForSourceChanges
パラメータを編集し、次のリソースを作成します。
-
EventBridge イベント
-
IAM このイベントがパイプラインを開始することを許可する ロール
パイプラインの PollForSourceChangesパラメータを編集するには
重要
このメソッドを使用してパイプラインを作成すると、PollForSourceChanges
パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータの有効な設定」を参照してください。
-
get-pipeline コマンドを実行して、パイプライン構造を JSON ファイルにコピーします。例えば、
MyFirstPipeline
という名前のパイプラインに対して、以下のコマンドを実行します。aws codepipeline get-pipeline --name
MyFirstPipeline
>pipeline.json
このコマンドは何も返しませんが、作成したファイルは、コマンドを実行したディレクトリにあります。
-
この例に示すように、プレーンテキストエディタでJSONファイルを開き
false
、PollForSourceChanges
パラメータを に変更してソースステージを編集します。この変更を行う理由 このパラメータを
false
に変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。"configuration": {
"PollForSourceChanges": "false",
"BranchName": "main", "RepositoryName": "MyTestRepo" }, -
get-pipeline コマンドを使用して取得したパイプライン構造を使用している場合は、JSONファイルから
metadata
行を削除します。それ以外の場合は、update-pipeline コマンドで使用することはできません。"metadata": { }
行と、"created"
、"pipelineARN"
、"updated"
フィールドを削除します。例えば、構造から以下の行を削除します。
"metadata": { "pipelineArn": "arn:aws:codepipeline:
region
:account-ID
:pipeline-name
", "created": "date
", "updated": "date
" },ファイルを保存します。
-
変更を適用するには、 update-pipeline コマンドを実行し、パイプラインJSONファイルを指定します。
重要
ファイル名の前に必ず
file://
を含めてください。このコマンドでは必須です。aws codepipeline update-pipeline --cli-input-json file://
pipeline.json
このコマンドは、編集したパイプラインの構造全体を返します。
注記
update-pipeline コマンドは、パイプラインを停止します。update-pipeline コマンドを実行したときにパイプラインによりリビジョンが実行されている場合、その実行は停止します。更新されたパイプラインによりそのリビジョンを実行するには、パイプラインを手動で開始する必要があります。パイプラインを手動で開始するには
start-pipeline-execution
コマンドを使用します。
をイベントソース CodeCommit として、 をターゲット CodePipeline として EventBridge ルールを作成するには
-
ルール EventBridge の呼び出し CodePipeline に使用する のアクセス許可を追加します。詳細については、「Amazon のリソースベースのポリシーの使用 EventBridge」を参照してください。
-
次のサンプルを使用して、 がサービスロールを EventBridge 引き受けることができる信頼ポリシーを作成します。信頼ポリシーに
trustpolicyforEB.json
と名前を付けます。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
次のコマンドを使用して、
Role-for-MyRule
ロールを作成し、信頼ポリシーをアタッチします。aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
-
このサンプルに示すようにJSON、 という名前のパイプラインのアクセス許可ポリシー を作成します
MyFirstPipeline
。アクセス権限ポリシーにpermissionspolicyforEB.json
と名前を付けます。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:80398EXAMPLE:MyFirstPipeline" ] } ] }
-
次のコマンドを使用して、
Role-for-MyRule
ロールにCodePipeline-Permissions-Policy-for-EB
アクセス権限ポリシーをアタッチします。この変更を行う理由 このポリシーをロールに追加すると、 のアクセス許可が作成されます EventBridge。
aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
-
-
put-rule コマンドを呼び出し、
--name
、--event-pattern
、--role-arn
パラメータを含めます。この変更を行う理由 このコマンドでは、 AWS CloudFormation でイベントを作成することができます。
次のサンプルコマンドは、
MyCodeCommitRepoRule
というルールを作成します。aws events put-rule --name "MyCodeCommitRepoRule" --event-pattern "{\"source\":[\"aws.codecommit\"],\"detail-type\":[\"CodeCommit Repository State Change\"],\"resources\":[\"
repository-ARN
\"],\"detail\":{\"referenceType\":[\"branch\"],\"referenceName\":[\"main
\"]}}" --role-arn "arn:aws:iam::ACCOUNT_ID
:role/Role-for-MyRule" -
をターゲット CodePipeline として追加するには、 put-targets コマンドを呼び出し、次のパラメータを含めます。
-
--rule
パラメータは、put-rule を使用して作成したrule_name
で使用されます。 -
--targets
パラメータは、ターゲットリストのリストId
とターゲットパイプラインのARN
で使用されます。
次のサンプルコマンドでは、
MyCodeCommitRepoRule
と呼ばれるルールに対して指定し、ターゲットId
は 1 番で構成されています。これは、ルールのターゲットのリストが何であるかを示し、この場合は ターゲット 1 です。このサンプルコマンドでは、パイプラインのサンプルのARN
も指定されます。パイプラインは、リポジトリ内に変更が加えられると開始します。aws events put-targets --rule MyCodeCommitRepoRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
-
ポーリングパイプラインの移行 (CodeCommit ソース) (AWS CloudFormation テンプレート)
を使用してイベント駆動型パイプラインを構築するには AWS CodeCommit、パイプラインの PollForSourceChanges
パラメータを編集し、次のリソースをテンプレートに追加します。
-
EventBridge ルール
-
EventBridge ルールのIAMロール
AWS CloudFormation を使用してパイプラインを作成および管理する場合、テンプレートには次のようなコンテンツが含まれます。
注記
PollForSourceChanges
と呼ばれるソースステージの Configuration
プロパティ。プロパティがテンプレートに含まれていない場合、PollForSourceChanges
はデフォルトで true
に設定されます。
パイプライン AWS CloudFormation テンプレートを更新して EventBridge ルールを作成するには
-
テンプレートの で
Resources
、AWS::IAM::Role
AWS CloudFormation リソースを使用して、イベントがパイプラインを開始できるようにするIAMロールを設定します。このエントリによって、2 つのポリシーを使用するロールが作成されます。-
最初のポリシーでは、ロールを引き受けることを許可します。
-
2 つめのポリシーでは、パイプラインを開始するアクセス権限が付与されます。
この変更を行う理由
AWS::IAM::Role
リソースを追加する AWS CloudFormation と、 は のアクセス許可を作成できます EventBridge。このリソースは AWS CloudFormation スタックに追加されます。 -
-
テンプレートの で
Resources
、AWS::Events::Rule
AWS CloudFormation リソースを使用して EventBridge ルールを追加します。このイベントパターンは、リポジトリへの変更のプッシュをモニタリングするイベントを作成します。がリポジトリの状態の変更 EventBridge を検出すると、ルールはターゲットパイプラインStartPipelineExecution
で を呼び出します。この変更を行う理由
AWS::Events::Rule
リソースを追加する AWS CloudFormation と、 はイベントを作成します。このリソースは AWS CloudFormation スタックに追加されます。 -
更新したテンプレートをローカルコンピュータに保存し、 AWS CloudFormation コンソールを開きます。
-
スタックを選択し、[既存スタックの変更セットの作成] を選択します。
-
テンプレートをアップロードし、 AWS CloudFormationに示された変更を表示します。これらがスタックに加えられる変更です。新しいリソースがリストに表示されています。
-
[実行] を選択します。
パイプラインの PollForSourceChangesパラメータを編集するには
重要
多くの場合、パイプラインの作成時に PollForSourceChanges
パラメータはデフォルトで true になります。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータの有効な設定」を参照してください。
-
テンプレートで、
PollForSourceChanges
をfalse
に変更します。パイプライン定義にPollForSourceChanges
が含まれていなかった場合は、追加してfalse
に設定します。この変更を行う理由 このパラメータを
false
に変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。
を使用してこれらのリソースを作成すると AWS CloudFormation、リポジトリ内のファイルが作成または更新されると、パイプラインがトリガーされます。以下に示しているのは、最終的なテンプレートスニペットです。
イベントに対応した S3 ソースを使用してポーリングパイプラインを移行する
Amazon S3 ソースを持つパイプラインの場合、変更検出が を介して、 EventBridge およびイベント通知が有効になっているソースバケットを使用して自動化されるようにパイプラインを変更します。これは、 CLIまたは を使用してパイプラインを移行する場合 AWS CloudFormation に推奨される方法です。
注記
これには、個別の CloudTrail 証跡を作成する必要がないイベント通知で有効になっているバケットの使用が含まれます。コンソールを使用している場合は、イベントルールと CloudTrail 証跡が設定されます。これらの手順については、「S3 ソースと CloudTrail 証跡を使用してポーリングパイプラインを移行する」を参照してください。
イベントに対して S3 ソースを有効にしたポーリングパイプラインの移行 (CLI)
ポーリング (定期チェック) を使用して イベントを EventBridge 代わりに使用しているパイプラインを編集するには、次の手順に従います。パイプラインを作成する場合は、「パイプライン、ステージ、アクションを作成する」を参照してください。
Amazon S3 でイベント駆動型パイプラインを構築するには、パイプラインの PollForSourceChanges
パラメータを編集してから、以下のリソースを作成します。
-
EventBridge イベントルール
-
IAM EventBridge イベントがパイプラインを開始できるようにするロール
Amazon S3 をイベントソースおよびターゲット CodePipeline として EventBridge ルールを作成し、アクセス許可ポリシーを適用するには
-
ルールの呼び出し EventBridge に使用する CodePipeline のアクセス許可を付与します。詳細については、「Amazon のリソースベースのポリシーの使用 EventBridge」を参照してください。
-
次のサンプルを使用して、 がサービスロールを EventBridge引き受けるように信頼ポリシーを作成します。このスクリプトに
trustpolicyforEB.json
という名前を付けます。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
次のコマンドを使用して、
Role-for-MyRule
ロールを作成し、信頼ポリシーをアタッチします。この変更を行う理由 この信頼ポリシーをロールに追加すると、 のアクセス許可が作成されます EventBridge。
aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
-
JSON「」という名前のパイプラインのアクセス許可ポリシーを作成します
MyFirstPipeline
。アクセス権限ポリシーにpermissionspolicyforEB.json
と名前を付けます。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:80398EXAMPLE:MyFirstPipeline" ] } ] }
-
次のコマンドを実行して、作成した
Role-for-MyRule
ロールに新しいCodePipeline-Permissions-Policy-for-EB
アクセス権限ポリシーをアタッチします。aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
-
-
put-rule コマンドを呼び出し、
--name
、--event-pattern
、--role-arn
パラメータを含めます。次のサンプルコマンドでは、
EnabledS3SourceRule
という名前のルールが作成されます。aws events put-rule --name "EnabledS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"Object Created\"],\"detail\":{\"bucket\":{\"name\":[\"amzn-s3-demo-source-bucket\"]}}}" --role-arn "arn:aws:iam::
ACCOUNT_ID
:role/Role-for-MyRule" -
をターゲット CodePipeline として追加するには、 put-targets コマンドを呼び出し、
--rule
および--targets
パラメータを含めます。次のコマンドでは、
EnabledS3SourceRule
という名前のルールに対して指定し、ターゲットId
は 1 番で構成されています。これは、ルールのターゲットのリストが何であるかを示し、この場合は ターゲット 1 です。このコマンドでは、パイプラインのサンプルのARN
も指定されます。パイプラインは、リポジトリ内に変更が加えられると開始します。aws events put-targets --rule EnabledS3SourceRule --targets Id=codepipeline-AppPipeline,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
パイプラインの PollForSourceChangesパラメータを編集するには
重要
このメソッドを使用してパイプラインを作成すると、PollForSourceChanges
パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータの有効な設定」を参照してください。
-
get-pipeline コマンドを実行して、パイプライン構造を JSON ファイルにコピーします。例えば、
MyFirstPipeline
という名前のパイプラインに対して、以下のコマンドを実行します。aws codepipeline get-pipeline --name
MyFirstPipeline
>pipeline.json
このコマンドは何も返しませんが、作成したファイルは、コマンドを実行したディレクトリにあります。
-
この例に示すように、任意のプレーンテキストエディタでJSONファイルを開き
false
、 という名前のバケットのPollForSourceChanges
パラメータamzn-s3-demo-source-bucket
を に変更してソースステージを編集します。この変更を行う理由 このパラメータを
false
に設定すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。"configuration": { "S3Bucket": "amzn-s3-demo-source-bucket",
"PollForSourceChanges": "false",
"S3ObjectKey": "index.zip" }, -
get-pipeline コマンドを使用して取得したパイプライン構造を使用している場合は、JSONファイルから
metadata
行を削除する必要があります。それ以外の場合は、update-pipeline コマンドで使用することはできません。"metadata": { }
行と、"created"
、"pipelineARN"
、"updated"
フィールドを削除します。例えば、構造から以下の行を削除します。
"metadata": { "pipelineArn": "arn:aws:codepipeline:
region
:account-ID
:pipeline-name
", "created": "date
", "updated": "date
" },ファイルを保存します。
-
変更を適用するには、 update-pipeline コマンドを実行し、パイプラインJSONファイルを指定します。
重要
ファイル名の前に必ず
file://
を含めてください。このコマンドでは必須です。aws codepipeline update-pipeline --cli-input-json file://
pipeline.json
このコマンドは、編集したパイプラインの構造全体を返します。
注記
update-pipeline コマンドは、パイプラインを停止します。update-pipeline コマンドを実行したときにパイプラインによりリビジョンが実行されている場合、その実行は停止します。更新されたパイプラインによりそのリビジョンを実行するには、パイプラインを手動で開始する必要があります。パイプラインを手動で開始するには start-pipeline-execution コマンドを使用します。
イベントに対して S3 ソースを有効にしたポーリングパイプラインを移行する (AWS CloudFormation テンプレート)
この手順は、ソースバケットでイベントが有効になっているパイプライン用です。
以下の手順を使用して、Amazon S3 ソースを含むパイプラインを、ポーリングからイベントベースの変更検出に編集します。
Amazon S3 でイベント駆動型パイプラインを構築するには、パイプラインの PollForSourceChanges
パラメータを編集してから、以下のリソースをテンプレートに追加します。
-
EventBridge このイベントがパイプラインを開始できるようにするルールとIAMロール。
AWS CloudFormation を使用してパイプラインを作成および管理する場合、テンプレートには次のようなコンテンツが含まれます。
注記
PollForSourceChanges
と呼ばれるソースステージの Configuration
プロパティ。テンプレートにプロパティが含まれていない場合、PollForSourceChanges
はデフォルトで true
に設定されます。
Amazon S3 をイベントソースおよびターゲット CodePipeline として EventBridge ルールを作成し、アクセス許可ポリシーを適用するには
-
テンプレートの で
Resources
、AWS::IAM::Role
AWS CloudFormation リソースを使用して、イベントがパイプラインを開始できるようにするIAMロールを設定します。このエントリによって、2 つのポリシーを使用するロールが作成されます。-
最初のポリシーでは、ロールを引き受けることを許可します。
-
2 つめのポリシーでは、パイプラインを開始するアクセス権限が付与されます。
この変更を行う理由
AWS::IAM::Role
リソースを追加する AWS CloudFormation と、 は のアクセス許可を作成できます EventBridge。このリソースは AWS CloudFormation スタックに追加されます。 -
-
AWS::Events::Rule
AWS CloudFormation リソースを使用して EventBridge ルールを追加します。このイベントパターンは、Amazon S3 ソースバケット内のオブジェクトの作成または削除をモニタリングするイベントを作成します。さらに、パイプラインのターゲットも含めます。オブジェクトが作成されると、このルールによりターゲットパイプラインでStartPipelineExecution
が呼び出されます。この変更を行う理由
AWS::Events::Rule
リソースを追加する AWS CloudFormation と、 はイベントを作成します。このリソースは AWS CloudFormation スタックに追加されます。 -
更新したテンプレートをローカルコンピュータに保存し、 AWS CloudFormation コンソールを開きます。
-
スタックを選択し、[既存スタックの変更セットの作成] を選択します。
-
更新されたテンプレートをアップロードし、 AWS CloudFormationに示された変更を表示します。これらがスタックに加えられる変更です。新しいリソースがリストに表示されています。
-
[実行] を選択します。
パイプラインの PollForSourceChangesパラメータを編集するには
重要
このメソッドを使用してパイプラインを作成すると、PollForSourceChanges
パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータの有効な設定」を参照してください。
-
テンプレートで、
PollForSourceChanges
をfalse
に変更します。パイプライン定義にPollForSourceChanges
が含まれていなかった場合は、追加してfalse
に設定します。この変更を行う理由
PollForSourceChanges
パラメータをfalse
に変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。
AWS CloudFormation を使用してこれらのリソースを作成すると、リポジトリ内のファイルが作成または更新されたときにパイプラインがトリガーされます。
注記
ここで手順は終わりではありません。パイプラインは作成されますが、Amazon S3 パイプライン用の 2 番目の AWS CloudFormation テンプレートを作成する必要があります。2 番目のテンプレートを作成しない場合、パイプラインに変更検出機能はありません。
S3 ソースと CloudTrail 証跡を使用してポーリングパイプラインを移行する
Amazon S3 ソースを持つパイプラインの場合は、 を介して変更検出が自動化されるようにパイプラインを変更します EventBridge。以下のいずれかの方法で移行を実装します。
S3 ソースと CloudTrail 証跡を使用してポーリングパイプラインを移行する (CLI)
ポーリング (定期チェック) を使用して イベントを EventBridge 代わりに使用しているパイプラインを編集するには、次の手順に従います。パイプラインを作成する場合は、「パイプライン、ステージ、アクションを作成する」を参照してください。
Amazon S3 でイベント駆動型パイプラインを構築するには、パイプラインの PollForSourceChanges
パラメータを編集してから、以下のリソースを作成します。
-
AWS CloudTrail Amazon S3 がイベントのログ記録に使用できる証跡、バケット、バケットポリシー。
-
EventBridge イベント
-
IAM EventBridge イベントがパイプラインを開始できるようにするロール
AWS CloudTrail 証跡を作成し、ログ記録を有効にするには
を使用して証跡 AWS CLI を作成するには、 create-trail コマンドを呼び出し、以下を指定します。
-
証跡名。
-
AWS CloudTrailにバケットポリシーをすでに適用しているバケットです。
詳細については、AWS 「コマンドラインインターフェイス を使用した証跡の作成」を参照してください。
-
create-trail コマンドを呼び出し、
--name
および--s3-bucket-name
パラメータを含めます。この変更を行う理由 これにより、 CloudTrailS3 ソースバケットに必要な証跡が作成されます。
次のコマンドでは、
--name
および--s3-bucket-name
を使用して、my-trail
という名前の証跡と、amzn-s3-demo-source-bucket
という名前のバケットを作成します。aws cloudtrail create-trail --name my-trail --s3-bucket-name amzn-s3-demo-source-bucket
-
start-logging コマンドを呼び出し、
--name
パラメータを含めます。この変更を行う理由 このコマンドは、ソースバケットの CloudTrail ログ記録を開始し、イベントを に送信します EventBridge。
例:
次のコマンドでは、
--name
を使用して、my-trail
という名前の証跡のログ記録を開始します。aws cloudtrail start-logging --name my-trail
-
put-event-selectors コマンドを呼び出し、
--trail-name
および--event-selectors
パラメータを含めます。イベントセレクタを使用して、証跡がソースバケットのデータイベントを記録し、イベントを EventBridge ルールに送信するように指定します。この変更を行う理由 このコマンドはイベントをフィルタ処理します。
例:
次のサンプルコマンドでは、
--trail-name
および--event-selectors
を使用してソースバケットとamzn-s3-demo-source-bucket/myFolder
という名前のプレフィックスにデータイベントの管理を指定します。aws cloudtrail put-event-selectors --trail-name
my-trail
--event-selectors '[{ "ReadWriteType": "WriteOnly", "IncludeManagementEvents":false, "DataResources": [{ "Type": "AWS::S3::Object", "Values": ["arn:aws:s3:::amzn-s3-demo-source-bucket/myFolder/file.zip"] }] }]'
Amazon S3 をイベントソースおよびターゲット CodePipeline として EventBridge ルールを作成し、アクセス許可ポリシーを適用するには
-
ルールの呼び出し EventBridge に使用する CodePipeline のアクセス許可を付与します。詳細については、「Amazon のリソースベースのポリシーの使用 EventBridge」を参照してください。
-
次のサンプルを使用して、 がサービスロールを EventBridge 引き受けるように信頼ポリシーを作成します。このスクリプトに
trustpolicyforEB.json
という名前を付けます。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
次のコマンドを使用して、
Role-for-MyRule
ロールを作成し、信頼ポリシーをアタッチします。この変更を行う理由 この信頼ポリシーをロールに追加すると、 のアクセス許可が作成されます EventBridge。
aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
-
JSON「」という名前のパイプラインのアクセス許可ポリシー を作成します
MyFirstPipeline
。アクセス権限ポリシーにpermissionspolicyforEB.json
と名前を付けます。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:80398EXAMPLE:MyFirstPipeline" ] } ] }
-
次のコマンドを実行して、作成した
Role-for-MyRule
ロールに新しいCodePipeline-Permissions-Policy-for-EB
アクセス権限ポリシーをアタッチします。aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
-
-
put-rule コマンドを呼び出し、
--name
、--event-pattern
、--role-arn
パラメータを含めます。次のサンプルコマンドでは、
MyS3SourceRule
という名前のルールが作成されます。aws events put-rule --name "MyS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventSource\":[\"s3.amazonaws.com\"],\"eventName\":[\"CopyObject\",\"PutObject\",\"CompleteMultipartUpload\"],\"requestParameters\":{\"bucketName\":[\"amzn-s3-demo-source-bucket\"],\"key\":[\"my-key\"]}}} --role-arn "arn:aws:iam::
ACCOUNT_ID
:role/Role-for-MyRule" -
をターゲット CodePipeline として追加するには、 put-targets コマンドを呼び出し、
--rule
および--targets
パラメータを含めます。次のコマンドでは、
MyS3SourceRule
という名前のルールに対して指定し、ターゲットId
は 1 番で構成されています。これは、ルールのターゲットのリストが何であるかを示し、この場合は ターゲット 1 です。このコマンドでは、パイプラインのサンプルのARN
も指定されます。パイプラインは、リポジトリ内に変更が加えられると開始します。aws events put-targets --rule MyS3SourceRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
パイプラインの PollForSourceChangesパラメータを編集するには
重要
このメソッドを使用してパイプラインを作成すると、PollForSourceChanges
パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータの有効な設定」を参照してください。
-
get-pipeline コマンドを実行して、パイプライン構造を JSON ファイルにコピーします。例えば、
MyFirstPipeline
という名前のパイプラインに対して、以下のコマンドを実行します。aws codepipeline get-pipeline --name
MyFirstPipeline
>pipeline.json
このコマンドは何も返しませんが、作成したファイルは、コマンドを実行したディレクトリにあります。
-
この例に示すように、プレーンテキストエディタで JSON ファイルを開き
false
、 という名前のバケットのPollForSourceChanges
パラメータamzn-s3-demo-source-bucket
を に変更してソースステージを編集します。この変更を行う理由 このパラメータを
false
に設定すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。"configuration": { "S3Bucket": "amzn-s3-demo-source-bucket",
"PollForSourceChanges": "false",
"S3ObjectKey": "index.zip" }, -
get-pipeline コマンドを使用して取得したパイプライン構造を使用している場合は、JSONファイルから
metadata
行を削除する必要があります。それ以外の場合は、update-pipeline コマンドで使用することはできません。"metadata": { }
行と、"created"
、"pipelineARN"
、"updated"
フィールドを削除します。例えば、構造から以下の行を削除します。
"metadata": { "pipelineArn": "arn:aws:codepipeline:
region
:account-ID
:pipeline-name
", "created": "date
", "updated": "date
" },ファイルを保存します。
-
変更を適用するには、 update-pipeline コマンドを実行し、パイプラインJSONファイルを指定します。
重要
ファイル名の前に必ず
file://
を含めてください。このコマンドでは必須です。aws codepipeline update-pipeline --cli-input-json file://
pipeline.json
このコマンドは、編集したパイプラインの構造全体を返します。
注記
update-pipeline コマンドは、パイプラインを停止します。update-pipeline コマンドを実行したときにパイプラインによりリビジョンが実行されている場合、その実行は停止します。更新されたパイプラインによりそのリビジョンを実行するには、パイプラインを手動で開始する必要があります。パイプラインを手動で開始するには start-pipeline-execution コマンドを使用します。
S3 ソースと CloudTrail 証跡を使用してポーリングパイプラインを移行する (AWS CloudFormation テンプレート)
以下の手順を使用して、Amazon S3 ソースを含むパイプラインを、ポーリングからイベントベースの変更検出に編集します。
Amazon S3 でイベント駆動型パイプラインを構築するには、パイプラインの PollForSourceChanges
パラメータを編集してから、以下のリソースをテンプレートに追加します。
-
EventBridge では、すべての Amazon S3 イベントをログに記録する必要があります。発生するイベントのロク記録に Amazon S3 が使用できる AWS CloudTrail 証跡、バケット、バケットポリシーを作成する必要があります。詳細については、「 証跡のデータイベント 」と「 管理イベントのログ記録 」を参照してください。
-
EventBridge このイベントがパイプラインを開始できるようにするルールとIAMロール。
AWS CloudFormation を使用してパイプラインを作成および管理する場合、テンプレートには次のようなコンテンツが含まれます。
注記
PollForSourceChanges
と呼ばれるソースステージの Configuration
プロパティ。テンプレートにプロパティが含まれていない場合、PollForSourceChanges
はデフォルトで true
に設定されます。
Amazon S3 をイベントソースおよびターゲット CodePipeline として EventBridge ルールを作成し、アクセス許可ポリシーを適用するには
-
テンプレートの で
Resources
、AWS::IAM::Role
AWS CloudFormation リソースを使用して、イベントがパイプラインを開始できるようにするIAMロールを設定します。このエントリによって、2 つのポリシーを使用するロールが作成されます。-
最初のポリシーでは、ロールを引き受けることを許可します。
-
2 つめのポリシーでは、パイプラインを開始するアクセス権限が付与されます。
この変更を行う理由
AWS::IAM::Role
リソースを追加する AWS CloudFormation と、 は のアクセス許可を作成できます EventBridge。このリソースは AWS CloudFormation スタックに追加されます。 -
-
AWS::Events::Rule
AWS CloudFormation リソースを使用して EventBridge ルールを追加します。このイベントパターンは、Amazon S3 ソースバケットでのCopyObject
、PutObject
、およびCompleteMultipartUpload
をモニタリングするイベントを作成します。さらに、パイプラインのターゲットも含めます。CopyObject
、PutObject
、またはCompleteMultipartUpload
が発生すると、このルールは、ターゲットパイプラインでStartPipelineExecution
を呼び出します。この変更を行う理由
AWS::Events::Rule
リソースを追加する AWS CloudFormation と、 はイベントを作成します。このリソースは AWS CloudFormation スタックに追加されます。 -
このスニペットを最初のテンプレートに追加して、クロススタック機能を有効にします。
-
更新されたテンプレートをローカルコンピュータに保存し、 AWS CloudFormation コンソールを開きます。
スタックを選択し、[既存スタックの変更セットの作成] を選択します。
更新されたテンプレートをアップロードし、 AWS CloudFormationに示された変更を表示します。これらがスタックに加えられる変更です。新しいリソースがリストに表示されています。
[実行] を選択します。
パイプラインの PollForSourceChangesパラメータを編集するには
重要
このメソッドを使用してパイプラインを作成すると、PollForSourceChanges
パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータの有効な設定」を参照してください。
-
テンプレートで、
PollForSourceChanges
をfalse
に変更します。パイプライン定義にPollForSourceChanges
が含まれていなかった場合は、追加してfalse
に設定します。この変更を行う理由
PollForSourceChanges
パラメータをfalse
に変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。
Amazon S3 パイプラインの CloudTrail リソース用に 2 番目のテンプレートを作成するには
-
別のテンプレートの で
Resources
、、AWS::S3::BucketPolicy
、およびAWS::S3::Bucket
AWS::CloudTrail::Trail
AWS CloudFormation リソースを使用して、 のシンプルなバケット定義と証跡を提供します CloudTrail。この変更を行う理由 現在のアカウントあたり 5 つの証跡の制限を考慮すると、 CloudTrail 証跡は個別に作成および管理する必要があります。(「」の「 の制限 AWS CloudTrail」を参照してください。) ただし、1 つの証跡に複数の Amazon S3 バケットを含めることができるため、いったん証跡を作成してから、必要に応じて他のパイプライン用に Amazon S3 バケットを追加できます。2 番目のサンプルテンプレートファイルに以下のコードを貼り付けます。
AWS CloudFormation を使用してこれらのリソースを作成すると、リポジトリ内のファイルが作成または更新されたときにパイプラインがトリガーされます。
注記
ここで手順は終わりではありません。パイプラインは作成されますが、Amazon S3 パイプライン用の 2 番目の AWS CloudFormation テンプレートを作成する必要があります。2 番目のテンプレートを作成しない場合、パイプラインに変更検出機能はありません。
GitHub バージョン 1 のソースアクションのポーリングパイプラインを接続に移行する
GitHub バージョン 1 のソースアクションを移行して、外部リポジトリの接続を使用できます。これは、バージョン 1 のソースアクションを持つ GitHubパイプラインに推奨される変更検出方法です。
GitHub バージョン 1 のソースアクションを持つパイプラインでは、 を介して変更検出が自動化されるように、 GitHub バージョン 2 アクションを使用するようにパイプラインを変更することをお勧めします AWS CodeConnections。接続の使用の詳細については、「GitHub 接続」を参照してください。
への接続を作成する GitHub (コンソール)
コンソールを使用して、 への接続を作成できます GitHub。
ステップ 1: バージョン 1 GitHub アクションを置き換える
パイプライン編集ページを使用して、バージョン 1 GitHub アクションをバージョン 2 GitHub アクションに置き換えます。
バージョン 1 GitHub アクションを置き換えるには
-
CodePipeline コンソールにサインインします。
-
パイプラインを選択し、[編集] を選択します。ソースステージで、[ステージを編集] を選択します。アクションを更新することを推奨するメッセージが表示されます。
-
アクションプロバイダー で、 GitHub (バージョン 2) を選択します。
-
次のいずれかを行います。
-
接続 で、プロバイダーへの接続をまだ作成していない場合は、 に接続 GitHubを選択します。ステップ 2: への接続を作成します GitHub。
-
[接続] でプロバイダへの接続を既に作成している場合は、その接続を選択します。ステップ 3: 接続のソースアクションを保存するに進みます。
-
ステップ 2: への接続を作成する GitHub
接続の作成を選択すると、Connect to GitHub ページが表示されます。
への接続を作成するには GitHub
-
GitHub 接続設定 では、接続名が接続名 に表示されます。
GitHub Apps で、アプリのインストールを選択するか、新しいアプリのインストールを選択して作成します。
注記
特定のプロバイダーへのすべての接続に対してアプリを 1 つインストールします。 GitHub アプリを既にインストールしている場合は、アプリを選択してこのステップをスキップします。
-
の承認ページ GitHub が表示された場合は、認証情報を使用してログインし、続行することを選択します。
-
アプリのインストールページで、 AWS CodeStar アプリが GitHub アカウントに接続しようとしていることを示すメッセージが表示されます。
注記
アプリは GitHub 、アカウントごとに 1 回だけインストールします。アプリケーションをインストール済みである場合は、[Configure] (設定) を選択してアプリのインストールの変更ページに進むか、戻るボタンでコンソールに戻ることができます。
-
[ AWS CodeStarのインストール] ページで、[インストール] を選択します。
-
Connect to GitHub ページに、新しいインストールの接続 ID が表示されます。[接続]を選択します。
ステップ 3: GitHub ソースアクションを保存する
[アクションを編集] というページで更新を実行し、新しいソースアクションを保存します。
GitHub ソースアクションを保存するには
-
[リポジトリ] で、サードパーティーのリポジトリの名前を入力します。[ブランチ] で、パイプラインでソースの変更を検出するブランチを入力します。
注記
[Repository] で、例に示すように
owner-name/repository-name
を入力します。my-account/my-repository
-
[Output artifact format (出力アーティファクトのフォーマット)] で、アーティファクトのフォーマットを選択します。
-
デフォルトの メソッドを使用して GitHub アクションから出力アーティファクトを保存するには、CodePipelineデフォルトの を選択します。アクションは GitHub リポジトリからファイルにアクセスし、パイプラインアーティファクトストアのZIPファイルにアーティファクトを保存します。
-
リポジトリへのURL参照を含むJSONファイルを保存して、ダウンストリームアクションが Git コマンドを直接実行できるようにするには、フルクローン を選択します。このオプションは、 CodeBuild ダウンストリームアクションでのみ使用できます。
このオプションを選択した場合は、「」に示すように、 CodeBuild プロジェクトサービスロールのアクセス許可を更新する必要がありますBitbucket、 GitHub Enterprise Server GitHub、または GitLab.com への接続 CodeBuild GitClone 許可を追加する。フルクローン オプションの使い方を紹介したチュートリアルは、チュートリアル: GitHub パイプラインソースでフルクローンを使用する をご覧ください。
-
-
出力アーティファクト の場合、
SourceArtifact
のようにこのアクションの出力アーティファクトの名前を保持できます。[Done] を選択して、[アクションを編集] ページを閉じます。 -
[Done] を選択して、ステージの編集ページを閉じます。[Save] を選択して、パイプラインの編集ページを閉じます。
GitHub (CLI) への接続を作成する
AWS Command Line Interface (AWS CLI) を使用して、 への接続を作成できます GitHub。
これを行うには、create-connection コマンドを使用します。
重要
AWS CLI または を通じて作成された接続 AWS CloudFormation は、デフォルトでPENDING
ステータスになっています。CLI または との接続を作成したら AWS CloudFormation、コンソールを使用して接続を編集し、ステータスを にしますAVAILABLE
。
への接続を作成するには GitHub
-
ターミナル (Linux/macOS/Unix) またはコマンドプロンプト (Windows) を開きます。 AWS CLI を使用して create-connection コマンドを実行し、接続
--connection-name
の--provider-type
と を指定します。この例では、サードパーティープロバイダー名はGitHub
で、指定された接続名はMyConnection
です。aws codeconnections create-connection --provider-type GitHub --connection-name MyConnection
成功すると、このコマンドは次のような接続ARN情報を返します。
{ "ConnectionArn": "arn:aws:codeconnections:us-west-2:
account_id
:connection/aEXAMPLE-8aad-4d5d-8878-dfcab0bc441f" } -
コンソールを使用して接続を完了します。
GitHub バージョン 1 のソースアクションのポーリングパイプラインをウェブフックに移行する
パイプラインを移行して、ウェブフックを使用して GitHub ソースリポジトリの変更を検出できます。このウェブフックへの移行は、 GitHub バージョン 1 アクション専用です。
重要
CodePipeline ウェブフックを作成するときは、独自の認証情報を使用したり、複数のウェブフックで同じシークレットトークンを再利用したりしないでください。セキュリティを最適化するには、作成するウェブフックごとに一意のシークレットトークンを生成します。シークレットトークンは、指定した任意の文字列で、 GitHub を使用して に送信されたウェブフックペイロードを計算して署名し CodePipeline、ウェブフックペイロードの整合性と信頼性を保護します。独自の認証情報を使用したり、複数のウェブフックで同じトークンを再利用したりすると、セキュリティの脆弱性が発生する可能性があります。
ポーリングパイプラインをウェブフックに移行する (GitHub バージョン 1 のソースアクション) (コンソール)
GitHub バージョン 1 のソースアクションでは、 CodePipeline コンソールを使用してパイプラインを更新し、ウェブフックを使用して GitHub ソースリポジトリの変更を検出できます。
ポーリング (定期チェック) を使用して EventBridge 代わりに使用するパイプラインを編集するには、次の手順に従います。パイプラインを作成する場合は、「パイプライン、ステージ、アクションを作成する」を参照してください。
コンソールを使用すると、パイプラインの PollForSourceChanges
パラメータが変更されます。 GitHub ウェブフックが作成され、登録されます。
パイプラインソースステージを編集するには
-
にサインイン AWS Management Console し、http://console.aws.amazon.com/codesuite/codepipeline/home
で CodePipeline コンソールを開きます。 AWS アカウントに関連付けられているすべてのパイプラインの名前が表示されます。
-
[Name] で、編集するパイプラインの名前を選択します。これにより、パイプラインの詳細ビューが開いて、パイプラインの各ステージの各アクションの状態などがわかります。
-
パイプライン詳細ページで、[編集] を選択します。
-
[Edit (編集)] ステージで、ソースアクションの編集アイコンを選択します。
-
変更検出オプションを展開し、Amazon CloudWatch Events を使用して変更が発生したときに自動的にパイプラインを起動する (推奨) を選択します。
ソースの変更を検出 GitHub するためのウェブフック CodePipeline を作成するためのメッセージが表示されます。 AWS CodePipeline はウェブフックを作成します。以下のオプションでオプトアウトできます。[Update] (更新) を選択します。ウェブフックに加えて、 は以下 CodePipeline を作成します。
-
シークレット。ランダムに生成され、 への接続を承認するために使用します GitHub。
-
リージョンのパブリックエンドポイントを使用してURL生成されたウェブフック。
CodePipeline はウェブフックを に登録します GitHub。これにより、リポジトリイベントを受信するURLように がサブスクライブされます。
-
-
パイプラインの編集が終わったら、[パイプラインの変更を保存] を選択して概要ページに戻ります。
パイプラインに対して作成されるウェブフックの名前を示すメッセージが表示されます。[Save and continue] を選択します。
-
アクションをテストするには、 を使用して変更をリリース AWS CLI し、パイプラインのソースステージで指定されたソースに変更をコミットします。
ポーリングパイプラインをウェブフックに移行する (GitHub バージョン 1 ソースアクション) (CLI)
ウェブフックを使用するために定期的なチェックを使用しているパイプラインを編集するには、次の手順を使用します。パイプラインを作成する場合は、「パイプライン、ステージ、アクションを作成する」を参照してください。
イベント駆動型パイプラインを構築するには、パイプラインの PollForSourceChanges
パラメータを編集してから、以下のリソースを手動で作成します。
-
GitHub Webhook および認証パラメータ
ウェブフックを作成して登録するには
注記
CLI または を使用してパイプライン AWS CloudFormation を作成し、ウェブフックを追加する場合は、定期的なチェックを無効にする必要があります。定期的なチェックを無効にするには、以下の最終的な手順に詳述するとおり、PollForSourceChanges
パラメータを明示的に追加して false に設定する必要があります。それ以外の場合、 CLIまたは AWS CloudFormation パイプラインのデフォルトは true にPollForSourceChanges
デフォルト設定され、パイプライン構造の出力には表示されません。 PollForSourceChanges デフォルトの詳細については、「」を参照してくださいPollForSourceChanges パラメータの有効な設定。
-
テキストエディタで、作成するウェブフックのJSONファイルを作成して保存します。「
my-webhook
」という名前のウェブフックには、このサンプルを使用します。{ "webhook": { "name": "my-webhook", "targetPipeline": "
pipeline_name
", "targetAction": "source_action_name
", "filters": [{ "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" }], "authentication": "GITHUB_HMAC", "authenticationConfiguration": { "SecretToken": "secret
" } } } -
put-webhook コマンドを呼び出し、
--cli-input
および--region
パラメータを含めます。次のサンプルコマンドは、
webhook_json
JSON ファイルを使用してウェブフックを作成します。aws codepipeline put-webhook --cli-input-json file://webhook_json.json --region "eu-central-1"
-
この例では、 URL と ARNは という名前のウェブフックに対して返されます
my-webhook
。{ "webhook": { "url": "https://webhooks.
domain
.com/trigger111111111EXAMPLE11111111111111111", "definition": { "authenticationConfiguration": { "SecretToken": "secret
" }, "name": "my-webhook", "authentication": "GITHUB_HMAC", "targetPipeline": "pipeline_name
", "targetAction": "Source", "filters": [ { "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" } ] }, "arn": "arn:aws:codepipeline:eu-central-1:ACCOUNT_ID
:webhook:my-webhook" }, "tags": [{ "key": "Project", "value": "ProjectA" }] }この例では、ウェブフックに
Project
タグキーとProjectA
値を含めることで、ウェブフックにタグ付けを追加します。でのリソースのタグ付けの詳細については CodePipeline、「」を参照してくださいリソースのタグ付け。 -
register-webhook-with-third-party コマンドを呼び出し、
--webhook-name
パラメータを含めます。次のサンプルコマンドは、「
my-webhook
」という名前のウェブフックを登録します。aws codepipeline register-webhook-with-third-party --webhook-name my-webhook
パイプラインの PollForSourceChangesパラメータを編集するには
重要
このメソッドを使用してパイプラインを作成すると、PollForSourceChanges
パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータの有効な設定」を参照してください。
-
get-pipeline コマンドを実行して、パイプライン構造を JSON ファイルにコピーします。例えば、
MyFirstPipeline
という名前のパイプラインの場合は、以下のコマンドを入力します。aws codepipeline get-pipeline --name
MyFirstPipeline
>pipeline.json
このコマンドは何も返しませんが、作成したファイルは、コマンドを実行したディレクトリにあります。
-
任意のプレーンテキストエディタでJSONファイルを開き、
PollForSourceChanges
パラメータを変更または追加してソースステージを編集します。この例では、UserGitHubRepo
という名前のリポジトリで、パラメータをfalse
に設定します。この変更を行う理由 このパラメータを変更すると、定期的なチェックがオフになるため、イベントベースの変更検出のみ使用することができます。
"configuration": { "Owner": "
name
", "Repo": "UserGitHubRepo","PollForSourceChanges": "false",
"Branch": "main", "OAuthToken": "****" }, -
get-pipeline コマンドを使用して取得したパイプライン構造を使用する場合は、JSONファイルから
metadata
行を削除して、ファイル内の構造を編集する必要があります。それ以外の場合は、update-pipeline コマンドで使用することはできません。:{ }
および 、、"updated"
フィールドを含む"created"
"pipelineARN"
、 JSON ファイル内のパイプライン構造から"metadata"
セクションを削除します。例えば、構造から以下の行を削除します。
"metadata": { "pipelineArn": "arn:aws:codepipeline:
region
:account-ID
:pipeline-name
", "created": "date
", "updated": "date
" },ファイルを保存します。
-
変更を適用するには、次のようなパイプラインJSONファイルを指定して update-pipeline コマンドを実行します。
重要
ファイル名の前に必ず
file://
を含めてください。このコマンドでは必須です。aws codepipeline update-pipeline --cli-input-json file://
pipeline.json
このコマンドは、編集したパイプラインの構造全体を返します。
注記
update-pipeline コマンドは、パイプラインを停止します。update-pipeline コマンドを実行したときにパイプラインによりリビジョンが実行されている場合、その実行は停止します。更新されたパイプラインによりそのリビジョンを実行するには、パイプラインを手動で開始する必要があります。パイプラインを手動で開始するには start-pipeline-execution コマンドを使用します。
プッシュイベントのパイプラインを更新する (GitHub バージョン 1 ソースアクション) (AWS CloudFormation テンプレート)
以下の手順に従って、ウェブフックを使用してパイプライン ( GitHub ソースを含む) を定期的なチェック (ポーリング) からイベントベースの変更検出に更新します。
でイベント駆動型パイプラインを構築するには AWS CodeCommit、パイプラインの PollForSourceChanges
パラメータを編集し、テンプレートに GitHub ウェブフックリソースを追加します。
AWS CloudFormation を使用してパイプラインを作成および管理する場合、テンプレートには次のようなコンテンツがあります。
注記
ソースステージ内の PollForSourceChanges
設定プロパティを書き留めます。テンプレートにプロパティが含まれていない場合、PollForSourceChanges
はデフォルトで true
に設定されます。
テンプレートにパラメータを追加してウェブフックを作成するには
認証情報の保存 AWS Secrets Manager には を使用することを強くお勧めします。Secrets Manager を使用する場合は、Secrets Manager でシークレットパラメータをすでに設定して保存しておく必要があります。この例では、 GitHubウェブフックの認証情報に Secrets Manager への動的参照を使用します。詳細については、「動的な参照を使用してテンプレート値を指定する」を参照してください。
重要
シークレットパラメータを渡すときは、値をテンプレートに直接入力しないでください。値はプレーンテキストとしてレンダリングされるため、読み取り可能です。セキュリティ上の理由から、テンプレートにプレーンテキストを使用して認証情報 AWS CloudFormation を保存しないでください。
CLI または を使用してパイプライン AWS CloudFormation を作成し、ウェブフックを追加する場合は、定期的なチェックを無効にする必要があります。
注記
定期的なチェックを無効にするには、以下の最終的な手順に詳述するとおり、PollForSourceChanges
パラメータを明示的に追加して false に設定する必要があります。それ以外の場合、 CLIまたは AWS CloudFormation パイプラインのデフォルトはPollForSourceChanges
デフォルトで true になり、パイプライン構造の出力には表示されません。 PollForSourceChanges デフォルトの詳細については、「」を参照してくださいPollForSourceChanges パラメータの有効な設定。
-
テンプレートの
Resources
に、パラメータを追加します。 -
AWS::CodePipeline::Webhook
AWS CloudFormation リソースを使用してウェブフックを追加します。注記
指定した
TargetAction
は、パイプラインで定義したソースアクションのName
プロパティと一致する必要があります。RegisterWithThirdParty
が に設定されている場合true
、 に関連付けられたユーザーが で必要なスコープを設定OAuthToken
できることを確認します GitHub。トークンとウェブフックには、次の GitHub スコープが必要です。-
repo
- パブリックおよびプライベートリポジトリからパイプラインにアーティファクトを読み込んでプルする完全制御に使用されます。 -
admin:repo_hook
- リポジトリフックの完全制御に使用されます。
それ以外の場合、 は 404 GitHub を返します。返される 404 の詳細については、「https://help.github.com/articles/about-webhooks
」を参照してください -
-
更新されたテンプレートをローカルコンピュータに保存し、 AWS CloudFormation コンソールを開きます。
-
スタックを選択し、[既存スタックの変更セットの作成] を選択します。
-
テンプレートをアップロードし、 AWS CloudFormationに示された変更を表示します。これらがスタックに加えられる変更です。新しいリソースがリストに表示されています。
-
[実行] を選択します。
パイプラインの PollForSourceChangesパラメータを編集するには
重要
このメソッドを使用してパイプラインを作成すると、PollForSourceChanges
パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータの有効な設定」を参照してください。
-
テンプレートで、
PollForSourceChanges
をfalse
に変更します。パイプライン定義にPollForSourceChanges
が含まれていなかった場合は、追加して false に設定します。この変更を行う理由 このパラメータを
false
に変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。
を使用してこれらのリソースを作成すると AWS CloudFormation、定義されたウェブフックが指定された GitHub リポジトリに作成されます。パイプラインはコミット時にトリガーされます。