Skip to main content

Развертывание в Amazon Elastic Container Service

Узнайте, как развернуть проект в Amazon Elastic Container Service (ECS) в рамках рабочего процесса непрерывного развертывания (CD).

Необходимые компоненты

Перед созданием рабочего процесса GitHub Actions сначала нужно выполнить следующие действия по настройке Amazon ECR и ECS:

  1. Создайте репозиторий Amazon ECR для хранения образов.

    Например, воспользуйтесь AWS CLI:

    Bash
    aws ecr create-repository \ --repository-name MY_ECR_REPOSITORY \ --region MY_AWS_REGION 

    Убедитесь, что вы используете то же имя репозитория Amazon ECR (представлено здесь MY_ECR_REPOSITORY) для переменной ECR_REPOSITORY в приведенном ниже рабочем процессе.

    Убедитесь, что вы используете то же значение региона AWS для переменной AWS_REGION (представленной MY_AWS_REGIONздесь) в рабочем процессе ниже.

  2. Создайте определение задачи Amazon ECS, кластер и службу.

    Дополнительные сведения см . в руководстве по началу работы с консолью Amazon ECS или руководстве по началу работы в документации Amazon ECS.

    Убедитесь, что вы заметите имена, заданные для службы и кластера Amazon ECS, и используйте их для ECS_SERVICE переменных ECS_CLUSTER в приведенном ниже рабочем процессе.

  3. Сохраните определение задачи Amazon ECS в виде JSON-файла в репозитории GitHub.

    Формат файла должен совпадать с выходными данными, созданными:

    Bash
     aws ecs register-task-definition --generate-cli-skeleton 

    Убедитесь, что переменная в рабочем процессе ниже задана ECS_TASK_DEFINITION в качестве пути к JSON-файлу.

    Убедитесь, что переменная в рабочем процессе ниже задана CONTAINER_NAME в качестве имени контейнера в containerDefinitions разделе определения задачи.

  4. Создайте секреты AWS_ACCESS_KEY_ID GitHub Actions и AWS_SECRET_ACCESS_KEY сохраните значения для ключа доступа Amazon IAM.

    Дополнительные сведения о создании секретов для GitHub Actionsсм. в разделе Использование секретов в GitHub Actions.

    Ознакомьтесь с документацией по каждому действию, используемому ниже, для рекомендуемых политик IAM для пользователя IAM и методов обработки учетных данных ключа доступа.

  5. При необходимости настройте среду развертывания. Среды используются для описания общего целевого объекта развертывания, такого как production, staging или development. Когда рабочий процесс GitHub Actions выполняет развертывание в среде, эта среда отображается на главной странице репозитория. Вы можете использовать среды, чтобы требовать утверждения для продолжения задания, ограничить, какие ветви могут активировать рабочий процесс, воротные развертывания с помощью настраиваемых правил защиты развертывания или ограничить доступ к секретам. Дополнительные сведения о создании сред см. в разделе Управление средами для развертывания.

Создание рабочего процесса

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

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

Убедитесь, что вы предоставляете собственные значения для всех переменных в env ключе рабочего процесса.

Если вы настроили среду развертывания, измените значение environment на имя среды. Если вы не настроили среду , или если рабочий процесс находится в частном репозитории, и вы не используете GitHub Enterprise Cloud, удалите ключ environment.

YAML
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub. # Они предоставляются сторонним поставщиком, и на них распространяются # отдельные условия обслуживания, политика конфиденциальности и поддержка # документации. # GitHub рекомендует закрепить действия в фиксации SHA. # Чтобы получить более новую версию, потребуется обновить SHA. # Вы также можете ссылаться на тег или ветвь, однако действие может измениться без предупреждения. name: Deploy to Amazon ECS on: push: branches: - main env: AWS_REGION: MY_AWS_REGION # set this to your preferred AWS region, e.g. us-west-1 ECR_REPOSITORY: MY_ECR_REPOSITORY # set this to your Amazon ECR repository name ECS_SERVICE: MY_ECS_SERVICE # set this to your Amazon ECS service name ECS_CLUSTER: MY_ECS_CLUSTER # set this to your Amazon ECS cluster name ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # set this to the path to your Amazon ECS task definition # file, e.g. .aws/task-definition.json CONTAINER_NAME: MY_CONTAINER_NAME # set this to the name of the container in the # containerDefinitions section of your task definition jobs: deploy: name: Deploy runs-on: ubuntu-latest environment: production steps: - name: Checkout uses: actions/checkout@v5 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@0e613a0980cbf65ed5b322eb7a1e075d28913a83 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ env.AWS_REGION }} - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@62f4f872db3836360b72999f4b87f1ff13310f3a - name: Build, tag, and push image to Amazon ECR id: build-image env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} IMAGE_TAG: ${{ github.sha }} run: | # Build a docker container and # push it to ECR so that it can # be deployed to ECS. docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG . docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT  - name: Fill in the new image ID in the Amazon ECS task definition id: task-def uses: aws-actions/amazon-ecs-render-task-definition@c804dfbdd57f713b6c079302a4c01db7017a36fc with: task-definition: ${{ env.ECS_TASK_DEFINITION }} container-name: ${{ env.CONTAINER_NAME }} image: ${{ steps.build-image.outputs.image }} - name: Deploy Amazon ECS task definition uses: aws-actions/amazon-ecs-deploy-task-definition@df9643053eda01f169e64a0e60233aacca83799a with: task-definition: ${{ steps.task-def.outputs.task-definition }} service: ${{ env.ECS_SERVICE }} cluster: ${{ env.ECS_CLUSTER }} wait-for-service-stability: true 

Дополнительные материалы

Исходный шаблон рабочего процесса смaws.yml. в репозитории GitHub Actions . starter-workflows

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