Поиск по сайту:

Кодифицируйте свою инфраструктуру AWS с помощью CloudFormation


CloudFormation — это инструмент для автоматизации создания, обновления и управления всем вашим стеком ресурсов. Он предоставляет способ превратить вашу инфраструктуру в код в виде файла YAML, который может управляться версиями вместе с вашим программным обеспечением.

Что такое CloudFormation?

Концепция CloudFormation довольно проста — создание ресурсов вручную может быть болезненным, и хотя это можно автоматизировать с помощью запросов CLI или API, если вам нужно будет обновить свой стек в будущем, это все равно будет в основном ручной процесс. Вместо того, чтобы возиться с этим, CloudFormation предлагает способ моделирования структуры и конфигурации всех ваших ресурсов.

Это делается с помощью шаблона YAML или JSON, который содержит всю необходимую информацию для вашего стека продуктов, включая ресурсы, которые необходимо создать, параметры и конфигурацию для этих ресурсов, а также результаты, которые они возвращают. Версии этого файла можно контролировать через Git и даже использовать для создания конвейера непрерывного развертывания, который будет автоматически отправлять изменения.

Однако вам не нужно создавать шаблон YAML вручную. Гораздо проще использовать веб-дизайнер CloudFormation, который визуально отображает весь стек вашего продукта. Например, вот один из примеров шаблонов для автомасштабируемого развертывания WordPress с балансировкой нагрузки, использующего экземпляр RDS в качестве базы данных.

Вы можете перетаскивать новые компоненты из предоставленного каталога и связывать компоненты вместе. Обновления визуального шаблона будут обновлять базовый шаблон YAML. Если щелкнуть любой ресурс в этом шаблоне, он автоматически прокрутится до записи в списке ресурсов YAML. Очень кстати.

После развертывания этого шаблона все связанные с ним ресурсы будут созданы в вашей учетной записи. Когда стек нуждается в обновлении, существующие ресурсы будут обновлены с новой конфигурацией, старые ресурсы будут удалены, если они больше не используются, а новые ресурсы будут развернуты при добавлении.

CloudFormation также будет обрабатывать создание зависимостей в правильном порядке, и вам не придется думать об этом самостоятельно. Например, если вы хотите создать экземпляр EC2 с группой безопасности, CloudFormation обязательно сначала создаст группу безопасности, а затем создаст экземпляр с этой группой безопасности. Все, что вам нужно сделать, это связать их вместе в консоли.

Основным недостатком CloudFormation является то, что если вы выполняете фиксацию инфраструктуры как кода, вам придется полностью фиксировать — внесение ручных изменений в конфигурацию ресурсов за пределами CloudFormation небезопасно, так как обновления CloudFormation могут перезаписать ваши ручные изменения для принудительного применения. что у вас есть в вашем шаблоне. Например, если вы развернули эластичный IP-адрес и хотите указать его на другой экземпляр, вам придется сделать это из консоли CloudFormation, а не из консоли управления EC2. Технически ручные изменения будут сохраняться, по крайней мере, до следующего обновления CloudFormation, и если конфигурация шаблона не изменится за это время, CloudFormation не будет применять схему в шаблоне. Поэтому, хотя в краткосрочной перспективе вам может сойти с рук внесение изменений вручную, это не рекомендуется и совершенно эфемерно.

Использование онлайн-редактора

Перейдите в консоль CloudFormation, нажмите «Создать стек» и выберите «С новыми ресурсами».

Откроется диалоговое окно, в котором вы выберете свой шаблон CloudFormation. Вы можете импортировать существующий шаблон из S3, но если вы только начинаете, мы предлагаем попробовать один из примеров шаблонов. Мы выберем простой шаблон «LAMP Stack», который развертывает один веб-сервер. Нажмите «Просмотреть в дизайнере», чтобы открыть шаблон.

Этот шаблон довольно простой. Просто экземпляр EC2 и группа безопасности для этого экземпляра.

Если вы хотите добавить что-то новое в шаблон, проще всего найти ресурс на боковой панели и перетащить его. Например, если вы хотите добавить эластичный IP-адрес для связи с этим новым экземпляром, загляните в раздел «EC2 », чтобы найти «EIP», и перетащите его в:

По умолчанию он ни к чему не подключен. Вам нужно будет прикрепить его к экземпляру EC2, чтобы иметь какой-либо эффект. Фиолетовые точки — это свойства. Вы можете перетаскивать из этих свойств, чтобы сформировать ссылки на другие ресурсы. Чтобы связать эластичный IP-адрес, перетащите верхний угол «EIPAssociation» на экземпляр. Совместимые ресурсы будут выделены зеленым цветом при перетаскивании.

Если вы нажмете на ресурс, вы попадете на запись в шаблоне YAML. Изменения в этом шаблоне будут переданы дизайнеру, хотя вам, возможно, придется нажать кнопку обновления в правом верхнем углу.

YAML-форматирование

В целом, шаблон YAML будет иметь несколько отдельных разделов:

Метаданные, в основном используемые CloudFormation Designer для визуального отслеживания того, где находятся объекты, но также могут использоваться для общих метаданных.

Параметры, аргументы, которые передаются в консоль CloudFormation и могут быть переданы в шаблон во время выполнения. Например, шаблон по умолчанию включает несколько параметров для указания имени базы данных MySQL, имени пользователя и пароля, например:

DBName:
    Default: MyDatabase
    Description: MySQL database name
    Type: String
    MinLength: '1'
    MaxLength: '64'
    AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
    ConstraintDescription: must begin with a letter and contain only alphanumeric characters.

Mappings, это немного сложно, но в основном они похожи на операторы case . Вы можете использовать их для изменения значений параметров в зависимости от ключа. Например, AWS использует это для изменения идентификатора AMI в зависимости от региона, в котором развертывается шаблон. Вы можете использовать встроенную функцию Fn::FindInMap для поиска этих значений в другом месте шаблона. Вы можете прочитать больше об этом в документации AWS.

Mappings: 
  RegionMap: 
    us-east-1: 
      "HVM64": "ami-0ff8a91507f77f867"
    us-west-1: 
      "HVM64": "ami-0bdb828fd58c52235"
    eu-west-1: 
      "HVM64": "ami-047bb4163c506cd98"
    ap-southeast-1: 
      "HVM64": "ami-08569b978cc4dfa10"
    ap-northeast-1: 
      "HVM64": "ami-06cd52961ce9f0d85"

Условия, которые позволяют CloudFormation развертывать ресурсы только при соблюдении условий. Например, вы можете использовать это для развертывания определенных ресурсов в производственных, тестовых и промежуточных средах, но не в средах разработки.

Conditions: 
  CreateProdResources: !Equals [ !Ref EnvType, prod ]

Преобразования, которые позволяют выполнять индивидуальную обработку вашего шаблона перед его развертыванием. Это немного нишевая функция, но SAM использует ее для развертывания функций Lambda. Вам придется настроить это вручную, а затем вызвать его по имени:

Transform: [MyMacro, AWS::Serverless]

Выводы, которые позволяют связывать ресурсы между стеками или просто возвращать ответ. Вы можете рассматривать их как общедоступные и частные переменные.

Outputs:
  BackupLoadBalancerDNSName:
    Description: The DNSName of the backup load balancer
    Value: !GetAtt BackupLoadBalancer.DNSName
    Condition: CreateProdResources
  InstanceID:
    Description: The Instance ID
    Value: !Ref EC2Instance

И, наконец, Ресурсы – это просто массив всех ресурсов в шаблоне. Это будет сильно различаться в зависимости от того, что вы используете, поскольку каждая служба будет иметь свои собственные свойства. Например, экземпляр EC2 с пользовательским AMI может выглядеть примерно так:

Resources:
  MyEC2Instance:
    Type: "AWS::EC2::Instance"
    Properties:
      ImageId: "ami-0ff8a91507f77f867"

Вы можете обратиться к полному справочнику по схеме AWS для получения дополнительной информации о конкретном сервисе, который вы используете, или справочнике по ресурсам и свойствам.