Я написал шаблон CloudFormation, который создает группу AutoScaling, которая, в свою очередь, запускает серверы для каждой среды.
До сегодняшнего дня компания работала в регионе us-west-2, и мэппинг SecurityGroups выглядел так:
"SecurityGroupMap" : {
"DEV" : { "sg" : "sg-d111acbe" },
"Load" : { "sg" : "sg-d111acbe" },
"Staging" : { "sg" : "sg-d123acbe" },
"Prod-US" : { "sg" : "sg-d145acbe" }
},
Теперь у меня появилась новая мотивация, мой босс хочет, чтобы мы могли начать создание этого шаблона CloudFormation в другом регионе.
Поскольку это другой регион, мне нужно будет вручную заранее создать необходимые группы безопасности и обновить их идентификаторы в шаблоне.
Мне было интересно, сработает ли такой способ написания:
"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" }
},
И если да, то как [ { "Fn::FindInMap" : } ]
как будет выглядеть?
Во втором примере вы слишком много вложили в свое отображение. Я предлагаю вам удалить RegionMap
и иметь регионы непосредственно под SecurityGroupMap
. После вы можете ссылаться на одну группу безопасности, используя следующее:
{ "Fn::FindInMap" : [ "SecurityGroupMap", { "Ref" : "AWS::Region" }, "DEV"] }