share facebook facebook facebook twitter twitter menu hatena pocket slack

2021.09.21 TUE

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

高橋 修一

WRITTEN BY 高橋 修一

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

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

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

EnableManualApprovalにFalseを指定したとき

EnableManualApprovalにTrueを指定したとき

やりかた

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

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

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

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

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

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

今回の対応差分

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

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

蛇足: Approvalの通知について

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

元記事はこちら

https://qiita.com/cof123/items/4527a878170612f43083


アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。

AWS 運用・保守サービスページ:
https://cloudpack.jp/service/aws/maintenance.html

その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://cloudpack.jp/contact/form/

高橋 修一

高橋 修一

社内サービスの開発を主にやっています。大阪オフィス所属。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。