LoginSignup
1
0

More than 1 year has passed since last update.

CodePipeline上のアクション有無をCloudFormationパラメータの値によって変更

Last updated at Posted at 2021-09-17

やりたいこと(今回の具体例)

CloudFormationで構築しているCodePipelineワークフローがあります。
このワークフローのデプロイステージは「ChangeSet生成」と「ChangeSet実行」アクションを実行をしています。

これに対して「EnableManualApproval」という名前のパラメータがTrueのときだけ「手動承認(Approval)」アクションを挟みたいです。

EnableManualApprovalにFalseを指定したとき

CodePipeline_-_AWS_Developer_Tools.png

EnableManualApprovalにTrueを指定したとき

CodePipeline_-_AWS_Developer_Tools.png

やりかた

CodePipeline上のアクションのアクションは「リソース」ではなく「AWS::CodePipeline::Pipeline」というリソースのプロパティ階層の中で定義するので、Conditionkによって生成有無を分けることはできません。このために別々のPipeline定義を書くのはメンテナンスがしんどすぎます。

ググるとStack Overflowに求めていた回答がありました。

IF関数 を使い、条件一致する場合は「手動承認アクションの定義」を返し、条件一致しない場合おいうはAWS::NoValueを返せば実現できそうです。

以下のように書けばいい。

- !If 
  -   条件
  -   手動承認アクション定義
  -   AWS::NoValue

「AWS::NoValue」使っている人からすれば「そらそうやで」という話ですが、初めて使いました :relaxed:

今回の対応差分

パイプラインでデプロイ前の手動承認の有無を指定するパラメータ_EnableManualApproval_を追加

  • ① EnableManualApprovalパラメータの定義
  • ② IFで使いたいので EnableManualApprovalConditionsを定義
  • ③ EnableManualApprovalConditionsが成立するときに Approvalアクションの定義を返す様に記載

意図した通りCloudFormationのパラメータ「EnableManualApproval」に「True」を指定した場合のみApprovalが挟まるようになりました。

蛇足: Approvalの通知について

パイプラインの進行状況はAWS ChatbotでSlackに流しているのでこの設定だけでもApprovalに気付けるのですが、表示が地味なのでお知らせ用のSNSを紐付けようかなと思います。

Slack

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0