以下是我的CloudFormation模板的片段,用于将弹性IP地址与网络接口的主IP相关联:
"MyInterfaceSelfEipAssociation": {
"Properties": {
"AllocationId": "eipalloc-XXXXX",
"NetworkInterfaceId": {
"Ref": "MyInterface"
},
"PrivateIpAddress": {
"Fn::GetAtt": [
"MyInterface",
"PrimaryPrivateIpAddress"
]
}
},
"Type": "AWS::EC2::EIPAssociation"
我想对此接口上的辅助IP做同样的事情,其中有两个(我在列表中给出的特定IP,未由AWS分配)。即" PrivateIpAddresses"界面块看起来像这样:
"PrivateIpAddresses": [
{
"PrivateIpAddress": "10.X.X.XX",
"Primary": "true"
},
{
"PrivateIpAddress": "10.X.X.XX",
"Primary": "false"
},
{
"PrivateIpAddress": "10.X.X.XX",
"Primary": "false"
}
],
我知道我可以使用Fn:GetAtt属性调用访问辅助私有IP列表" SecondaryPrivateIpAddresses"这会将上面的两个辅助私有IP作为列表返回给我。我的问题是,如何通过索引在JSON中解决此列表?
例如,如果我想将私有IP分配给辅助IP列表中的第二个元素,那么执行以下操作是否有效:
"PrivateIpAddress": {
"Fn::GetAtt": [
"Bigip1subnet1Az1Interface",
"SecondaryPrivateIpAddresses[1]"
]
}
我怎样才能做到这一点?我觉得它应该是直截了当的,但我不清楚如何在JSON中这样做。
答案 0 :(得分:2)
使用Fn::Select
内在函数通过索引从对象列表中返回单个对象:
"PrivateIpAddress": {
"Fn::Select": [
1,
{ "Fn::GetAtt": [
"Bigip1subnet1Az1Interface",
"SecondaryPrivateIpAddresses"
]}
]
}