Eu escrevi um modelo CloudFormation que cria um AutoScaling Group que, por sua vez, inicia servidores por ambiente.
Até hoje a empresa trabalha na região us-west-2 e o mapeamento de SecurityGroups ficou assim:
"SecurityGroupMap" : {
"DEV" : { "sg" : "sg-d111acbe" },
"Load" : { "sg" : "sg-d111acbe" },
"Staging" : { "sg" : "sg-d123acbe" },
"Prod-US" : { "sg" : "sg-d145acbe" }
},
Agora há uma nova motivação, meu chefe quer que possamos começar a construir esse modelo do CloudFormation em outra região.
Como é outra região, precisarei criar manualmente os SecurityGroups necessários e atualizar seu ID no modelo.
Eu queria saber se esse método de escrita funcionaria:
"SecurityGroupMap" : {
"RegionMap": {
"us-east-1" : { "DEV" : "sg-1", "Load" : "sg-2", "Staging" : "sg-3", "Prod-US" : "sg-4" },
"us-east-2" : { "DEV" : "sg-1", "Load" : "sg-2", "Staging" : "sg-3", "Prod-US" : "sg-4" },
"us-west-1" : { "DEV" : "sg-1", "Load" : "sg-2", "Staging" : "sg-3", "Prod-US" : "sg-4" },
"us-west-2" : { "DEV" : "sg-d143acbe", "Load" : "sg-d143acbe", "Staging" : "sg-d143acbe", "Prod-US" : "sg-d143acbe" },
"eu-west-1" : { "DEV" : "sg-1", "Load" : "sg-2", "Staging" : "sg-3", "Prod-US" : "sg-4" },
"eu-central-1" : { "DEV" : "sg-1", "Load" : "sg-2", "Staging" : "sg-3", "Prod-US" : "sg-4" },
"eu-west-2" : { "DEV" : "sg-1", "Load" : "sg-2", "Staging" : "sg-3", "Prod-US" : "sg-4" }
},
E se sim, como seria o [ { "Fn::FindInMap" : } ]
testamento?
Em seu segundo exemplo, você aninhado demais seu mapeamento. Eu sugiro que você remova
RegionMap
e tenha as regiões diretamente sobSecurityGroupMap
. Depois, você pode fazer referência a um grupo de segurança usando o seguinte:{ "Fn::FindInMap" : [ "SecurityGroupMap", { "Ref" : "AWS::Region" }, "DEV"] }