我正在尝试找到一种在If函数中使用ImportValue的方法,但是找不到合适的语法。任何帮助表示赞赏。
在我正在尝试的代码下面:
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'
答案 0 :(得分:2)
我在这里遇到了类似的问题..我的想法是能够指定 DatabaseHost
作为参数,如果留空 - 值应该从 DatabaseStack
导出。这是我的示例代码 - 它在 !ImportValue
函数中使用 !If
。你会得到这个想法(而不是只构造 Value - 构造整个 Name Value 列表对象)
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
答案 1 :(得分:0)
我认为这是不可能的。您不能在ImportValue
函数内使用Equals
。
答案 2 :(得分:0)
解决此问题的另一种方法是使用嵌套模板:
Conditions
部分中使用它未经测试的示例:
# 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']