#amazon-web-services #amazon-cloudformation
Вопрос:
Как я могу создать и использовать трехуровневую карту в разделе сопоставления в шаблоне CloudFormation?
Fn::FindInMap
может использоваться только для двухуровневой карты. Ссылка: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-findinmap.html
Хотите определить тип ресурса на основе имени ячейки, домена и области. Что-то вроде:
Mappings:
ElastiCacheNodeTypeMapping:
cell1:
beta:
us-east-1: cache.m6g.large
us-west-2: cache.m6g.large
eu-west-1: cache.m6g.2xlarge
prod:
us-east-1: cache.r6g.24xlarge
cell2:
beta:
us-east-1: cache.m6g.large
us-west-2: cache.m6g.large
eu-west-1: cache.m6g.large
prod:
us-east-1: cache.r6g.24xlarge
Ответ №1:
Как я могу создать и использовать трехуровневую карту
К сожалению, вы не можете. Это не поддерживается, как вы уже заметили. Единственный способ обойти это может быть, возможно, с помощью макроса CloudFormation. Вам нужно будет создать такой макрос, который возьмет вашу трехуровневую карту и реорганизует ее в допустимую двухуровневую карту для развертывания стека.
Комментарии:
1. В моем случае атрибуты Имя ячейки, домен и область будут переданы в качестве параметров. Даже если я смогу создать двухуровневую карту, создание составного ключа будет непростым делом. Это потому, что я не могу использовать
Fn::Join
илиFn::Sub
Fn::FindInMap
использовать . 🙁 Ссылка: docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…2. @RohitLakhotia Это не имеет значения. у вас не может быть карт 3-го уровня.
3. @RohitLakhotia CFN-не самый удобный инструмент. Ему не хватает многих вещей, которые есть у других инструментов IaC (например, Terraform). Как я уже писал, вы могли бы создать для этого макрос или перепроектировать свою архитектуру так, чтобы эти 3-уровневые карты не требовались. Также можно использовать пользовательский ресурс CFN.
4. @RohitLakhotia Вы также можете ознакомиться с инструментами CDK для создания или развертывания стеков CFN. CDK обладает гораздо большей гибкостью.