AWS CodePipeline が 2 回実行されます。この問題の解決方法を教えてください。
簡単な説明
AWS CodePipeline が複数回実行される 2 つの一般的な理由は次のとおりです。
この問題を解決するには、まずパイプライン履歴を見て、パイプラインが 2 回実行される原因を確認します。
同じ CloudWatch Events ルールによってトリガーされたパイプラインの起動が複数ある場合は、重複するルールを削除または無効にします。
ポーリングによってトリガーされたパイプラインの起動がある場合は、「PollForSourceChanges パラメータのデフォルト動作を理解する」セクションをご参照ください。その後、シナリオに基づいて、次のいずれかのセクションの手順を実行します。
- AWS CloudFormation でパイプラインを作成した場合は、「AWS CloudFormation テンプレートを更新」セクションの手順を完了します。
- AWS コマンドラインインターフェイス (AWS CLI) を使用してパイプラインを作成した場合は、「JSON ファイルでパイプラインを更新する」セクションの手順を完了します。
- AWS SDK を使用してパイプラインを作成した場合は、「言語の設定構文に基づいてパイプラインを更新する」セクションの手順を完了します。
重要: パイプラインは、作成した時と同じ方法で更新します。パイプラインの帯域外の変更を避け、シナリオにのみ該当するセクションの手順を必ず完了してください。例えば、AWS CloudFormation でパイプラインを作成した場合は、「AWS CloudFormation テンプレートを更新する」セクションの手順のみに従います。
解決方法
注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
パイプラインが 2 回実行される原因を確認する
1. CodePipeline コンソールを開きます。
2. [Name] (名前) で、パイプラインの名前を選択します。
3. [View history] (履歴を表示する) を選択します。
4. [Trigger] (トリガー) 列で、CloudWatch Events ルールによってトリガーされたパイプラインの起動またはポーリングによってトリガーされたパイプラインの起動が重複しているかどうかを確認します。
5. 同じ CloudWatch Events ルールによってトリガーされた起動が複数ある場合は、重複するルールを削除または無効にします。
ポーリングによってトリガーされたパイプラインの起動がある場合は、次のトラブルシューティング手順を実行します。
PollForSourceChanges パラメータのデフォルト動作を理解する
以下の点を考慮してください。
- PollForSourceChanges パラメータのデフォルト動作は、パイプラインの作成に使用された方法によって決まります。
- 多くの場合、PollForSourceChanges の値はデフォルトで true に設定されているため、無効にする必要があります。
- CodePipeline コンソールを使用してパイプラインを作成する場合、ソース検出方法は自動的に Amazon CloudWatch Events (ソースの変更を検出するための推奨方法) に設定されます。
- AWS CloudFormation、AWS CLI、または AWS SDK を使用してパイプラインを作成し、変更検出方法を指定しない場合、PollForSourceChanges はデフォルトで true に設定されます (作成方法によって異なります)。
- CodePipeline コンソール以外の方法を使用してパイプラインを作成し、コンソールを使用して帯域外パイプラインを更新すると、CodePipeline は自動的に追加の CloudWatch Events ルールを作成します。
- AWS CloudFormation テンプレートで CloudWatch Events ルールを作成するか、GitHub バージョン 1 リポジトリのウェブフックを作成し、PollForSourceChanges パラメータを設定しない場合、ソースの変更を検出する 2 つの方法があります。これにより、パイプラインが 2 回実行されます。
AWS CloudFormation テンプレートを更新する
AWS CloudFormation テンプレートまたはパイプライン設定ファイルで、PollForSourceChanges パラメータを false に設定します。
注: PollForSourceChanges パラメータは、デフォルトで true に設定されます。
GitHub バージョン 1 ウェブフックの詳細については、「ウェブフックを使用してパイプラインを開始する」をご参照ください。
JSON ファイルを使用してパイプラインを更新する
1. パイプライン構造を JSON ファイルにコピーします。
$ aws codepipeline get-pipeline --name NAME_OF_YOUR_PIPELINE > pipeline.json
2. テキストエディタで pipeline.json ファイルを開き、PollForSourceChanges パラメータをソースアクション設定セクションに追加します。パラメータを false に設定します。
3. 次のメタデータフィールドをファイルから削除します。
"metadata":{}
"created"
"pipelineARN"
"updated"
重要: 次の update-pipeline コマンドで使用できるように、pipeline.json ファイルからメタデータ行を削除する必要があります。
4. pipeline.json ファイルを保存し、次の update-pipeline コマンドを実行してファイルに変更を適用します。
$ aws codepipeline update-pipeline --cli-input-json file://pipeline.json
詳細については、「パイプラインを編集 (AWS CLI)」をご参照ください。
言語の設定構文に基づいてパイプラインを更新する
パイプラインを更新する手順については、ご使用の言語の SDK ドキュメントをご参照ください。
例えば、Python でパイプラインをデプロイした場合、パイプラインの設定セクションで PollForSourceChanges を false に設定できます。