При прохождении данного модуля вы создадите образ контейнера для монолитного приложения node.js и передадите его в Amazon Elastic Container Registry. Начните разработку

развертывание в amazon ecr

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

обзор архитектуры

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

Управление зависимостями и усовершенствованный сервис Pipeline
Образ контейнера Docker – это своевременный захват кода приложения и зависимостей. Это позволяет проектной организации создать стандартный конвейер для жизненного цикла приложения. Ниже приведены соответствующие примеры.

  1. Разработчики создают и запускают контейнер на локальном компьютере.
  2. Сервер непрерывной интеграции запускает тот же контейнер и выполняет с ним интеграционное тестирование для проверки соответствия требованиям.
  3. Этот же контейнер передается в промежуточную среду, где его поведение во время работы можно проверить с помощью нагрузочного или ручного тестирования.
  4. Этот же контейнер передается в производственную среду.

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

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

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

Время выполнения: 20 минут

Используемые сервисы:


При работе с первой частью этого учебного пособия вы создадите образ контейнера Docker для монолитного приложения node.js и передадите его в реестр Amazon Elastic Container Registry (Amazon ECR). Нажимайте на номер каждого шага, чтобы развернуть раздел.

break-the-monolith
  • Шаг 1. Выполнение настройки

    В нескольких следующих шагах вы будете использовать сервисы Docker, Github, Amazon Elastic Container Service (Amazon ECS) и Amazon ECR для развертывания кода в контейнерах. Чтобы выполнить эти шаги, убедитесь, что у вас есть следующие инструменты.

    1. Аккаунт AWS. Если у вас еще нет аккаунта AWS, зарегистрируйтесь здесь. Все упражнения из этого учебного пособия выполняются на уровне бесплатного пользования AWS.
      ⚐ Примечание. Для некоторых сервисов, необходимых для использования, может потребоваться активация аккаунта в течение более 12 часов. Если у вас возникли трудности с использованием каких-либо сервисов, а ваш аккаунт создан только что, подождите несколько часов и повторите попытку.
    2. Установленный сервис Docker. С помощью сервиса Docker вы создадите файлы образов для запуска в контейнерах. Docker – это проект с открытым исходным кодом. Его можно загрузить для ОС Mac или для ОС Windows.
      После установки сервиса Docker можно проверить его работу. Для этого введите в терминале текст Docker --version. Отобразится номер версии, например: Docker version 19.03.5, build 633a0ea.
    3. Установленный интерфейс командной строки AWS.
      • Передача образов в реестр Amazon ECR будет выполняться с помощью интерфейса командной строки AWS (AWS CLI). Получить дополнительные сведения и загрузить интерфейс командной строки AWS можно здесь.
      • После установки интерфейса командной строки AWS можно проверить его работу. Для этого введите в терминале текст aws --version. Отобразится номер версии, например: aws-cli/1.16.217 Python/2.7.16 Darwin/18.7.0 botocore/1.12.207.
      • Если интерфейс командной строки AWS уже установлен, его следует обновить до последней версии. Для этого выполните в терминале следующую команду: pip install awscli --upgrade --user
      • При первом использовании интерфейса командной строки AWS может потребоваться настроить данные для доступа.
    4. Установленный текстовый редактор. Если у вас еще нет текстового редактора для кодирования, установите его на локальный компьютер. Atom – это простой текстовый редактор с открытым исходным кодом от сервиса GitHub, который популярен среди разработчиков.
  • Шаг 2. Скачивание и открытие проекта

    Скачайте код с сервиса GitHub. Для этого перейдите по ссылке https://github.com/awslabs/amazon-ecs-nodejs-microservices и нажмите кнопку Клонировать или скачать, чтобы скачать репозиторий GitHub на локальный компьютер. Клонировать репозиторий также можно с помощью инструментов GitHub Desktop или Git.

    Откройте файлы проекта. Для этого запустите редактор Atom, нажмите кнопку Добавить папку проекта и выберите папку с сохраненным репозиторием amazon-ecs-nodejs-microservices. Весь проект будет добавлен в редактор Atom, что упростит работу с ним.

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

    В течение нескольких минут просмотрите файлы и ознакомьтесь с различными аспектами приложения, включая базу данных db.json, сервер server.js, файл package.json и приложение Dockerfile.

    проектирование микросервисов
  • Шаг 3. Формирование репозитория

    Создайте репозиторий.

    • Для этого перейдите в консоль Amazon ECR.
    • На странице Репозитории нажмите кнопку Создать репозиторий.
    • На странице «Создать репозиторий» введите следующее имя репозитория: api.
      ⚐ Примечание. Для параметра Неизменяемый тег оставьте значения по умолчанию.
    • Выберите Создать репозиторий.

    После создания репозитория вы получите сообщение с подтверждением и адресом репозитория. Адрес репозитория имеет следующий формат: [идентификатор аккаунта].dkr.ecr.[регион].amazonaws.com/[имя репозитория]. Значения [идентификатор аккаунта], [регион] и [имя репозитория] зависят от выполненных вами настроек.

    ⚐ Примечание. Адрес репозитория будет использоваться на протяжении всего курса обучения.

    создание
  • Шаг 4. Создание и передача образа Docker

    Войдите в терминал и перейдите в следующий каталог: ~/amazon-ecs-nodejs-microservices/2-containerized/services/api.

    С помощью терминала подтвердите вход в сервис Docker.

    1. Выполните команду $(aws ecr get-login --no-include-email --region [ваш регион]). Замените заполнитель [ваш регион], например: $(aws ecr get-login --no-include-email --region us-west-2). В случае необходимости настройте данные для доступа.
      Если аутентификация прошла успешно, вы получите сообщение с подтверждением: Вход в систему успешно выполнен.
    2. Чтобы создать образ, выполните в терминале следующую команду: docker build -t api.
      ⚐ Примечание. Точка (.) обязательно ставится после api.
    3. После завершения создания присвойте образу тег, чтобы передать его в репозиторий: docker tag api:latest [идентификатор аккаунта].dkr.ecr.[регион].amazonaws.com/api:v1 
      ⚐ Примечание. Замените заполнители [идентификатор аккаунта] и [регион] соответствующими данными.
      ⚐ Подсказка. Тег :v1 – это версия сборки образа. Каждый раз при создании образа этот номер версии необходимо увеличивать. Если применяется скрипт, для присвоения тега образу можно использовать автоматический номер, например тег времени. Это удобная функция, которая позволяет легко вернуться к предыдущей сборке образа контейнера.
    4. Отправьте образ в реестр Amazon ECR, выполнив команду: docker push [идентификатор аккаунта].dkr.ecr.[регион].amazonaws.com/api:v1
      ⚐ Примечание. Замените заполнители [идентификатор аккаунта] и [регион] соответствующими данными.

    Перейдя в репозиторий реестра Amazon ECR, можно увидеть, что образу присвоен тег v1.

    Тег образа в реестре Amazon ECR