コードパイプラインを作成する次のクラウド形成テンプレートがあります。パイプラインには3つの段階があります。
Stages:
-
Name: "Source"
Actions:
-
Name: "Source"
ActionTypeId:
Category: "Source"
Owner: "ThirdParty"
Version: "1"
Provider: "GitHub"
OutputArtifacts:
- Name: "MyApp"
Configuration:
Owner: !Ref GithubOwner
Repo: !Ref GithubRepo
PollForSourceChanges: "true"
Branch: !Ref GithubBranch
OAuthToken: !Ref GithubTokenParameter
RunOrder: 1
-
Name: "Run-Unit-Tests"
Actions:
-
InputArtifacts:
- Name: "MyApp"
Name: "UnitTests"
ActionTypeId:
Category: "Test"
Owner: "AWS"
Version: "1"
Provider: "CodeBuild"
OutputArtifacts:
- Name: "MyTests"
Configuration:
ProjectName: !Ref CodeBuildName
RunOrder: 1
-
Name: "Deploy-Staging"
Actions:
-
InputArtifacts:
- Name: "MyApp"
Name: "Deploy-Staging"
ActionTypeId:
Category: "Deploy"
Owner: "AWS"
Version: "1"
Provider: "ElasticBeanstalk"
Configuration:
ApplicationName: !Ref BeanstalkApplicationName
EnvironmentName: !Ref BeanstalkEnvironmentStaging
RunOrder: 1
私にも条件があります:
IncludeStagingEnv: !Equals [Staging, !Ref CodePipelineEnvironment]
条件がfalseの場合、コードパイプラインステージリストの3番目の項目を省略したいと思います。
AWS :: NoValueで!Ifを使用してみましたが、NoValueは有効なリストアイテムではありません:
Stages:
- !IF
- IncludeStagingEnv
- Name: "Deploy-Staging"
Actions:
-
InputArtifacts:
- Name: "MyApp"
Name: "Deploy-Staging"
ActionTypeId:
Category: "Deploy"
Owner: "AWS"
Version: "1"
Provider: "ElasticBeanstalk"
Configuration:
ApplicationName: !Ref BeanstalkApplicationName
EnvironmentName: !Ref BeanstalkEnvironmentStaging
RunOrder: 1
- AWS::NoValue
IncludeStagingEnv==false
のときに最後の項目を省略するにはどうすればよいですか?
Cloudfrontディストリビューションのテンプレートでも同じ問題が発生します。
解決策は、AWS::NoValue
withRef
属性を使用することでした。
...
LambdaFunctionAssociations:
Fn::If:
- Authentication
- - EventType: "viewer-request"
LambdaFunctionARN: "arn:aws:lambda:us-east-1:..."
- - Ref: "AWS::NoValue"
...
これがすべてのリソースで同じように機能する場合は、条件付き部分を次のように変更する必要があります。
Stages:
- !IF
- IncludeStagingEnv
- - Name: "Deploy-Staging"
Actions:
- InputArtifacts:
...
- - Ref: "AWS::NoValue"
お役に立てれば!
@ Fabi755の答えは私を正しい道に導いてくれてありがとう!
私は同じLambdaFunctionAssociations
チャレンジで戦っていました。私は次のように少し異なる、少し良いアプローチに落ち着きました。複数のオプションのリスト項目で機能するという点で優れていると思います。
LambdaFunctionAssociations:
- !If
- HasOriginResponseFunctionArn
- EventType: Origin-response
LambdaFunctionARN: !Ref OriginResponseFunctionArn
- !Ref AWS::NoValue
- !If
- HasViewerRequestFunctionArn
- EventType: viewer-request
LambdaFunctionARN: !Ref ViewerRequestFunctionArn
- !Ref AWS::NoValue