Рубрики
Uncategorized

Как развернуть ваше приложение на AWS с Docker

Я буду объяснять, как развернуть свое приложение в AWS, используя экземпляр Fargate, процесс F … помечен с Docker, DevOps, AWS, Showdev.

Я буду объяснять, как развернуть приложение Doceerized в AWS, используя экземпляр Fargate, процесс для экземпляра EC2 должен быть очень похожим, поэтому это руководство также будет работать для вас.

В предыдущей статье я объяснил, как подключить приложение Nestjs, с целью этого руководства я буду использовать ту же кодовую базу для создания образа докера, который будет развернут в AWS.

Чтобы следовать этим шагам, я предполагаю, что у вас есть следующее:

  1. Сценарий докера для создания вашего изображения.
  2. AWS CLI настроен на вашем компьютере.
  3. Некоторые базовые знания 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",
...

Не забудьте заменить все эти команды с теми, которые вы скопировали с вашего хранилища.

Позвольте мне объяснить, что делают каждый из этих команд:

  1. AWS: Вход — выполнил команду для входа в систему, чтобы вы могли правильно аутентифицироваться с помощью AWS CLI.
  2. Докер: построить — Создайте свой образ докера, используя свой местный Докер скрипт
  3. Докер: тег — Тейте недавно созданное изображение с именем, которое вы скопировали с вашего репозитория.
  4. 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, для этого есть пара шагов, которые нам нужно следовать:

  1. Создайте изображение докера с новыми изменениями.
  2. Tag Docker Image.
  3. Push Docker Image.
  4. Развернуть контейнер с новыми изменениями.

Первые 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»