Развертывание AWS CLI и CloudFormation для инфраструктуры

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

Это гостевая статья Карла Эрикссона, сооснователя Mocki – инструмента, который позволяет создавать имитацию API за несколько минут.

Если вы управляете одной средой для вашего приложения, то вы легко можете управлять всеми процессами через графический пользовательский интерфейс (GUI), такой как AWS Console. Но когда у вас есть несколько сред, таких как разработка, тестирование и продукция, вещи становятся сложнее. Вмешательство человека и время вступают в игру. AWS CLI и CloudFormation могут помочь.

Вам нужно управлять своей инфраструктурой в виде кода. В мире AWS это делается с помощью стеков CloudFormation.

При первом развертывании стека CloudFormation AWS создаст все с нуля. Если вы развертываете стек как обновление, он обнаружит все изменения в инфраструктуре и развернет только эти изменения.

Стеки CloudFormation гарантируют применение одних и тех же изменений во всех ваших различных средах.

CloudFormation: AWS инфраструктура в виде кода

AWS Infrastructure as Code Source: https://aws.amazon.com/cloudformation/

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

Для обновлений CloudFormation гарантирует, что операции выполняются наиболее эффективным образом и даже автоматически откатывает изменения, если что-то идет не так.

Давайте теперь узнаем, как создать инфраструктуру с помощью AWS CLI и CloudFormation.

Предварительные требования

Чтобы следовать учебнику по CloudFormation в остальной части этой статьи, убедитесь, что у вас есть следующее:

  • Учетная запись AWS
  • AWS CLI – Узнайте, как загрузить и настроить здесь. Вы можете подтвердить успешную настройку CLI, запустив команду aws s3 ls. Если команда возвращает результат успешно, значит все в порядке.

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

Создание вашей первой CloudFormation стека

Достаточно информации введения, давайте перейдем к делу и используем AWS CLI и CloudFormation для создания стека!

В этом примере вы создадите стек, содержащий инфраструктуру, необходимую для развертывания статического веб-сайта, размещенного на службе хостинга статических файлов AWS S3.

Чтобы начать, создайте новый файл с именем template.yaml и заполните его следующим содержимым:

AWSTemplateFormatVersion: 2010-09-09
Description: A simple CloudFormation template
Resources:
    Bucket:
        Type: AWS::S3::Bucket
        Properties:
            BucketName: your-bucket-name # используйте собственное уникальное имя
  • AWSTemplateFormatVersionопределяет версию формата шаблона, чтобы AWS мог его правильно интерпретировать при его развертывании.
  • Description – содержит описание шаблона, которое будет отображаться в консоли AWS после его развертывания.
  • Resources – содержит всю инфраструктуру, которую вы добавляете в шаблон. В данном случае ресурсы создадут простое хранилище S3, на котором будет размещен статический сайт.

Свойство BucketName должно быть уникальным, поэтому попробуйте придумать что-то отличное от your-bucket-name.

Развертывание стека с помощью AWS CLI и CloudFormation

Теперь, когда у вас есть простой шаблон для развертывания, разверните его в AWS, используя AWS CLI и CloudFormation с помощью следующей команды:

aws cloudformation deploy --template-file template.yaml --stack-name static-website

После выполнения команды перейдите в консоль AWS, затем перейдите в Сервисы → CloudFormation. Вы должны увидеть запущенное развертывание. Через несколько минут вы должны увидеть, что оно переходит в состояние CREATE_COMPLETE. Если это так, то развертывание завершено!

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

Перейдите по адресу СервисыS3, и теперь вы должны увидеть новый созданный бакет S3.

Создание простого веб-сайта

После создания бакета S3 для хранения веб-сайта, создайте файл index.html, который будет служить сайтом.

Если у вас нет своей собственной концепции, вы можете использовать следующий контент в вашем файле index.html:

<html>
  <body>
    <h1>Static Site Deployed Using CloudFormation</h1>
    <p>Hello! This site was deployed using CloudFormation. Go cloud!</p>
  </body>
</html>

Сохраните файл index.html и загрузите его в свой бакет S3 через консоль AWS.

Убедитесь, что индексный файл имеет общедоступный доступ для чтения, так как он будет доступен каждому, посещающему сайт.

Обновление шаблона

Прямо сейчас, вновь созданное хранилище S3 не настроено для размещения веб-сайта. Давайте изменим это. В данный момент вы можете загрузить файл индекса через консоль AWS, но он не доступен через публичный интернет. С помощью AWS CLI и CloudFormation измените конфигурацию для включения размещения статического веб-сайта.

Измените файл template.yaml следующим образом, чтобы включить его. Ниже мы представляем несколько новых свойств нашего шаблона.

AWSTemplateFormatVersion: 2010-09-09
Description: A simple CloudFormation template
Resources:
    Bucket:
        Type: AWS::S3::Bucket
        Properties:
            BucketName: your-bucket-name # используйте собственное уникальное имя
            AccessControl: PublicRead
            WebsiteConfiguration:
                IndexDocument: index.html
Outputs:
    WebsiteURL:
        Value: !GetAtt [Bucket, WebsiteURL]
        Description: URL for website hosted on S3
  • AccessControl – устанавливает права доступа к хранилищу S3 для публичного чтения, чтобы любой пользователь, посетивший сайт, мог увидеть файл index.html
  • WebsiteConfiguration – настраивает хранилище S3 как веб-сайт, который будет обслуживать файл index.html, загруженный при посещении пользователем URL-адреса хранилища
  • Outputs – могут быть разными свойствами для ресурсов, которые являются частью стека. В приведенном выше примере WebsiteURL является выходом стека. При повторном развертывании шаблона вы должны увидеть URL веб-сайта в качестве выхода в консоли AWS CloudFormation.

Теперь разверните изменения в существующем стеке, используя ту же команду, что и на предыдущем шаге:

aws cloudformation deploy --template-file template.yaml --stack-name static-website

Чтобы подтвердить результат, перейдите в консоль CloudFormation. Через несколько минут вы должны заметить, что стек находится в состоянии UPDATE_COMPLETE. Когда стек перейдет в это состояние, перейдите на вкладку Outputs, где вы должны увидеть WebsiteUrl добавленный в качестве вывода в шаблоне.

Перейдите по предоставленному URL и вы увидите свой сайт в браузере.

Поздравляем! С помощью AWS CLI и CloudFormation вы развернули свой первый стек с использованием инфраструктуры в виде кода! На этом этапе продолжайте добавлять изменения в файл шаблона или создайте новый в соответствии с вашими потребностями.

Вывод

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

Используя принципы, изученные в этом руководстве, вы можете развернуть готовую к использованию систему полностью с помощью CloudFormation.

Дальнейшее чтение

Если вы хотите узнать больше о инфраструктуре в виде кода как феномене, ознакомьтесь с книгой Infrastructure as Code in the Real World от HashiCorp.

Если вы хотите узнать больше о том, как интегрировать CloudFormation в ваш рабочий процесс разработки и управлять всей вашей инфраструктурой с помощью CloudFormation, обязательно ознакомьтесь с:

Удачи в вашем путешествии по развертыванию всей вашей инфраструктуры с использованием кода инфраструктуры в AWS!

Source:
https://adamtheautomator.com/aws-cli-and-cloudformation/