eu mudaria a estrutura para:
"PrivateIpAddress": {
"Fn::If": [ "RequestedPrivateIP",
{ "Ref": "PrivateIP" },
{"Ref" : "AWS::NoValue" }
]
}
o AWS :: NoValue está lá para lhe dar a opção else para sua declaração if. link
Temos um modelo do AWS CloudFormation para criar algumas instâncias do EC2. No entanto, alguns deles exigem um PrivateIpAddress
específico e estou com dificuldades para descobrir como incorporar isso ao modelo.
Por enquanto, tenho um parâmetro de modelo PrivateIP
e uma condição de criação RequestedPrivateIP
. Por enquanto, tudo bem. No entanto, não consigo descobrir como incorporá-lo à especificação de recurso AWS::EC2::Instance
. Eu tentei isso:
"PrivateIpAddress": {
"Fn::If": [ "RequestedPrivateIP",
{ "Ref": "PrivateIP" },
"" <-- This doesn't work
]
},
Mas isso falha quando RequestedPrivateIP
é falso com
CREATE_FAILED AWS::EC2::Instance NodeInstance Invalid addresses: []
Alguma ideia de como, opcionalmente, atribuir um IP privado estático e, se não especificado, deixá-lo para a AWS definir um dinâmico?
eu mudaria a estrutura para:
"PrivateIpAddress": {
"Fn::If": [ "RequestedPrivateIP",
{ "Ref": "PrivateIP" },
{"Ref" : "AWS::NoValue" }
]
}
o AWS :: NoValue está lá para lhe dar a opção else para sua declaração if. link
Como parece que a propriedade PrivateIpAddress
não suporta uma string vazia como valor, sugiro criar dois recursos separados do seu AWS::EC2::Instance
. Um deles terá sua condição RequestedPrivateIP
, enquanto o outro deverá ter a mesma condição, mas negado, por ex. DidNotRequestPrivateIP
.
"InstanceWithPrivateIp": {
"Type": "AWS::EC2::Instance",
"Condition": "RequestedPrivateIP",
"Properties": {
[...]
}
},
"InstanceWithoutPrivateIp": {
"Type": "AWS::EC2::Instance",
"Condition": "DidNotRequestPrivateIP",
"Properties": {
[...]
}
}