Amazon web services 在aws cloudformation模板中的If条件中使用importValue
我试图找到一种在If函数中使用ImportValue的方法,但找不到正确的语法。感谢您的帮助 下面是我正在尝试的代码:Amazon web services 在aws cloudformation模板中的If条件中使用importValue,amazon-web-services,yaml,amazon-cloudformation,Amazon Web Services,Yaml,Amazon Cloudformation,我试图找到一种在If函数中使用ImportValue的方法,但找不到正确的语法。感谢您的帮助 下面是我正在尝试的代码: SomeTaskdefinition: Type: AWS::ECS::TaskDefinition Properties: Family: 'FamilyName' ContainerDefinitions: - Name: ContainerName Image: 'imagename:net/v2/ Environm
SomeTaskdefinition:
Type: AWS::ECS::TaskDefinition
Properties:
Family: 'FamilyName'
ContainerDefinitions:
- Name: ContainerName
Image: 'imagename:net/v2/
Environment:
- Name: ENV_VARIABLE_1
Value:
Fn::If:
Fn::Equals:
Fn::ImportValue:
!Sub "${ImportStackname}-ECSCluster"
''
'notpresent'
'present'
我认为这是不可能的。不能在
Equals
函数中使用ImportValue
。另一种解决方法是使用嵌套模板:
- 将参数添加到子模板
- 在父模板中,使用导入填充参数
- 在子模板中,您可以做任何您想做的事情,包括在
部分中使用它条件
# in Parent
Resources:
ChildStack:
Type: 'AWS::CloudFormation::Stack'
Properties:
Parameters:
Stackname: {'Fn::ImportValue': !Sub "${ImportStackname}-ECSCluster"}
TemplateURL: './child.yaml'
# in Child
Parameters:
Stackname:
Type: String
Default: ''
Conditions:
HasStack: !Not [!Equals [!Ref Stackname, '']]
Resources:
SomeTaskdefinition:
Type: AWS::ECS::TaskDefinition
Properties:
Family: 'FamilyName'
ContainerDefinitions:
- Name: ContainerName
Image: 'imagename:net/v2/
Environment:
- Name: ENV_VARIABLE_1
Value: !If [HasStack, 'present', 'notpresent']
我在这里遇到了类似的问题。。我的想法是可以指定
DatabaseHost
作为参数,如果保留为空,则值应该取自DatabaseStack
export。这是我的示例代码-它使用!导入值内部!If
功能。您将得到这个想法(而不是只构造值-构造全名值列表对象)
我不确定Equals函数,但我绝对不能在“条件”部分使用它。目前唯一的解决办法是lambda。4年后仍然如此。谢谢!我的解决方案很有效,看起来很不错
Conditions:
DatabaseHostPresent: !Not [ !Equals [ !Ref DatabaseHost, ""]]
Resources:
...
ContainerDefinitions:
- Name: !Sub ${ApplicationName}-web-${EnvironmentName}
Environment:
- !If
- DatabaseHostPresent
- Name: DB_HOST
Value: !Ref DatabaseHost
- Name: DB_HOST
Value: !ImportValue
Fn::Sub: ${DatabaseStack}-EndpointAddress