Я не тот старый, но когда я построил свой первый веб-сайт, который вручную скопировал код на сервер Apache с FTP. Этот сервер был также запущен в моем шкафу. Как вы можете себе представить, этот процесс развертывания был не совсем полнопроблемным, и я испытал частые отключения на моем сайте. Развертывание прошло в течение 10 лет с момента моего первого веб-сайта и общей целью сегодня — максимально автоматизировать развертывание кода. Давайте исследуем, как мы можем развернуть код из GitHub в EC2 с помощью кодовой обработки.
Зачем автоматизировать?
Проще говоря, чем более повторяемые ваши развертывания, тем меньше простоя у вас будет. Автоматизированные развертывания легче тестировать, легче устранить неполадки, поддаваться масштабируемости, может выполнять откаты от неудача, поддерживать синие/зеленые и канаренные развертывания. Список продолжается.
В идеале ваши ресурсы должны рассматриваться как скот, не похожи на домашние животные. Если это заболело, вы снимаете его и замените его другим. Автоматические развертывания делают это легко.
Во-первых, Git Reppo
Прежде чем мы сделаем все остальное, нам понадобится репозиторий Git для домики кода. Я клонурую пустую репо и создаю демо-файл.
git clone git@github.com:seanziegler/AWSDeployDemo.git touch demo.txt echo "This is prod" > demo.txt git add . git commit -m "Init commit" git push origin master
Я собираюсь создать отдельную ветку, чтобы я мог толкать отдельно, чтобы проверить и мастеру.
git branch test git checkout test echo "This is test" > demo.txt git add . git commit -m "Create test branch" git push origin test
Очевидно, что вы обычно развернули приложение, а не только текстовый файл.
Создание целей развертывания
Теперь, когда у нас есть репозитории, необходимы некоторые экземпляры. Я собираюсь использовать интерфейс управления, поскольку это просто демонстрация, но вы также можете использовать AWSCLI или Terraform/CloudFormation.
Это хорошая практика, чтобы создать новую подсеть внутри вашего VPC для каждого развертывания приложения.
Хорошо, в ближайшее время сами экземпляры EC2. Я собираюсь сделать два: один для теста и один для производства. Очевидно, что это просто пусточное развертывание, но кодовоеepipine достаточно универсально, чтобы позволить развертыванию на сотни ресурсов, если это необходимо.
Я также добавлю несколько тегов для определения экземпляра продукции VS. Я буду использовать позже, чтобы рассказать кодовую обработку, которую из них есть какой.
Хорошо, у нас есть то, что нам нужно для экземпляров.
Установка кодового агента
Прежде чем мы сможем построить трубопровод, нам нужно настроить кодеде и это агент. CODDEDEDOND Требуется демон небольшого агента, установленного на каждой машине, которая является целью развертывания.
Вы можете проверить, есть ли у вас агент CodedePoy, установленный, подключив к вашему экземпляру и запуску (на Amazon Linux или RHEL):
sudo service codedeploy-agent status
Вы либо получите ошибку или сообщение о том, что служба остановлена. Если служба остановлена, просто запустите:
sudo service codedeploy-agent start
Если вы получите ошибку, агент CoDeDeyPloy не установлен. Так что это становится немного более вовлеченным. Вот страница документов о том, как установить кодовый агент. По сути, это сводится к следующим командам:
sudo yum update -y sudo yum install ruby wget -y cd /home/ec2-user wget https://bucket-name.s3.region-identifier.amazonaws.com/latest/install chmod +x ./install sudo ./install auto
В команде Wget выше вам нужно будет заменить имя ведро, и региона-идентификатор со значениями, соответствующими вашим регионом.
| Имя области | ведро имя | Регион-идентификатор |
| Восток США (Огайо) | AWS-CODDEDOWLED-US-EAST-2 | US-East-2 |
| США Восток (Н. Вирджиния) | AWS-CODDEDELOPLE-US-EAST-1 | США-Восток-1 |
| США Запад (Н. Калифорния) | AWS-CODDEDELOPLES-US-WEST-1 | нас -west-1. |
| США запад (Орегон) | AWS-CODDEDOWLED-US-WEST-2 | нас- запад-2. |
| Канада (центральная) | AWS-CODDEDELOPLE — CA-CLEAN-1 | CA-Central-1 |
| Европа (Ирландия) | AWS-CODDEDELOPLED-EU-WEST-1 | EU-WEST-1 |
| Европа (Лондон) | AWS-CODDEDELOPLED-EU-WEST-2 | EU-WEST-2 |
| Европа (Париж) | AWS-CODDEDELOPLED-EU-WEST-3 | EU-WEST-3 |
После установки установите в последний раз, чтобы убедиться, что агент работает.
sudo service codedeploy-agent status
Кодеде работы роль
Для работы кодовой работы мы должны назначить ему роль услуг с правильными разрешениями. Давайте создадим роль с политикой AWSCodedeDoyRole, прилагаемой к ней.
Теперь, когда роли экземпляра установлены, пришло время обратиться к кодеде.
Создание группы приложений и развертывания
Создание приложения в коде выполняет простое. Просто дайте ему имя и сообщите ему, что вы планируете развертывание кода к экземплярам EC2.
Создание группы развертывания немного сложнее, но не сложно. Дайте ему имя и присваиваете роль сервиса Кодеде, которую вы создали ранее. Это позволит выполнять кодовые недостатки для доступа к ресурсам, указанным в этой группе развертывания.
Далее выберите экземпляры EC2 для развертывания. Вы также можете развернуть в группы AutoScaling, но сейчас я развернул в один экземпляр. Не забудьте добавить Env: Test Tag. Вы должны увидеть один сопоставленный экземпляр, который соответствует экземпляру теста, созданного ранее.
Нам не нужна специальная настройка развертывания, поэтому просто оставьте настройку ALLATONCE по умолчанию на месте. Снимите флажок Включить балансировку нагрузки, так как мы не установили это.
Повторите этот процесс снова, но нацеливайтесь на экземпляры с помощью Env: Prod.
appspec.yml.
Кодовая обработка должна знать, что делать с файлами в вашем репозитории Git, когда вы развертываете. Файл под названием AppSpec.yml — это способ определения задач, которые вы хотите запустить при развертывании кода. Здесь слишком много, но AWS имеет примеры того, как построить файл AppSpec.yml.
Для этого проекта я просто собираюсь скопировать в некоторых текстовых файлах из GIT REPO, чтобы проверить, что трубопровод работает. Вам необходимо будет выполнять свои собственные исследования о том, как создать файл AppSPEC в соответствии с вашим развертыванием. Если вы хотите следить с моим манекенным развертыванием, поставьте это в файл в корне своего GIT REPO. Не забудьте назвать его appspec.yml!
version: 0.0
os: linux
files:
- source: ./demo.txt
destination: /
Создание трубопровода
Нам нужно построить две трубопроводы для этого на работу. Один трубопровод, который развертывает тестовую ветку для тестирования экземпляров и один трубопровод, который разворачивает главный ветвь к экземплянам производства.
Создание трубопровода — это простой процесс. Я предлагаю позволить CodePipeline создать свою роль SERVIE для вас. Это просто проще таким.
Создайте стадию, которая использует ваш репозиторий GitHUB и тестовую ветку в качестве источника.
Пропустить сцену сборки на данный момент. Если вы хотите, вы можете вернуться позже и настроить CodeBuild, чтобы выполнить тесты интеграции или создавать двоичные файлы, если вам нужна такая вещь.
Выберите провайдер кодедей и выберите группу приложений и развертывания для экземпляров тестов.
Нажмите Далее и разверните трубопровод. Вы увидите, что он попытаюсь скачать свой источник и развернуть его в свои тестовые экземпляры.
Отлично, мы развернули в наши экземпляры испытаний. Но как насчет производства? Нажмите «Изменить» в верхней части страницы трубопроводов. И затем нажмите «Изменить» на каждом этапе трубопровода. Отсюда вы можете добавить другой источник и развернуть действие для магистральной филиал и группы развертывания производства.
Когда вы нажимаете «Сохранить», ваш трубопровод будет развернуть тестовую ветку в группу развертывания тестов и главной ветви к группе развертывания производства.
Теперь давайте просто проверим и посмотрим, работают ли развертывание. Во-первых, давайте проверим экземпляр теста.
ssh ec2-user@test-instance Last login: Sun Apr 26 16:00:02 2020 from__| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ [ec2-user@test-instance ~]$ cat /demo.txt This is test
Далее проверьте экземпляр производства.
ssh ec2-user@prod-instance Last login: Sun Apr 26 16:00:02 2020 from__| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ [ec2-user@prod-instance ~]$ cat /demo.txt This is prod
Потрясающий! Только то, что ожидалось. Ваш конвейер установлен и готов к работе.
Настройка развертывания.
Есть несколько способов настроить ваш трубопровод.
appspec.yml.
Для одной вещи вы захотите начать со строить файл AppSpec.yml, который отражает структуру вашего приложения. Копировать все необходимые файлы, запустите скрипты для настройки зависимостей и т. Д.
Ами
Сделайте пользовательский AMI для экземпляров в каждой вашей группе. Включите любые зависимости, которые требуется ваш код для запуска (и агента CodeDeyPloy) в AMI, а не устанавливать его каждое развертывание. Это увеличит надежность и скорость ваших развертываний.
Автоскалинговые группы
Вместо создания групп развертывания с определенными идентифицированными экземплярами EC2, рассмотрите возможность развертывания до групп AutoScaling вместо этого, чтобы вы могли применить правила масштаба и масштаба.
Оригинал: «https://dev.to/sean_ziegler/deploying-code-from-github-to-aws-ec2-with-codepipeline-25m7»