amazon ecr что это
Возможности Amazon Elastic Container Registry
Интеграция Amazon Container Orchestrator
Amazon Elastic Container Registry (Amazon ECR) интегрирован с Amazon Elastic Container Service (Amazon ECS) и Amazon Elastic Kubernetes Service (Amazon EKS), что означает, что вы можете легко хранить и запускать образы контейнеров для приложений с помощью любого оркестратора. Вам необходимо лишь указать репозиторий Amazon ECR в определении задания или пода, чтобы Amazon ECS или Amazon EKS извлекал подходящие образы для ваших приложений.
Поддержка OCI и Docker
Amazon ECR поддерживает стандарты Open Container Initiative (OCI) и протоколы Docker Registry HTTP API V2. Это позволяет использовать команды интерфейса командной строки Docker (например, «push», «pull», «list», «tag») или удобные вам инструменты Docker для взаимодействия с Amazon ECR, сохраняя существующий процесс разработки. Доступ к Amazon ECR можно без труда получить из любой среды Docker, расположенной в облаке, в локальной сети или на отдельном компьютере. Amazon ECR позволяет хранить образы контейнеров Docker и связанные артефакты OCI в репозиториях.
Общедоступный контейнер образов и галерея артефактов
Вы можете найти контейнерное программное обеспечение, которое публикуют поставщики, проекты по разработке ПО с открытым исходным кодом и независимые разработчики, в общедоступной галерее Amazon ECR. В галерее можно найти популярные базовые образы, такие как операционные системы, публикуемые AWS образы, надстройки Kubernetes и файлы, такие как диаграммы Helm. Для поиска или извлечения общедоступного образа не нужен аккаунт AWS, однако он упрощает и ускоряет использование общедоступного контейнерного программного обеспечения.
AWS Marketplace
В Amazon ECR хранятся как созданные вами контейнеры, так и контейнерное программное обеспечение, приобретенное вами в AWS Marketplace. AWS Marketplace для Containers предлагает надежное контейнерное программное обеспечение для высокопроизводительных вычислительных систем и систем безопасности, инструменты для разработчиков, а также продукты SaaS для анализа, защиты контейнерных приложений и управления ими.
Высокая доступность и надежность
Amazon ECR хранит образы контейнеров и артефакты в Amazon S3. Сервис Amazon S3 обеспечивает надежность данных 99,999999999 % (здесь 11 девяток), поскольку он автоматически создает и сохраняет копии всех объектов из S3 во множестве независимых систем. Это означает, что ваши данные доступны, когда они нужны, и защищены от сбоев, ошибок и угроз. Amazon ECR также может автоматически реплицировать данные в несколько регионов AWS для приложений высокой доступности.
Сотрудничество с командой и другими пользователями
Amazon Elastic Container Registry поддерживает возможность определения и организации репозиториев в вашем реестре с помощью пространства имен. Это позволяет организовать репозитории в соответствии с существующими рабочими процессами вашего коллектива. С помощью политик уровня ресурсов вы можете указать, какие действия API может выполнять другой пользователь с вашим репозиторием (например, create, list, describe, delete и get), что позволяет без труда обмениваться репозиториями с разными пользователями и аккаунтами AWS. Вы можете легко делиться контейнерными артефактами с другими пользователями, сохраняя их в общедоступном репозитории.
Контроль доступа
Для управления доступом и контроля над тем, кто или что (например, инстансы EC2) имеет доступ к образам контейнеров, Amazon ECR использует сервис AWS Identity and Access Management (IAM). IAM позволяет установить политики доступа к образам контейнеров для пользователей в рамках одного аккаунта или открыть доступ к образам в частном репозитории для другого аккаунта AWS. В дальнейшем можно уточнить эти политики, указав разные разрешения для разных пользователей и ролей (например, разрешение на использование только команды push, только команды pull или полный административный доступ). Любой пользователь может получить доступ к образам контейнеров, хранящимся в общедоступных репозиториях.
Шифрование
Образы контейнеров можно передавать в сервис Amazon ECR и из него по протоколу HTTPS. Кроме того, образы автоматически шифруются при хранении с помощью шифрования Amazon S3 на стороне сервера. Amazon ECR также позволяет выбрать собственный ключ, управляемый системой Key Management Service (AWS KMS), для шифрования неактивных образов.
Интеграция с инструментами сторонних разработчиков
Сервис Amazon ECR интегрирован с инструментами сторонних разработчиков. Вы можете включить Amazon ECR в свой процесс непрерывной интеграции и доставки, что позволит поддерживать существующий процесс разработки. Подробную информацию об интеграции с инструментами сторонних разработчиков см. на странице о наших партнерах.
What is Amazon Elastic Container Registry?
Amazon Elastic Container Registry (Amazon ECR) is an AWS managed container image registry service that is secure, scalable, and reliable. Amazon ECR supports private repositories with resource-based permissions using AWS IAM. This is so that specified users or Amazon EC2 instances can access your container repositories and images. You can use your preferred CLI to push, pull, and manage Docker images, Open Container Initiative (OCI) images, and OCI compatible artifacts.
Amazon ECR supports public container image repositories as well. For more information, see What is Amazon ECR Public in the Amazon ECR Public User Guide.
Components of Amazon ECR
Amazon ECR contains the following components:
An Amazon ECR private registry is provided to each AWS account; you can create one or more repositories in your registry and store images in them. For more information, see Amazon ECR private registries.
Your client must authenticate to Amazon ECR registries as an AWS user before it can push and pull images. For more information, see Private registry authentication.
An Amazon ECR repository contains your Docker images, Open Container Initiative (OCI) images, and OCI compatible artifacts. For more information, see Amazon ECR private repositories.
You can control access to your repositories and the images within them with repository policies. For more information, see Repository policies.
You can push and pull container images to your repositories. You can use these images locally on your development system, or you can use them in Amazon ECS task definitions and Amazon EKS pod specifications. For more information, see Using Amazon ECR images with Amazon ECS and Using Amazon ECR Images with Amazon EKS.
Features of Amazon ECR
Amazon ECR provides the following features:
Lifecycle policies help with managing the lifecycle of the images in your repositories. You define rules that result in the cleaning up of unused images. You can test rules before applying them to your repository. For more information, see Lifecycle policies.
Image scanning helps in identifying software vulnerabilities in your container images. Each repository can be configured to scan on push. This ensures that each new image pushed to the repository is scanned. You can then retrieve the results of the image scan. For more information, see Image scanning.
Cross-Region and cross-account replication makes it easier for you to have your images where you need them. This is configured as a registry setting and is on a per-Region basis. For more information, see Private registry settings.
How to get started with Amazon ECR
To use Amazon ECR, you must be set up to install the AWS Command Line Interface and Docker. For more information, see Setting up with Amazon ECR and Using Amazon ECR with the AWS CLI.
Pricing for Amazon ECR
Thanks for letting us know we’re doing a good job!
If you’ve got a moment, please tell us what we did right so we can do more of it.
Thanks for letting us know this page needs work. We’re sorry we let you down.
If you’ve got a moment, please tell us how we can make the documentation better.
С легкостью храните, публикуйте и развертывайте контейнерное программное обеспечение в любом месте
500 МБ частного хранилища репозитория в месяц
Отправляйте образы контейнеров в Amazon ECR без необходимости установки или масштабирования инфраструктуры и извлекайте их с помощью любого инструмента управления.
Безопасно обменивайтесь образами и загружайте их через протокол HTTPS (Hypertext Transfer Protocol Secure) с автоматическим шифрованием и контролем доступа.
Получайте оперативный доступ к образам и быстро распространяйте их, сокращайте время загрузки и повышайте доступность с помощью масштабируемой и надежной архитектуры.
Как это работает
Примеры использования
Выявление уязвимостей
Соответствуйте требованиям к безопасности изображений в вашей организации, используя аналитическую информацию о распространенных уязвимостях и рисках (CVE) и общую систему оценки уязвимостей (CVSS).
Оптимизация рабочих нагрузок по развертыванию
Публикуйте контейнерные приложения с помощью одной команды и легко интегрируйте среды с самостоятельным управлением.
Управление политиками жизненного цикла образов
Автоматически сохраняйте самые последние образы и отправляйте ненужные в архив. Используйте правила и теги для быстрого доступа к образам.
Часто задаваемые вопросы по Amazon Elastic Container Registry
Общие вопросы
Вопрос. В чем разница между общедоступными и частными репозиториями Amazon ECR?
Частный репозиторий не предлагает возможности поиска контента и, прежде чем разрешить извлечение образов, требует аутентификации на основе Amazon IAM с использованием аккаунта AWS. Общедоступный репозиторий имеет описательный контент и позволяет кому угодно извлекать образы без необходимости иметь аккаунт AWS или учетные данные IAM. Образы общедоступного репозитория также доступны в общедоступной галерее Amazon ECR.
Использование Amazon ECR
Вопрос: Как начать работу с Amazon ECR?
Для скорейшего начала работы с сервисом Amazon ECR воспользуйтесь интерфейсом командной строки Docker, чтобы отправить и извлечь свой первый образ. Дополнительные сведения см. на странице Начало работы.
Вопрос: Можно ли получить доступ к Amazon ECR в облаке VPC?
Да. Теперь есть возможность настроить адреса AWS PrivateLink, чтобы инстансы могли извлекать образы из частных репозиториев, не передавая их через публичный Интернет.
Вопрос. Как лучше всего управлять репозиториями и образами?
Сервис Amazon ECR предоставляет интерфейс командной строки и API для создания, мониторинга и удаления репозиториев, а также настройки разрешений на доступ к ним. Эти же действия можно выполнять в консоли управления Amazon ECR, доступ к которой можно получить в разделе «Repositories» консоли Amazon ECR. Кроме того, Amazon ECR интегрирован с интерфейсом командной строки Docker, что позволяет отправлять и извлекать образы, а также назначать им теги с машины, используемой для разработки.
Вопрос. Можно ли использовать Amazon ECR в локальной среде?
Да. Вы можете получить доступ к Amazon ECR из любого места, где работает Docker, в том числе с настольных компьютеров или из локальных сред.
Вопрос. Есть ли в общедоступной галерее Amazon ECR образы, публикуемые AWS?
Да. Такие сервисы, как Amazon EKS, Amazon Sagemaker и AWS Lambda, публикуют свои официальные образы контейнеров и артефакты для открытого пользования в Amazon ECR.
Вопрос. Работает ли Amazon ECR с Amazon ECS?
Да. Amazon ECR интегрирован с Amazon ECS, что позволяет легко хранить и запускать образы контейнеров для работающих в Amazon ECS приложений, а также управлять ими. Вам необходимо лишь указать репозиторий Amazon ECR в определении задания, а Amazon ECS будет извлекать подходящие образы для ваших приложений.
Вопрос: Работает ли Amazon ECR с AWS Elastic Beanstalk?
Да. В настоящее время AWS Elastic Beanstalk поддерживает Amazon ECR как в одноконтейнерных, так и во многоконтейнерных средах Docker, позволяя легко развертывать в AWS Elastic Beanstalk образы контейнеров, хранящиеся в Amazon ECR. Вам нужно только указать репозиторий Amazon ECR в конфигурации Dockerrun.aws.json и прикрепить политику AmazonEC2ContainerRegistryReadOnly к роли инстанса контейнера.
Вопрос: Какую версию движка Docker поддерживает Amazon ECR?
Amazon ECR в настоящее время поддерживает Docker версии 1.7.0 и выше.
Вопрос: Какую версию API Docker Registry поддерживает Amazon ECR?
Amazon ECR поддерживает спецификацию API Docker Registry V2.
Вопрос: Будет ли Amazon ECR автоматически создавать образы из Dockerfile?
Нет. Однако Amazon ECR интегрируется с рядом популярных решений интеграции и непрерывной доставки контента для обеспечения этой возможности. Дополнительную информацию см. на странице партнеров по Amazon ECR.
Вопрос: Поддерживает ли Amazon ECR федеративный доступ?
Да. Amazon ECR интегрирован с AWS Identity and Access Management (IAM), который поддерживает федерацию удостоверений для делегированного доступа к Консоли управления AWS или API AWS.
Вопрос: Какую версию спецификации манифеста образов Docker поддерживает Amazon ECR?
Amazon ECR поддерживает формат Docker Image Manifest V2 Schema 2. В целях обеспечения обратной совместимости с образами Schema 1 Amazon ECR продолжает принимать образы, загруженные в формате Schema 1. Кроме того, Amazon ECR может преобразовывать образы из формата Schema 2 в Schema 1 при извлечении образов с помощью более старой версии Docker Engine (1.9 и ниже).
Вопрос: Поддерживает ли Amazon ECR формат Open Container Initiative (OCI)?
Да. Amazon ECR совместим со спецификацией образов Open Container Initiative (OCI), что позволяет отправлять и извлекать образы OCI и артефакты. Amazon ECR также может при отправке преобразовывать образы между форматами Docker Image Manifest V2, Schema 2 и OCI.
Безопасность
Вопрос. Как Amazon ECR помогает обеспечить безопасность образов контейнеров?
Amazon ECR автоматически шифрует образы при хранении, используя шифрование на стороне сервера Amazon S3 или шифрование AWS KMS, а также передает образы контейнеров по HTTPS. Вместо того чтобы управлять данными доступа непосредственно на своих инстансах EC2, можно настроить политики для управления разрешениями и контроля доступа к вашим образам, используя пользователей и роли AWS Identity and Access Management (IAM).
Вопрос: Как использовать AWS Identity and Access Management (IAM) для настройки разрешений?
Политики IAM на основе ресурсов можно использовать для управления разрешениями и мониторинга того, кто и что (например, инстансы EC2) может получать доступ к вашим образам контейнеров, а также как, когда и где они могут получать к ним доступ. Чтобы начать работу, воспользуйтесь Консолью управления для создания политик на уровне ресурсов для своих репозиториев. Кроме того, вы можете использовать образцы политик и прикрепить их к своим репозиториям с помощью интерфейса командной строки Amazon ECR.
Вопрос: Можно ли предоставить общий доступ к образам для других аккаунтов AWS?
Да. По ссылке приведен пример создания и настройки политики для обеспечения доступа к образу из разных аккаунтов.
Вопрос. Сканирует ли Amazon ECR образы контейнеров на наличие уязвимостей?
Да. Если включить сканирование при отправке для частных репозиториев, Amazon ECR может автоматически сканировать образы контейнеров на наличие разнообразных уязвимостей операционной системы. Кроме того, можно сканировать изображения с помощью команды API. Вы получите уведомление от Amazon ECR, когда сканирование будет завершено, а результаты будут доступны в консоли и через API.
CI/CD с помощью AWS и Bamboo
Наша команда состоит из одного разработчика и одного DevOps инженера. Я отвечаю за разворачивание приложения в кластере Amazon ECS. В качестве CI/CD сервера я использую Bamboo. В этой статье я подробно расскажу, как я осуществляю разворачивание приложения в dev-среде.
Сборка Docker образа
Здесь я выполняю следующие шаги:
Шаг 1: Установка и настройка Docker
Сначала я обновляю сервер, на котором установлен Bamboo, устанавливаю необходимые пакеты и настраиваю репозиторий Docker. Здесь надо отметить, что Bamboo я установил на операционной системе CentOS 7. Информацию по установке docker на других операционных системах можно найти на сайте www.docker.com.
Затем я устанавливаю приложение Docker и запускаю сервис:
Потом добавляю пользователя bamboo в группу Docker:
Если после запуска этих команд docker отвечает сообщением «Hello from Docker!», то это означает, что моя установка работает правильно.
Шаг 2. Настройка артефактов в Bamboo
Разработка приложения ведется на Grails. При компиляции приложения создается файл с расширением war. Данный файл, в терминологии Bamboo, является артефактом. Настроим Bamboo для использования данного файла в последующих задачах. Для этого я перехожу во вкладку Tasks:
И настраиваю задачу Grails, как показано ниже:
Мы видим, что Grails сначала очищает папку сборки, затем запускает тесты и, наконец, создает war-файл для dev среды.
После этого я нажимаю вкладку Artifacts и кнопку Create artifact:
Я задаю артефакт, как показано ниже:
Grails помещает war-файл в каталог build/libs. Поставлю галочку для параметра Shared, так как этот артефакт мне понадобится позже.
Теперь я создаю проект развертывания (deployment project) и указываю артефакт для использования в своем плане сборки:
Ещё я настраиваю задачу Artifact download в проекте развертывания:
Таким образом, Bamboo теперь настроен на использование war-файла.
Шаг 3. Настройка репозитария Amazon ECR
Amazon ECR – это сервис хранения Docker образов, а также управления ими. Для настройки необходимо открыть консоль AWS и выбрать ECR:
Создав репозитарий, я получаю такой адрес:
После окончания настройки здесь же можно найти инструкцию о том, как залогиниться, как загрузить образ с репозитария и загрузить образ на репозитарий.
Шаг 4: Сборка Docker образа в Bamboo
Теперь мне необходимо настроить тригер для запуска сборки Docker образа. Для этого я перехожу во вкладку Triggers и нажимаю на кнопку Add trigger:
Здесь я выбираю опцию Build after successfully building the plan для того, чтобы Docker образ собирался после компиляции проекта.
Теперь надо добавить задание сборки Docker образа. Для этого переходим во вкладку Tasks, нажинаем Add task, выбираем тип Docker. Вводим описание и выбираем Build a Docker image из списка раскрывающегося меню. В поле Repository вводим
Что же касается Dockerfile, то он может быть таким, как показано ниже:
При запуске приложения необходимо указать базу данных. Переменные среды DATASOURCE_URL, DATASOURCE_USERNAME, DATASOURCE_PASSWORD служат для передачи этой информации приложению, но их значения задаются во время запуска контейнера.
На этом настройка процесса сборки Docker образа с приложением завершена. Следующим шагом является настройки загрузки этого образа на репозитарий Amazon ECR.
Загрузка образа в Elastic Container Registry
Для хранения образов, собранных с помощью Bamboo, можно использовать Elastic Container Registry. Для достижения этой цели я выполняю следующие шаги:
Шаг 1. Установка Amazon ECR Docker Credential Helper
Для загрузки Docker образов на Amazon ECR нужно иметь учетные данные. Такие учетные данные можно получить, выполнив команду
Однако эти учетные данные действительны только в течение 12 часов. Поэтому можно либо каждый раз перед загрузкой образа на ECR выполнять вышеуказанную команду, либо установить ECR Docker Credential Helper, который держит в актуальном состоянии временные учетные данные и логинится на ECR. Для установки ECR Docker Credential Helper необходимо выполнить следующие шаги.
Для начала надо установить git, а затем склонировать github репозитарий:
Потом надо поместить следующие строки в файл /home/bamboo/.docker/config.json:
И скопировать собранное приложение в каталог /usr/bin:
Шаг 2. Подключение IAM роли к серверу Bamboo
Для того, чтобы сервер Bamboo смог использовать ECR, надо создать роль, добавить к этой роли политику AmazonEC2ContainerRegistryPowerUser, а затем прикрепить эту роль к EC2 инстансу Bamboo. Открываем консоль AWS и выбираем IAM. Далее нажимаем кнопку Create role, выбираем AWS service и EC2, как показано ниже:
Затем нажимаем кнопку Next: Permissions и на следующем экране находим и выбираем политику AmazonEC2ContainerRegistryPowerUser. После этого заканчиваем создание роли и присоединяем ее к своему серверу Bamboo.
Шаг 3: Настройка задания загрузки Docker образа
Приложение мы собрали и собрали Docker образ с war-файлом. Теперь надо этот образ загрузить в репозитарий. Для этого добавляю еще одно задание Docker, в этот раз для загрузки образа в ECR репозитарий. Перехожу во вкладку Tasks, нажимаю Add task, выбираю тип Docker. Ввожу описание и выбираю Push a Docker image to a Docker registry из списка раскрывающегося меню. Выбираю Custom registry и вписываю адрес репозитория в поле Repository. В качестве типа аутентификации (Authentication type) я выбираю Use the agent’s native credentials.
На этом настройка процесса загрузки Docker образа на репозитарий Amazon ECR завершена. В следующих шагах описывается процесс настройки кластера и сервиса для запуска контейнерного приложения. Но перед этим надо настроить параметры запуска контейнера. Этим мы сейчас и займемся.
Создание Amazon ECS Task Definition
Task Definition – здесь записываются параметры исполнения контейнеров. Наше приложение использует базу данных, параметры которого указываются при запуске контейнера, поэтому в этом разделе мы еще создадим базу данных. В качестве базы данных я использую Amazon RDS, а пароль для доступа к базе в зашифрованном виде я храню в AWS Systems Manager Parameter Store. Следующие шаги я выполняю для того, чтобы создать Task Definition:
Шаг 1. Создание базы данных на инстансе Amazon RDS
Наше приложение использует базу данных PostgreSQL. Для создания базы данных открываю консоль AWS, выбираю сервис Amazon RDS, нажимаю кнопку Create database, затем в качестве движка базы данных выбираю PostgreSQL. На следующей странице я выбираю Dev/Test в качестве рабочей среды и нажимаю кнопку Next. Затем обозначаю DB instance identifier как onboard-dev-db, и master username как devdbadmin. Потом я перехожу на следующую страницу, чтобы настроить VPC, группу подсетей (subnet group) и группу безопасности (security group). Эта база данных будет использоваться в частной сети, поэтому для параметра Public accessibility выбираю No. В поле Database name ввожу devdb и нажимаю кнопку Create database.
Шаг 2. Настройка AWS Systems Manager Parameter Store
Пароль базы данных я храню в зашифрованном виде. Для этого открываю AWS консоль и перехожу в AWS Systems Manager → Shared Resources → Parameter Store → Create Parameter. В качестве имени параметра ввожу devdbpassword и выбираю SecureString для типа параметра, затем ввожу пароль базы данных в поле Value.
Шаг 3. Создание Task Definition
Amazon ECS – это кластер, в котором запускаются контейнерные приложения. Он использует Task Definition для указания параметров выполнения контейнерного приложения. Для задания таких параметров нажимаю кнопку Create new Task Definition. Затем выбираю в качестве типа запуска Fargate и перехожу к следующему шагу. Здесь я задаю имя как onboard-dev-taskdef. Для параметра Task execution IAM role field выбираю Create new role. Что же касается выделенных для данного приложения ресурсов, я обозначаю 2 ГБ памяти и 1 vCPU. Теперь необходимо добавить параметры запуска контейнера. Контейнер я назову onboard-dev-container. Имя образа обозначу так:
aws_account_id.dkr.ecr.us-east-2.amazonaws.com/onboard:latest. Приложение Amazon ECR Docker Credential Helper будет заботиться об аутентификации на ECR, поэтому опцию Private repository authentication оставляю неотмеченным. В dev-среде приложение доступно по порту 8080, поэтому для параметра port mappings записываю 8080 и выбираю протокол tcp. Параметры URL базы данных, имя пользователя и пароль передаются в контейнер с помощью переменных среды. Эти параметры я задаю в разделе Environment variables. Для того, чтобы получить значение параметра devdbpassword из Parameter Store указываю тип ValueFrom. Последнее, что я настраиваю – это Log configuration, здесь выбираю Auto-configure CloudWatch Logs. Теперь создание Task Definition завершено.
Однако, для роли ecsTaskExecutionRole нужна политика для получения devdbpassword из Parameter Store. Для этого перехожу в IAM Roles и выбираю ecsTaskExecutionRole, нажимаю Add inline policy. В данном случае я добавляю с помощью визуального редактора. Поэтому в поле Service ввожу Systems Manager, в поле Actions — GetParameters. Затем нажимаю Add ARN для поля Resources и заполняю свои значения:
В конце просматриваю значения задаваемых параметров, нажав Review policy, даю ему имя и завершаю работу с конфигурацией ecsTaskExecutionRole.
На этом настройка параметров запуска контейнерного приложения завершена. Теперь надо создать кластер ECS и сервис.
Создание сервиса Amazon ECS
Наше контейнерное приложение запускается в виде сервиса в кластере ECS. Для настройки необходимо выполнить следующие шаги:
Шаг 1. Создание кластера Amazon ECS
Для создания кластера ECS надо перейти в консоль AWS и выбрать сервис ECS. Затем нажать Create Cluster и выбрать кластерный шаблон Networking only. На следующей странице я называю кластер как onboard-dev-cluster и завершаю создание кластера. Теперь у меня есть кластер ECS основанный на Fargate.
Шаг 2: Создание сервиса
Чтобы создать сервис, я нажимаю на ссылку onboard-dev-cluster, затем перехожу во вкладку Services и нажимаю кнопку Create. Для параметра launch type выбираю Fargate, для Task Definition выбираю onboard-dev-taskdef. Кроме того, я выбираю onboard-dev-cluster в поле Cluster. В поле Service name я прописываю onboard-dev. Устанавливаю параметр Number of tasks на ноль, так как я не хочу запускать приложение прямо сейчас. Я оставляю значения параметров Minimum healthy percent равным 100, а Maximum percent – 200. Для параметра Deployment type выбираю Rolling update и перехожу к следующему шагу.
На странице Configure Network для параметра Cluster VPC я выбираю ранее созданный VPC, который называется Development VPC. Приложение в стадии разработки доступно только в частной сети, поэтому я выбираю две частные подсети. Для настройки групп безопасности я нажимаю кнопку Edit, затем выбираю Select existing security group, затем группу безопасности default и нажимаю кнопку Save. Для параметра Auto-assign public IP я выбираю Disabled. Далее, для параметра Load balancer type я выбираю None и оставляю невыбранным опцию Enable service discovery integration. Затем я нажимаю Next, Next и Create service.
Теперь у меня есть сервис, в котором количество запущенных заданий равно нулю. Настройку запуска приложения выполним в следующем шаге.
Обновление сервиса
Как только разработчик обновляет код приложения, наше развертывание проходит через создание Docker-образа, его загрузка в Elastic Container Registry и, наконец, запуск контейнерного приложения в виде сервиса в кластере ECS Fargate. На данный момент количество заданий, запущенных в кластере равно нулю. Чтобы приложение запустилось нужно обновить сервис, указав количество равным одному. Я выполняю следующие шаги для достижения этой цели:
Шаг 1. Установка плагина Tasks for AWS Bamboo
Tasks for AWS Bamboo – это плагин, который упрощает подготовку и эксплуатацию ресурсов AWS из проектов сборки и развертывания Bamboo. Для установки этого плагина перехожу в проект развертывания, нажимаю Add task, захожу на Atlassian Marketplace и устанавливаю Tasks for AWS (Bamboo).
Шаг 2. Обновление сервиса ECS
Теперь в проекте развертывания я добавляю задание Amazon ECS Service. Затем записываю в поле описания задания Update Service for onBoard-dev. В поле Action выбираю Update Service и Force new deployment. Потом в качестве региона запуска приложения выбираю US East (Ohio). Затем записываю в соответствующих полях ARN (Amazon Resource Name) для Task Definiton, кластера и сервиса. В этом задании я обновляю желаемое количество запущенных заданий до одного. Далее я заполняю текстовое поле конфигурации развертывания следующими значениями:
Я настраиваю сеть без публичного IP следующим образом:
В разделе Source для параметра AWS Security Credentials я выбираю IAM Role for EC2.
Мне нужно иметь возможность обновлять службу ECS, поэтому я присоединяю политику AmazonECS_FullAccess к своему экземпляру Bamboo EC2. Для этого открываю консоль AWS, выбираю IAM. Затем я выбираю роль, которую использую для своего сервера Bamboo. Нажимаю кнопку Attach policies, нахожу политику AmazonECS_FullAccess, устанавливаю флажок слева и заканчиваю прикреплять политику.
На этом заканчивается настройка CI/CD с использованием AWS и Bamboo. Таким образом, при обновлении кода приложения разработчиком, загрузки этого кода в репозитарий, запускается тестирование, сборка приложения. Затем выполняется сборка Docker образа с war-файлом приложения, и этот образ копируется на репозитарий Amazon ECR. Далее в кластере Amazon ECS запускается в виде сервиса контейнерное приложение, которое обновляет текущее приложение, если оно не было остановлено. Если же приложение было остановлено для экономии ресурсов, то приложение просто запускается. После завершения проверки приложения в dev-среде можно приложение остановить, указав количество заданий, запущенных в кластере равным нулю.
Если вам понравилась статья и есть идеи для улучшения, напишите в комментариях.