问题描述
如何拆分字符串并使用属性值?
例如,假设我有以下字符串:SomeRule1,SomeRule2
。
我想用这个字符串来填充 AWS::WAFv2::WebACL ManagedRuleGroupStatement
的 exludedRules
属性。 excludedRules
是包含单个 Name
属性的 ExcludedRule
对象列表。如何将拆分后的字符串值用于 Name
属性?
解决方法
遗憾的是,您不能通过使用简单的 CloudFormation 自动执行此操作,只需使用 SomeRule1,SomeRule2
,因为 ExcludedRule 不是一个简单的字符串列表。它是对象列表,形式为:
ExcludedRules:
- Name: SomeRule1
- Name: SomeRule2
生成这样一个对象列表需要一些CloudFormation不支持的循环机制。您必须一一明确列出所有这些规则。
但如果您真的必须自动化这样的过程,您可以开发一个CloudFormation macro,让您能够循环和构建这样的结构。 Custom resources 也可用于自动执行此类操作。
宏和自定义资源都需要您开发一个特殊的 lambda 函数,该函数将根据您的 SomeRule1,SomeRule2
执行循环并构造有效的 ExcludedRules
。 >
同意其他答案,不能动态添加规则,因为它不是简单的字符串列表。但如果我们知道确切的规则。我们可以使用拆分和选择。
让我们使用这个参数:
Parameters:
Rules:
Type: String
Description: "list of rules seperate by comma"
Default: "my-rule-1,my-rule-2"
我们可以这样使用它:
ExcludedRules:
- Name: !Select
- 0
- !Split [",",!Ref Rules]
- Name: !Select
- 1
- !Split [",!Ref Rules]