は残念ながら、CloudFormationのIntrinsic Functionsを通じて利用可能な反復はありません、とあなたはAWS::EC2::SecurityGroupIngress
リソース自体を指摘したようにのみ、そのCidrIp
プロパティのための単一のString
を受け入れます。
代わりに、表現力の強化が必要な場合に、プリプロセッサを使用してCloudFormationテンプレートJSONをコンパイルするための中間形式を選択することをお勧めします。 troposphereのようなフル機能のライブラリを使用することもできますが、ユースケースやプログラミング言語/ライブラリの設定に合わせて独自の基本的な前処理レイヤーをコード化するだけでも簡単です。
私の現在の選択肢は、YAMLと組み込みのRuby(ERB)の組み合わせです。これは主に私がすでによく知っているからです。
SecurityGroupIngress:
<% ["100.10.77.66/32", "100.10.66.66/32" , "101.10.77.66/32"].each do |cidr| -%>
- IpProtocol: tcp
CidrIp: <%=cidr%>
FromPort: 3306
ToPort: 3306
<% end -%>
ここでは、最小限のプリプロセッサスクリプトだ、process_template.rb
:ruby ./process_template.rb template.yml.erb
を実行
require 'erb'
require 'yaml'
require 'json'
puts JSON.pretty_generate(YAML.load(ERB.new(ARGF.read, nil, '-').result))
生成します。ここでは、上記の例のJSONを生成する例template.yml.erb
ファイルです
{
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"CidrIp": "100.10.77.66/32",
"FromPort": 3306,
"ToPort": 3306
},
{
"IpProtocol": "tcp",
"CidrIp": "100.10.66.66/32",
"FromPort": 3306,
"ToPort": 3306
},
{
"IpProtocol": "tcp",
"CidrIp": "101.10.77.66/32",
"FromPort": 3306,
"ToPort": 3306
}
]
}