Я буду объяснять, как развернуть приложение Doceerized в AWS, используя экземпляр Fargate, процесс для экземпляра EC2 должен быть очень похожим, поэтому это руководство также будет работать для вас.
В предыдущей статье я объяснил, как подключить приложение Nestjs, с целью этого руководства я буду использовать ту же кодовую базу для создания образа докера, который будет развернут в AWS.
Чтобы следовать этим шагам, я предполагаю, что у вас есть следующее:
- Сценарий докера для создания вашего изображения.
- AWS CLI настроен на вашем компьютере.
- Некоторые базовые знания AWS и Docker.
Вам необходимо создать репозиторий Docker в вашей учетной записи AWS, это можно сделать выполнение команды ниже:
AWS ECR Создание-репозиторий —repository-name =
После того, как ваш репозиторий создан, перейдите в Эластичный контейнер -> Amazon ECR -> Репозитории
В вашей учетной записи AWS. Там ищите ваш недавно созданный репозиторий и нажмите на него. Как только ваше REPO открывается, нажмите на Просмотр команд Push
кнопка. Вы получите что-то подобное:
Скопируйте все эти команды, так как вам понадобится позже, чтобы построить, нажмите и развернуть ваше приложение.
Чтобы не копировать эти команды каждый раз, когда мы строим наше приложение, мы можем создать несколько скриптов в нашем package.json
автоматизировать процесс.
Если вы не развертываете приложение JS, вы можете использовать сценарий оболочки или другой инструмент, с которым вы чувствуете себя комфортно.
Чтобы упростить нашу жизнь, мы настроим следующие сценарии в package.json
файл:
... "aws:login": "aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin.dkr.ecr.us-west-2.amazonaws.com/nestjs", "docker:build": "docker build -t nestjs .", "docker:tag": "docker tag nestjs:latest .dkr.ecr.us-west-2.amazonaws.com/nestjs:latest", "docker:push": "docker push .dkr.ecr.us-west-2.amazonaws.com/nestjs:latest", ...
Не забудьте заменить все эти команды с теми, которые вы скопировали с вашего хранилища.
Позвольте мне объяснить, что делают каждый из этих команд:
AWS: Вход
— выполнил команду для входа в систему, чтобы вы могли правильно аутентифицироваться с помощью AWS CLI.Докер: построить
— Создайте свой образ докера, используя свой местныйДокер
скриптДокер: тег
— Тейте недавно созданное изображение с именем, которое вы скопировали с вашего репозитория.Docker: Push
— Нажмите на ваше изображение на сервер AWS.
Я также добавлю новый скрипт, чтобы выполнить все предыдущие команды в последовательности (да, я немного ленивый, я не хочу вводить все эти команды каждый раз, когда я строю свой образ).
... "aws:build": "npm run aws:login && npm run docker:build && npm run docker:tag && npm run docker:push", ...
Теперь, если вы запустите AWS: построить
Команда ( NPM Run AWS: Build
), вы будете строить, тег и нажимайте свое изображение Docker в свою учетную запись AWS. Мы будем использовать это на следующих шагах, чтобы развернуть ваше приложение. После выполнения команды так выглядит мой репозиторий:
Перед созданием определения вашего задания убедитесь, что у вас есть роль с AmazonecstaskexecutiveRolepolicy Отказ
Теперь вам нужно создать определение задачи, которое будет позже, будет использоваться сервисом для создания экземпляров вашего изображения Docker. Чтобы создать определение задачи Перейти к Эластичный контейнер-сервис -> Amazon ECS -> Определения задач
и нажмите на Создать новое определение задачи
Кнопка и следуйте следующим шагам:
- Выберите «Совместимость типа запуска» — Fargate.
- Установите имя вашей задачи и роли выполнения.
- Установите размер задачи (это изменится в зависимости от ваших потребностей).
- Создать контейнер для задания (с целью руководства, которую я не буду углубиться на каждом из вариантов, которые вы можете указать здесь, я буду держать его простым сейчас).
Для поля изображения вам нужно указать URL вашего репозитория.
- Сохраните свою задачу.
На этом этапе вы создадите кластер, который будет использоваться для создания сервисов для развертывания вашего приложения.
- Выберите Networking только кластер, так как мы будем создавать фаргитные экземпляры.
- Установите имя кластера, проверьте флажок «Создать VPC» и сохранить.
Перейдите на вкладку «Услуги» в недавно созданном кластере и нажмите на Создать
кнопка.
- Установите тип вашего обслуживания в качестве Fargate, определение вашей задачи и кластера в качестве те, которые вы создали, для имени сервиса, у меня обычно есть
-Сервис
суффикс, чтобы идентифицировать их проще. И для этого мы установим количество экземпляров как 1 (это будет зависеть от ваших потребностей).
- Установите значение VPC с тем, который был создан с кластером, и установите некоторые подсети, где будет доступна ваша услуга, также установите свой свой свой свой свой свой свойство «Автоматическое назначение Public IP-адреса» на «Enabled». Для остальных полей вы можете сохранить их в качестве их значений по умолчанию и нажмите на
Следующий шаг
кнопка.
Для параметров автоматического масштабирования сохраните значения по умолчанию и нажмите на
Следующий шаг
кнопка.Нажмите
Создать сервис
И дождитесь создания вашего обслуживания.
Теперь, когда вы создали свой сервис, давайте проверим наше развернутое приложение. Сначала вам нужно пойти к задаче, созданной вашим обслуживанием.
Здесь вы можете найти публичный IP-адрес вашего экземпляра. И ищете этот IP непосредственно в вашем браузере, должен отображать ваше запущенное приложение.
Запуск приложения
Примечание. Если ваше приложение не работает в порту 80.
Вам нужно будет открыть порт, ваш контейнер открывает в группе безопасности, которую использует ваш сервис, это может быть сделано в соответствующих правилах вашей группы безопасности.
Потрясающий!! Ты сделал это!! Теперь ваше приложение работает на Fargate контейнер в AWS, но, если нам нужно внести некоторые изменения в нашем приложении? Как мы обновляем наш документ докера и повторно разверните новые изменения? Я расскажу об этом на следующем шаге.
Представьте, что мы получили новое требование для новой функции в нашем приложении, и нам нужно подталкивать эти изменения в наш контейнер Fargate, для этого есть пара шагов, которые нам нужно следовать:
- Создайте изображение докера с новыми изменениями.
- Tag Docker Image.
- Push Docker Image.
- Развернуть контейнер с новыми изменениями.
Первые 3 шага мы получили их покрыты на сценариях, которые мы создали ранее, нам нужен только последний скрипт.
"aws:deploy": "aws ecs update-service --cluster test-cluster --service nestjs-service --force-new-deployment --region=",
Эта команда заставит вашу услугу, чтобы повторно создать с последними изменениями от изображения Docker. После внесения новых изменений в вашем приложении вы можете запустить следующую команду:
NPM Run AWS: Build && NPM Run AWS: развертывать
Эта команда будет строить, тег, толкать и повторно создать контейнер с последними изменениями.
Вы можете найти исходный код для этого руководства здесь Отказ
Оригинал: «https://dev.to/edgargonzalez525/how-to-deploy-your-app-on-aws-with-docker-1gfp»