В духе 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"}] }]