{"meta":{"title":"Развертывание в Amazon Elastic Container Service","intro":"Узнайте, как развернуть проект в Amazon Elastic Container Service (ECS) в рамках рабочего процесса непрерывного развертывания (CD).","product":"GitHub Actions","breadcrumbs":[{"href":"/ru/actions","title":"GitHub Actions"},{"href":"/ru/actions/how-tos","title":"Инструкции"},{"href":"/ru/actions/how-tos/deploy","title":"Развернуть"},{"href":"/ru/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"Развертывание на сторонних платформах"},{"href":"/ru/actions/how-tos/deploy/deploy-to-third-party-platforms/amazon-elastic-container-service","title":"Сервис эластичных контейнеров Amazon"}],"documentType":"article"},"body":"# Развертывание в Amazon Elastic Container Service\n\nУзнайте, как развернуть проект в Amazon Elastic Container Service (ECS) в рамках рабочего процесса непрерывного развертывания (CD).\n\n## Необходимые компоненты\n\nПеред созданием GitHub Actions рабочего процесса сначала необходимо выполнить следующие действия по настройке Amazon ECR и ECS:\n\n1. Создайте репозиторий Amazon ECR для хранения образов.\n\n   Например, воспользуйтесь [AWS CLI](https://aws.amazon.com/cli/):\n\n   ```bash copy\n   aws ecr create-repository \\\n       --repository-name MY_ECR_REPOSITORY \\\n       --region MY_AWS_REGION\n\n   ```\n\n   Убедитесь, что вы используете то же имя репозитория Amazon ECR (представлено здесь `MY_ECR_REPOSITORY`) для переменной `ECR_REPOSITORY` в приведенном ниже рабочем процессе.\n\n   Убедитесь, что вы используете то же значение региона AWS для переменной `AWS_REGION` (представленной `MY_AWS_REGION`здесь) в рабочем процессе ниже.\n\n2. Создайте определение задачи Amazon ECS, кластер и службу.\n\n   Дополнительные сведения см [. в руководстве по началу работы с консолью](https://us-east-2.console.aws.amazon.com/ecs/home?region=us-east-2#/firstRun) Amazon ECS или [руководстве](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/getting-started-fargate.html) по началу работы в документации Amazon ECS.\n\n   Убедитесь, что вы заметите имена, заданные для службы и кластера Amazon ECS, и используйте их для `ECS_SERVICE` переменных `ECS_CLUSTER` в приведенном ниже рабочем процессе.\n\n3. Сохраните определение задачи Amazon ECS в виде JSON-файла в GitHub репозитории.\n\n   Формат файла должен совпадать с выходными данными, созданными:\n\n   ```bash copy\n\n   aws ecs register-task-definition --generate-cli-skeleton\n\n   ```\n\n   Убедитесь, что переменная в рабочем процессе ниже задана `ECS_TASK_DEFINITION` в качестве пути к JSON-файлу.\n\n   Убедитесь, что переменная в рабочем процессе ниже задана `CONTAINER_NAME` в качестве имени контейнера в `containerDefinitions` разделе определения задачи.\n\n4. Создайте GitHub Actions секреты с именем `AWS_ACCESS_KEY_ID` и `AWS_SECRET_ACCESS_KEY` сохраните значения для ключа доступа Amazon IAM.\n\n   Дополнительные сведения о создании секретов GitHub Actionsсм. в разделе [Использование секретов в GitHub Actions](/ru/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets#creating-secrets-for-a-repository).\n\n   Ознакомьтесь с документацией по каждому действию, используемому ниже, для рекомендуемых политик IAM для пользователя IAM и методов обработки учетных данных ключа доступа.\n\n5. При необходимости настройте среду развертывания. Среды используются для описания общего целевого объекта развертывания, такого как `production`, `staging` или `development`. Когда GitHub Actions рабочий процесс внедряется в окружение, среда отображается на главной странице репозитория. Вы можете использовать среды, чтобы требовать утверждения для продолжения задания, ограничить, какие ветви могут активировать рабочий процесс, воротные развертывания с помощью настраиваемых правил защиты развертывания или ограничить доступ к секретам. Дополнительные сведения о создании сред см. в разделе [Управление средами для развертывания](/ru/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments).\n\n## Создание рабочего процесса\n\nВыполнив предварительные требования, можно приступить к созданию рабочего процесса.\n\nВ следующем примере рабочего процесса показано, как создать образ контейнера и отправить его в Amazon ECR. Затем он обновляет определение задачи с новым идентификатором образа и развертывает определение задачи в Amazon ECS.\n\nУбедитесь, что вы предоставляете собственные значения для всех переменных в `env` ключе рабочего процесса.\n\nЕсли вы настроили среду развертывания, измените значение `environment` на имя среды. Если вы не настроили среду , или если рабочий процесс находится в частном репозитории, и вы не используете GitHub Enterprise Cloud, удалите ключ `environment`.\n\n```yaml copy\n# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.\n# Они предоставляются сторонним поставщиком, и на них распространяются\n# отдельные условия обслуживания, политика конфиденциальности и поддержка\n# документации.\n\n# GitHub рекомендует закрепить действия в фиксации SHA.\n# Чтобы получить более новую версию, потребуется обновить SHA.\n# Вы также можете ссылаться на тег или ветвь, однако действие может измениться без предупреждения.\n\nname: Deploy to Amazon ECS\n\non:\n  push:\n    branches:\n      - main\n\nenv:\n  AWS_REGION: MY_AWS_REGION                   # set this to your preferred AWS region, e.g. us-west-1\n  ECR_REPOSITORY: MY_ECR_REPOSITORY           # set this to your Amazon ECR repository name\n  ECS_SERVICE: MY_ECS_SERVICE                 # set this to your Amazon ECS service name\n  ECS_CLUSTER: MY_ECS_CLUSTER                 # set this to your Amazon ECS cluster name\n  ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # set this to the path to your Amazon ECS task definition\n                                               # file, e.g. .aws/task-definition.json\n  CONTAINER_NAME: MY_CONTAINER_NAME           # set this to the name of the container in the\n                                               # containerDefinitions section of your task definition\n\njobs:\n  deploy:\n    name: Deploy\n    runs-on: ubuntu-latest\n    environment: production\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n\n      - name: Configure AWS credentials\n        uses: aws-actions/configure-aws-credentials@0e613a0980cbf65ed5b322eb7a1e075d28913a83\n        with:\n          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}\n          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}\n          aws-region: ${{ env.AWS_REGION }}\n\n      - name: Login to Amazon ECR\n        id: login-ecr\n        uses: aws-actions/amazon-ecr-login@62f4f872db3836360b72999f4b87f1ff13310f3a\n\n      - name: Build, tag, and push image to Amazon ECR\n        id: build-image\n        env:\n          ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}\n          IMAGE_TAG: ${{ github.sha }}\n        run: |\n          # Build a docker container and\n          # push it to ECR so that it can\n          # be deployed to ECS.\n          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .\n          docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG\n          echo \"image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG\" >> $GITHUB_OUTPUT\n\n      - name: Fill in the new image ID in the Amazon ECS task definition\n        id: task-def\n        uses: aws-actions/amazon-ecs-render-task-definition@c804dfbdd57f713b6c079302a4c01db7017a36fc\n        with:\n          task-definition: ${{ env.ECS_TASK_DEFINITION }}\n          container-name: ${{ env.CONTAINER_NAME }}\n          image: ${{ steps.build-image.outputs.image }}\n\n      - name: Deploy Amazon ECS task definition\n        uses: aws-actions/amazon-ecs-deploy-task-definition@df9643053eda01f169e64a0e60233aacca83799a\n        with:\n          task-definition: ${{ steps.task-def.outputs.task-definition }}\n          service: ${{ env.ECS_SERVICE }}\n          cluster: ${{ env.ECS_CLUSTER }}\n          wait-for-service-stability: true\n```\n\n## Дополнительные материалы\n\nИсходный шаблон рабочего процесса см [`aws.yml`](https://github.com/actions/starter-workflows/blob/main/deployments/aws.yml) . в репозитории GitHub Actions`starter-workflows` .\n\nДополнительные сведения о службах, используемых в этих примерах, см. в следующей документации:\n\n* [Рекомендации по безопасности в IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) в документации Amazon AWS.\n* Официальное действие AWS Configure AWS [Credentials( Настройка учетных](https://github.com/aws-actions/configure-aws-credentials) данных AWS).\n* Официальное действие AWS [Amazon ECR \"Login\"](https://github.com/aws-actions/amazon-ecr-login) (Вход в Amazon ECR).\n* Официальное действие AWS [Amazon ECS \"Render Task Definition\"](https://github.com/aws-actions/amazon-ecs-render-task-definition) (Определение задачи отрисовки в Amazon ECS).\n* Официальное действие AWS [Amazon ECS \"Deploy Task Definition\"](https://github.com/aws-actions/amazon-ecs-deploy-task-definition) (Определение задачи развертывания в Amazon ECS)."}