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

Надоело управлять серверами? Вот как начать работу с контейнерами на AWS


Контейнеры объединяют весь код, зависимости и конфигурацию вашего приложения в единый образ, который вы можете запускать в Amazon Elastic Container Service без настройки или управления одним экземпляром EC2.

Что такое контейнеры и как их использовать?

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

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

Хотя они очень полезны сами по себе, контейнеры также служат другой важной цели: они переносят вашу инфраструктуру и операции в тот же рабочий процесс управления версиями, что и ваш код, и синхронизируют вашу среду разработки и рабочую среду. Ваш код будет работать на вашей локальной машине разработки так же, как и на вашем сервере. А поскольку вся конфигурация вашего сервера является частью этого контейнера, ею можно управлять через git так же, как вы управляете своим исходным кодом.

Однако существуют некоторые ограничения контейнеров. В основном они доступны только для чтения; Инструменты оркестрации, такие как ECS и Kubernetes, разработаны с учетом того, что контейнеры не имеют состояния. Вы действительно хотите использовать их только для вычислений, а не для хранения — если вы запускаете контейнеры на зарезервированном экземпляре EC2, может быть нормально запускать на них базу данных, но приложения, работающие на ECS, спроектированы так, чтобы иметь гибкое время запуска и остановки. . Все данные, хранящиеся на них, эфемерны, как и оперативная память.

Если ваше приложение использует базу данных или локальное хранилище, вы можете подумать о переносе их в отдельный сервис, который в любом случае может быть дешевле, чем его запуск на EC2. В AWS есть множество управляемых сервисов баз данных, а хранилище S3 очень дешевое по сравнению с EBS или EFS.

Упакуйте свое приложение с помощью Docker

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

Вы захотите установить Docker Desktop для своей операционной системы, чтобы вы могли запускать контейнеры и управлять ими на своем локальном компьютере.

Основная точка входа, которая определяет всю конфигурацию Docker, называется Dockerfile. Вы захотите создать новый каталог проекта и создать новый Dockerfile с простым именем Dockerfile без расширения:

touch Dockerfile

В этом файле вы будете использовать команды Docker, чтобы проинструктировать Docker о том, как создать ваш экземпляр. Для начала вы, вероятно, захотите разветвить уже существующий образ из Docker Hub, например Ubuntu, с помощью команды FROM :

FROM ubuntu

Существует множество готовых образов Docker на выбор, например образы с предустановленным программным обеспечением, таким как nginx.

Вы можете связать локальные папки в этом каталоге проекта с фактическими папками в образе с помощью команды COPY . Например, если у вас есть папка проекта с именем nginx/ со всей конфигурацией для nginx, вы можете скопировать ее с помощью:

COPY nginx /etc/nginx/

Это обеспечит правильную конфигурацию конечного контейнера в расположении nginx по умолчанию.

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

Отправьте свой файл Dockerfile в ECS Amazon

Вам нужно будет загрузить свое изображение в репозиторий ECR. Перейдите в Консоль управления ECR и создайте новый репозиторий с уникальным именем. Выберите «View Push Commands», и вам будет представлено это диалоговое окно, которое должно помочь вам связать ваш клиент Docker с репозиторием, создать образ и загрузить его в ECR.

Короче говоря, вам нужно войти в систему со своими учетными данными AWS, создать образ, присвоить ему тег, а затем запустить:

docker push

С URI вашего репозитория.

Когда вы закончите с этим, перейдите в консоль управления ECS и выберите «Начать». Выберите «Пользовательский» в качестве типа изображения:

Введите полный URI вашего изображения; это должно выглядеть так:

aws_account_id.dkr.ecr.region.amazonaws.com/repository:latest

В этом диалоговом окне в разделе «Расширенная конфигурация» есть тонна дополнительных настроек, и вы должны убедиться, что прочитали все и заполнили все, что вам нужно. Одним из важных моментов является отметка «Автоматическая настройка журналов CloudWatch», которая свяжет журналы вашего контейнерного приложения с CloudWatch.

По умолчанию ваше приложение будет работать на AWS Fargate в качестве вычислительного ядра, а не на EC2. Fargate — это версия Kubernetes от AWS; он организует и управляет запуском ваших контейнеров. Основным недостатком является то, что у вас не будет доступа для входа в какие-либо реальные экземпляры, поэтому вам нужно будет вносить какие-либо изменения через обновления докера (что в любом случае следует делать). Если вы не хотите использовать Fargate, вы можете использовать стандартные инстансы EC2, на которых будет работать агент контейнера AWS ECS.

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

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

Когда вы закончите, нажмите «Создать», чтобы запустить свой кластер. Его можно будет просмотреть на вкладке «Кластеры» консоли управления ECS после его создания.