AWS CFT Fn :: Sub против массива - PullRequest
0 голосов
/ 16 марта 2020

В духе DRY я обновляю устаревший сценарий S3 + CFT JSON, который управляет политиками S3 в различных средах (Dev, QA и Prod). Первоначальный автор кода продублировал каждую группу ролей для каждой среды ...

(грубый ввод кода)

{
   "Parameters" : {
      "Mappings" : {
         "dev" : {
            "us-east-1" : {
               "userRole0" : "aws:1234:role/user0",
               "userRole1" : "aws:1234:role/user1",
               "userRole2" : "aws:1234:role/user2"
            }
         }
         "qa" : {
            "us-east-1" : {
               "userRole0" : "aws:5678:role/user0",
               "userRole1" : "aws:5678:role/user1",
               "userRole2" : "aws:5678:role/user2"
            }
         }
         "prod" : {
            "us-east-1" : {
               "userRole0" : "aws:9012:role/user0",
               "userRole1" : "aws:9012:role/user1",
               "userRole2" : "aws:9012:role/user2"
            }
         }
      }
   }
}

...

{ "Fn:FindInMap: [ {"Ref" : "ENV"}, {"Ref : "AWS::Region"}, "userRole0" ] },
{ "Fn:FindInMap: [ {"Ref" : "ENV"}, {"Ref : "AWS::Region"}, "userRole1" ] },
{ "Fn:FindInMap: [ {"Ref" : "ENV"}, {"Ref : "AWS::Region"}, "userRole2" ] }

В духе неповторяющихся вещей это мучило меня, пока я обновляю данные. И у меня проблемы с поиском каких-либо инструментов тестирования для функций Intrinsi c ...

Q. Можно ли использовать Fn::Sub для массива строк в сопоставлениях?

{
   "Parameters" : {
      "Mappings" : {
         "roles" : [
            "aws:${id}:role/user0",
            "aws:${id}:role/user1",
            "aws:${id}:role/user2"
         ],
         "envID" : {
            "dev" : "1234",
            "qa"  : "5678",
            "prod": "9012"
         }
      }
   }
}

...

{ "Fn::Sub" : [ "Fn:FindInMap" : ["roles"], { "id", "Fn:FindInMap" : ["endID", {"Ref" : "ENV"}] }] 
...