Tim*_* W. 12 aws-cloudformation aws-codepipeline
我有以下云形成模板,用于创建代码管道.管道有三个阶段:
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
Run Code Online (Sandbox Code Playgroud)
我也有一个条件:
IncludeStagingEnv: !Equals [Staging, !Ref CodePipelineEnvironment]
Run Code Online (Sandbox Code Playgroud)
当条件为假时,我想省略Code Pipeline阶段列表中的第3项.
我尝试使用!如果使用AWS :: NoValue,但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
Run Code Online (Sandbox Code Playgroud)
如何省略最后一项IncludeStagingEnv==false?
Fab*_*755 14
Cloudfront发行版的模板上发生了相同的问题。
该解决方案是使用AWS::NoValue 具有的Ref属性。
...
LambdaFunctionAssociations:
Fn::If:
- Authentication
- - EventType: "viewer-request"
LambdaFunctionARN: "arn:aws:lambda:us-east-1:..."
- - Ref: "AWS::NoValue"
...
Run Code Online (Sandbox Code Playgroud)
如果这对于所有资源来说都是一样的,则应将条件部分更改为:
Stages:
- !IF
- IncludeStagingEnv
- - Name: "Deploy-Staging"
Actions:
- InputArtifacts:
...
- - Ref: "AWS::NoValue"
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
Aar*_*ron 14
@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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2954 次 |
| 最近记录: |