DependsOn 与 cloudforamtion yml 模板中的 if else 语句

Posted

技术标签:

【中文标题】DependsOn 与 cloudforamtion yml 模板中的 if else 语句【英文标题】:DependsOn with if else statement in cloudforamtion yml template 【发布时间】:2020-12-25 20:20:18 【问题描述】:

嗨,我有 2 个 AWS::ElasticLoadBalancingV2::Listener 名称 Listener1Listener2。我有一个条件是部署listner1listner1 我创建了一个我希望依赖于 Listener 的 ecs 服务。

Service:
    Type: AWS::ECS::Service
    DependsOn: !If [Condition, Listener1, Listener2]
    Properties:

部署时它给我错误Template format error: DependsOn must be a string or list of strings.

【问题讨论】:

【参考方案1】:

很遗憾,您不能执行以下操作:

 DependsOn: !If [Condition, Listener1, Listener2]

正如错误消息所说,DependsOn 只接受一个字符串值或字符串列表,而不是一个函数,例如:

DependsOn: [SomeExistingResource1, SomeExistingResource2]

另外Fn::If 只能用于元数据属性、更新策略属性和属性值。来自docs:

目前,AWS CloudFormation 在模板的资源部分和输出部分的元数据属性、更新策略属性和属性值中支持 Fn::If 内在函数。

因此您不能在DependsOn 中使用Fn::If

【讨论】:

在没有部署listener1的情况下会不会报错?因为将根据条件部署listner1或listener2。 @SudarshanRampuria 是的,它会出错。我会更改答案以免混淆。这只是一个例子。您需要重新设计您的模板,因为您无法在 CFN 中执行此类条件。

以上是关于DependsOn 与 cloudforamtion yml 模板中的 if else 语句的主要内容,如果未能解决你的问题,请参考以下文章

同一包中的 @Around @Aspect 仅适用于 @DependsOn

为啥 Spring 忽略了我的 @DependsOn 注释?

CloudFormation,在 DependsOn 上应用条件

Autoscale ProvisionedConcurrentExecutions AWS Lambda DependsOn 值 null

简单介绍@PostConstruct@PreDestroy@DependsOn@Order等注解的作用及嵌套使用时优先级问题

SBT dependsOn RootProject:不编译依赖项