Условная проверка шаблона AWS CloudFormation
У меня есть шаблон для создания CloudFormation с DynamoDB и DAX для нескольких регионов, например, us-east-1 и ap-southeast-1. Работая для us-east-1, этот шаблон не будет работать для ap-southeast-1, так как DAX еще не доступен для этого региона.
Я ожидал, что это можно сделать с помощью Conditions
, так что для одного региона (us-east-1) у меня будут оба DynamoDB и DAX, а для другого (ap-southeast-1) - только DynamoDB:
Conditions:
isDAXAvailable: !Not [!Equals [ !Ref "AWS::Region", ap-southeast-1 ]]
Resources:
DynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
.....
DaxCluster:
Type: AWS::DAX::Cluster
Condition: isDAXAvailable
Properties:
.....
Но, к сожалению, я получаю сообщение об ошибке:
Произошла ошибка (ValidationError) при вызове операции ValidateTemplate: Ошибка формата шаблона: Нераспознанные типы ресурсов: [AWS::DAX::Cluster]
Можно ли так или иначе настроить такой шаблон или нужно создать отдельный?
2 ответа
Проверка шаблона выполняется в отношении ресурсов, доступных в регионе. Поскольку DAX в настоящее время недоступен в ap-southeast-1, ресурс AWS::DAX::Cluster не пройдет проверку там. У меня есть несколько предложений о том, как сделать эту работу:
- Предварительно обработайте шаблон, чтобы удалить ресурсы DAX в неподдерживаемых регионах
- Разделите ваш шаблон на три отдельных шаблона, которые я назову DAX, NoDAX и другие:
- В регионах, которые поддерживают DAX, создайте стек с шаблоном DAX, который включает ваш кластер, и экспортируйте имя кластера в качестве значения ClusterName.
- В регионах, которые не поддерживают DAX, создайте стек с шаблоном NoDAX и не экспортируйте ни один из них в качестве значения ClusterName. Поскольку каждому шаблону нужен ресурс, включите AWS::CloudFormation::WaitConditionHandle в качестве единственного ресурса этого шаблона.
- Во всех регионах создайте стек с другим шаблоном, который импортирует DaxClusterName и создает условное выражение на основе
Fn:Equals: [“DaxClusterName”, “none”]
, Затем используйте условное выражение, чтобы определить, могут ли ресурсы в этом шаблоне зависеть от кластера.
В настоящее время существует обходной путь добавления преобразования, например к вашему шаблону
Хотя для этого может потребоваться добавить
CAPABILITY_AUTO_EXPAND
возможность, Transform: AWS::Serverless-2016-10-31
"при использовании этого преобразования плата не взимается", и это не должно влиять на ваш шаблон, если у вас нет ресурсов, и вы уже должны использовать это преобразование, если у вас естьAWS::Serverless
Ресурсы