Необходимые компоненты
Перед созданием рабочего процесса GitHub Actions сначала нужно выполнить следующие действия по настройке Amazon ECR и ECS:
- 
Создайте репозиторий Amazon ECR для хранения образов. Например, воспользуйтесь AWS CLI: Bash aws ecr create-repository \ --repository-name MY_ECR_REPOSITORY \ --region MY_AWS_REGIONaws 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здесь) в рабочем процессе ниже.
- 
Создайте определение задачи Amazon ECS, кластер и службу. Дополнительные сведения см . в руководстве по началу работы с консолью Amazon ECS или руководстве по началу работы в документации Amazon ECS. Убедитесь, что вы заметите имена, заданные для службы и кластера Amazon ECS, и используйте их для ECS_SERVICEпеременныхECS_CLUSTERв приведенном ниже рабочем процессе.
- 
Сохраните определение задачи Amazon ECS в виде JSON-файла в репозитории GitHub. Формат файла должен совпадать с выходными данными, созданными: Bash aws ecs register-task-definition --generate-cli-skeleton aws ecs register-task-definition --generate-cli-skeletonУбедитесь, что переменная в рабочем процессе ниже задана ECS_TASK_DEFINITIONв качестве пути к JSON-файлу.Убедитесь, что переменная в рабочем процессе ниже задана CONTAINER_NAMEв качестве имени контейнера вcontainerDefinitionsразделе определения задачи.
- 
Создайте секреты AWS_ACCESS_KEY_IDGitHub Actions иAWS_SECRET_ACCESS_KEYсохраните значения для ключа доступа Amazon IAM.Дополнительные сведения о создании секретов для GitHub Actionsсм. в разделе Использование секретов в GitHub Actions. Ознакомьтесь с документацией по каждому действию, используемому ниже, для рекомендуемых политик IAM для пользователя IAM и методов обработки учетных данных ключа доступа. 
- 
При необходимости настройте среду развертывания. Среды используются для описания общего целевого объекта развертывания, такого как production,stagingилиdevelopment. Когда рабочий процесс GitHub Actions выполняет развертывание в среде, эта среда отображается на главной странице репозитория. Вы можете использовать среды, чтобы требовать утверждения для продолжения задания, ограничить, какие ветви могут активировать рабочий процесс, воротные развертывания с помощью настраиваемых правил защиты развертывания или ограничить доступ к секретам. Дополнительные сведения о создании сред см. в разделе Управление средами для развертывания.
Создание рабочего процесса
Выполнив предварительные требования, можно приступить к созданию рабочего процесса.
В следующем примере рабочего процесса показано, как создать образ контейнера и отправить его в Amazon ECR. Затем он обновляет определение задачи с новым идентификатором образа и развертывает определение задачи в Amazon ECS.
Убедитесь, что вы предоставляете собственные значения для всех переменных в env ключе рабочего процесса.
Если вы настроили среду развертывания, измените значение environment на имя среды. Если вы не настроили среду , или если рабочий процесс находится в частном репозитории, и вы не используете GitHub Enterprise Cloud, удалите ключ environment.
# Этот рабочий процесс использует действия, которые не сертифицированы 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
# Этот рабочий процесс использует действия, которые не сертифицированы 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
Дополнительные сведения о службах, используемых в этих примерах, см. в следующей документации:
- Рекомендации по безопасности в IAM в документации Amazon AWS.
- Официальное действие AWS Configure AWS Credentials( Настройка учетных данных AWS).
- Официальное действие AWS Amazon ECR "Login" (Вход в Amazon ECR).
- Официальное действие AWS Amazon ECS "Render Task Definition" (Определение задачи отрисовки в Amazon ECS).
- Официальное действие AWS Amazon ECS "Deploy Task Definition" (Определение задачи развертывания в Amazon ECS).