Kos*_*ris 5 aws-cloudformation
我想在云形成模板中创建安全组的入站规则.我想从许多不同的IP打开3306端口.
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"CidrIp": "0.0.0.0/0",
"FromPort": "3306",
"ToPort": "3306"
}
Run Code Online (Sandbox Code Playgroud)
我知道文档说String是CidrIp类型但是可以做这样的事情["100.10.77.66/32", "100.10.66.66/32" , "101.10.77.66/32"]以避免多次写同一个块吗?
不幸的是,没有可通过CloudFormation的迭代内部函数,并且正如你所指出的AWS::EC2::SecurityGroupIngress资源本身只接受一个String为它的CidrIp性能.
作为替代方案,我建议选择一种中间格式,使用预处理器编译为CloudFormation模板JSON,如果/需要更强的表现力.您可以使用像对流层这样的全功能库,但它也很容易编写您自己的基本预处理层,以适应您的用例和编程语言/库首选项.
我目前的选择是YAML与嵌入式Ruby(ERB)的结合,主要是因为我已经熟悉它们.这是一个示例template.yml.erb文件,它将生成上面的示例JSON:
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 -%>
Run Code Online (Sandbox Code Playgroud)
这是一个最小的预处理器脚本,process_template.rb:
require 'erb'
require 'yaml'
require 'json'
puts JSON.pretty_generate(YAML.load(ERB.new(ARGF.read, nil, '-').result))
Run Code Online (Sandbox Code Playgroud)
跑步ruby ./process_template.rb 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
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5854 次 |
| 最近记录: |