What's?
AWS CodePipelineには、ステージ内に承認アクションを設けることができます。
こちらは本番環境で使うのはよいのですが、開発環境では設けなくてもよいことが多く、これをAWS CloudFormationの条件分岐でコントロールするサンプルが見つからなかったので、メモ的に残しておくことにしました。
解法
AWS CloudFormationテンプレートのConditions
と、擬似パラメーターAWS::NoValue
の組み合わせで実現します。
環境
使用したAWS CLIのバージョンは、こちら。
$ aws --version
aws-cli/2.4.29 Python/3.8.8 Linux/5.4.0-105-generic exe/x86_64.ubuntu.20 prompt/off
例
こんな感じですね。
たとえばParameters
で承認アクションの有無を切り替えるとして
Parameters:
RequireApprovalAction:
Type: String
AllowedValues:
- true
- false
Conditions
を指定。
Conditions:
HasApprovalAction:
!Equals
- !Ref RequireApprovalAction
- true
リソース定義(...
の部分は省略していることを表しています)。
Resources:
...
CodePipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
Name: ...
RoleArn: ...
ArtifactStore:
Type: S3
Location: ...
Stages:
- Name: GetSourceArtifact
Actions:
- Name: SourceAction
...
- Name: ...
# 必要なら承認アクションを配置する
- !If
- HasApprovalAction
- Name: ReleaseApproval
Actions:
- Name: ApprovalAction
ActionTypeId:
Category: Approval
Owner: AWS
Version: 1
Provider: Manual
Configuration:
CustomData: !Sub 'Comments on the manual approval'
RunOrder: 1
- !Ref AWS::NoValue
- Name: ...
...
...
このテンプレートの例だと、RequireApprovalAction
パラメーターがtrue
だと以下の条件分岐がtrue
になり、承認アクションが追加されます。
- !If
- HasApprovalAction
- Name: ReleaseApproval
Actions:
- Name: ApprovalAction
ActionTypeId:
Category: Approval
Owner: AWS
Version: 1
Provider: Manual
Configuration:
CustomData: !Sub 'Comments on the manual approval'
RunOrder: 1
- !Ref AWS::NoValue
AWS CLIでのイメージでは、
aws cloudformation deploy
コマンドに、オプションとして-parameter-overrides RequireApprovalAction=true
を指定する
RequireApprovalActionパラメーターを
falseにすると、
AWS::NoValue`が使われることになり、承認アクションがパイプラインにいなくなります。
aws cloudformation deploy
コマンドに、--parameter-overrides RequireApprovalAction=false
を指定
実際に使う時には、環境別に承認アクションの有無を分けたいという話になりやすいかと思うので、Parameters
ではなくMappings
(とConditions
)との組み合わせで実現することが多いのかな、という気がします。
参考