TerraformでCodePipeline作成時のオプション、PollForSourceChangesの注意点を深堀り。
本件については以下の過去記事にも書いたけれども、改めて判明したことがあり。PollForSourceChanges = “false” or “true"により、トリガーとなるEventBridgeルール(以降EBルール)がAWSマネージドにより自動作成されるか否かという問題なのだが。
TerraformでCodePipeline - PollForSourceChangesの注意
マネージド側でEBルールが自動生成されるかどうかは、状況により異なる。
(1) 初回apply時でflase -> EBルールが自動生成される
(2) (1)の後に、新規パイプライン追加時 -> 新規追加リソースに対するEBルールは自動生成されない
(3) 元はtrueだったのをfalseに変更 -> EBルールは自動生成されない
検証結果だとこうなったが仕様としてどうなのかはっきりさせたくてサポートに聞いてみたが、明確な回答は得られなかった。つまりやってる側も知らん、と。
マネコンからパイプライン作るケースとCLIでも挙動が異なる、というのは教えてもらったが。CLIとTerraformが利用するAPIでは若干異なるかもしれない。
ちなみに(1)で自動生成された場合、関連するIAMリソースも同時に自動生成される。EBルールを実行用のIAMロールとそのポリシーだ。(EBルールに対して1:1:1で都度作成される)
東京リージョンの場合
IAMロール名規則:cwe-role-ap-northeast-1-[パイプライン名]
IAMポリシー名規則:start-pipeline-execution-ap-northeast-1-[パイプライン名]
(1)のケースでは、「EBルール + IAMロール + IAMポリシー」のセットが自動生成されるが、独自にEBルールを作成してこれをトリガーとしたい場合これらのリソースは完全に不要のため、手動で削除する。
ちなみに独自EBルールの場合、これに紐づくIAMロール/ポリシーはパイプライン毎に用意する必要はなく、ひとつでいい。(対応リソースは*で指定)
まったくもって重箱の隅的小ネタではあるが、Terraformで環境構築 & 運用していくには、いろんなことを考慮しないといけないな、と改めてしみじみするなど。
追記(2024年5月)
PollForSourceChangesパラメータは公式ドキュメントに記載がなく、設定してもエラーになるという記事を見つけた。代わりにDetectChangesで期待値になったと。
TerraformでCodepipelineの検出オプションを変更する
確かに現時点でTerraform公式にPollForSourceChangesの記載がないんだけどDetectChangesも記載がない。
Resource: aws_codepipeline
当該パラメータはconfiguration内で定義する。
configuration - (Optional) A map of the action declaration’s configuration. Configurations options for action types and providers can be found in the Pipeline Structure Reference and Action Structure Reference documentation.
先の記事にある通り、以下のリファレンスにはPollForSourceChangesの記載あり。DetectChangesの記載なし。
CodePipeline pipeline structure reference
Terraform公式とAWS間でパラメータがアンマッチなのかもしれない。ま、もういいや。