合并 cloudformation 模板中的两个对象列表
Merge two lists of objects in cloudformation template
我正在尝试编写一个 clouformation 模板以部署到 ECS。为此,我还想为任务定义定义环境变量。然而我面临的问题是环境一部分由映射决定,另一部分由模板参数决定。
这是我目前正在尝试的(为简洁起见减少了模板)。
Parameters:
Version:
AllowedPattern: '^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(((0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(\+([0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*))?$'
Description: The version number
Type: String
ParameterEnvironment:
Description: The environment
Type: String
AllowedValues:
- Beta
- Live
Default: Beta
Mappings:
EnvironmentData:
Beta:
Environment:
- Name: SOME_VARIABLE
Value: some_variable_value
Live:
Environment:
- Name: SOME_VARIABLE
Value: some_variable_value_when_live
Resources:
WebTaskDefinition:
Properties:
ContainerDefinitions:
Environment:
- Name: ENVIRONMENT
Value: !Ref Version
!FindInMap [ EnvironmentData, !Ref ParameterEnvironment, Environment ]
Type: 'AWS::ECS::TaskDefinition'
目标是将 !FindInMap [ EnvironmentData, !Ref ParameterEnvironment, Environment ]
结果与包含版本的单个名称、值对对象“合并”。
然而,这会导致整个模板失败。
我也试过:
Mappings:
EnvironmentData:
Beta:
Environment:
- Name: VERSION
Value: !Ref Version
- Name: SOME_VARIABLE
Value: some_variable_value
Live:
Environment:
- Name: VERSION
Value: !Ref Version
- Name: SOME_VARIABLE
Value: some_variable_value_when_live
但这似乎也失败了,因为我认为不允许在映射中使用 !Ref。
我四处寻找解决方案,但我能找到的只是使用 !Join
然后 !Split
的解决方案,这对我不起作用,因为我有一个对象列表而不是字符串。
你只能通过 macro 来做到这一点。如果您不想开发宏,则必须 re-organize 您的模板和设置,这样您就不必合并任何列表。
我正在尝试编写一个 clouformation 模板以部署到 ECS。为此,我还想为任务定义定义环境变量。然而我面临的问题是环境一部分由映射决定,另一部分由模板参数决定。
这是我目前正在尝试的(为简洁起见减少了模板)。
Parameters:
Version:
AllowedPattern: '^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(((0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(\+([0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*))?$'
Description: The version number
Type: String
ParameterEnvironment:
Description: The environment
Type: String
AllowedValues:
- Beta
- Live
Default: Beta
Mappings:
EnvironmentData:
Beta:
Environment:
- Name: SOME_VARIABLE
Value: some_variable_value
Live:
Environment:
- Name: SOME_VARIABLE
Value: some_variable_value_when_live
Resources:
WebTaskDefinition:
Properties:
ContainerDefinitions:
Environment:
- Name: ENVIRONMENT
Value: !Ref Version
!FindInMap [ EnvironmentData, !Ref ParameterEnvironment, Environment ]
Type: 'AWS::ECS::TaskDefinition'
目标是将 !FindInMap [ EnvironmentData, !Ref ParameterEnvironment, Environment ]
结果与包含版本的单个名称、值对对象“合并”。
然而,这会导致整个模板失败。
我也试过:
Mappings:
EnvironmentData:
Beta:
Environment:
- Name: VERSION
Value: !Ref Version
- Name: SOME_VARIABLE
Value: some_variable_value
Live:
Environment:
- Name: VERSION
Value: !Ref Version
- Name: SOME_VARIABLE
Value: some_variable_value_when_live
但这似乎也失败了,因为我认为不允许在映射中使用 !Ref。
我四处寻找解决方案,但我能找到的只是使用 !Join
然后 !Split
的解决方案,这对我不起作用,因为我有一个对象列表而不是字符串。
你只能通过 macro 来做到这一点。如果您不想开发宏,则必须 re-organize 您的模板和设置,这样您就不必合并任何列表。