{"meta":{"title":"Amazon Elastic Container Service에 배포","intro":"CD(지속적인 배포) 워크플로의 일부로 Amazon ECS(Elastic Container Service)에 프로젝트를 배포하는 방법을 알아보세요.","product":"GitHub Actions","breadcrumbs":[{"href":"/ko/actions","title":"GitHub Actions"},{"href":"/ko/actions/how-tos","title":"사용법"},{"href":"/ko/actions/how-tos/deploy","title":"배포"},{"href":"/ko/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"타사 플랫폼에 배포"},{"href":"/ko/actions/how-tos/deploy/deploy-to-third-party-platforms/amazon-elastic-container-service","title":"Amazon Elastic Container Service"}],"documentType":"article"},"body":"# Amazon Elastic Container Service에 배포\n\nCD(지속적인 배포) 워크플로의 일부로 Amazon ECS(Elastic Container Service)에 프로젝트를 배포하는 방법을 알아보세요.\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   아래 워크플로우에서 `MY_ECR_REPOSITORY` 변수에 대해 동일한 Amazon ECR 리포지토리 이름(여기서는 `ECR_REPOSITORY`로 표시됨)을 사용해야 합니다.\n\n   아래 워크플로우에서 `AWS_REGION` (여기서는 `MY_AWS_REGION`로 표시됨) 변수에 대해 동일한 AWS 지역 값을 사용해야 합니다.\n\n2. Amazon ECS 작업 정의, 클러스터 및 서비스를 생성합니다.\n\n   자세한 내용은 [Amazon ECS 콘솔의 시작하기 마법사](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)를 참조하세요.\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. Amazon IAM 액세스 키의 값을 저장하기 위해 GitHub Actions 및 `AWS_ACCESS_KEY_ID`라는 이름의 `AWS_SECRET_ACCESS_KEY` 시크릿을 생성합니다.\n\n   비밀을 만드는 방법에 대한 자세한 내용은 GitHub Actions을 [](/ko/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 환경에 배포되면 환경이 리포지토리의 기본 페이지에 표시됩니다. 환경을 사용하여 작업이 진행되기 전에 승인을 요구하거나, 워크플로를 트리거할 수 있는 분기를 제한하거나, 사용자 지정 배포 보호 규칙으로 배포를 제어하거나, 비밀 정보에 대한 액세스를 제한할 수 있습니다. 환경을 만드는 방법에 대한 자세한 내용은 [배포 환경 관리](/ko/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments)을(를) 참조하세요.\n\n## 워크플로 만들기\n\n필수 구성 요소를 완료한 후에는 워크플로 만들기를 진행할 수 있습니다.\n\n다음 예시 워크플로에서는 컨테이너 이미지를 빌드하여 Amazon ECR에 푸시하는 방법을 보여줍니다. 그런 다음 새 이미지 ID로 작업 정의를 업데이트하고 작업 정의를 Amazon ECS에 배포합니다.\n\n워크플로우의 `env` 키에 있는 모든 변수에 대해 고유한 값을 제공해야 합니다.\n\n배포 환경을 구성한 경우 환경의 이름으로 `environment` 값을 변경합니다. 환경을 구성하지 않은 경우 또는 워크플로가 프라이빗 리포지토리에 있고 GitHub Enterprise Cloud를 사용하지 않는 경우 `environment` 키를 삭제합니다.\n\n```yaml copy\n# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.\n# 작업은 타사에서 제공하며\n# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.\n# 참조하세요.\n\n# 커밋 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) 리포지토리의 `starter-workflows`을(를) 참조하세요.\n\n예시에서 사용된 서비스에 대한 자세한 내용은 다음 설명서를 참조하세요.\n\n* Amazon AWS 설명서의 [AM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)\n* 공식 AWS [AWS 자격 증명을 구성](https://github.com/aws-actions/configure-aws-credentials)하는 작업\n* 공식 AWS [Amazon ECR \"로그인\"](https://github.com/aws-actions/amazon-ecr-login) 액션.\n* 공식 AWS [Amazon ECS “렌더링 작업 정의”](https://github.com/aws-actions/amazon-ecs-render-task-definition) 작업.\n* 공식 AWS [Amazon ECS “작업 정의 배포”](https://github.com/aws-actions/amazon-ecs-deploy-task-definition) 작업."}