View a markdown version of this page

GitHub 작업을 사용하여 Elastic Beanstalk에 배포 - AWS Elastic Beanstalk

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

GitHub 작업을 사용하여 Elastic Beanstalk에 배포

GitHub Actions는 코드 변경 사항을 리포지토리에 푸시할 때 애플리케이션을 Elastic Beanstalk에 자동으로 배포할 수 있습니다. Elastic Beanstalk Deploy 작업은 애플리케이션 버전 생성 및 Elastic Beanstalk 환경에 배포를 처리하는 간단한 YAML 인터페이스를 제공합니다. 작업을 Elastic Beanstalk 환경 유형과 함께 사용할 수 있습니다. Beanstalk Standard 환경의 경우 작업은 리포지토리를 소스 번들로 패키징하고 Amazon S3에 업로드합니다. Beanstalk 클러스터 환경의 경우 작업은 워크플로가 이미 빌드한 이미지 또는 Elastic Beanstalk가 소스에서 빌드한 이미지 등 컨테이너 이미지에서 애플리케이션 버전을 생성합니다. 설정한 입력은 환경 유형을 선택합니다.

워크플로 예제: Beanstalk Standard 환경

다음 예제 워크플로는 main브랜치로 푸시할 때마다 애플리케이션을 Beanstalk Standard 환경에 배포합니다. 의 리포지토리에 .yml 파일을 생성합니다.github/workflows/. 이 작업은 환경이 없는 경우 환경을 생성합니다. 이 경우 solution-stack-name (또는 platform-arn)는 플랫폼을 선택하고에 설명된 인스턴스 프로파일과 서비스 역할을 제공해야 option-settings 합니다Elastic Beanstalk 서비스 역할, 인스턴스 프로파일, 사용자 정책. 환경이 이미 존재하는 경우 이러한 입력은 선택 사항입니다.

예 Beanstalk Standard 환경에 대한 GitHub Actions 워크플로
name: Deploy to Elastic Beanstalk on: push: branches: - main permissions: id-token: write contents: read jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::123456789012:role/my-github-actions-role aws-region: us-east-1 - name: Deploy to Elastic Beanstalk uses: aws-actions/aws-elasticbeanstalk-deploy@v1 with: aws-region: us-east-1 application-name: my-application environment-name: my-application-env solution-stack-name: '64bit Amazon Linux 2023 v4.10.0 running Go 1' option-settings: | [ { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "IamInstanceProfile", "Value": "aws-elasticbeanstalk-ec2-role" }, { "Namespace": "aws:elasticbeanstalk:environment", "OptionName": "ServiceRole", "Value": "aws-elasticbeanstalk-service-role" } ]

이 워크플로는 리포지토리를 확인하고, OpenID Connect(OIDC)를 사용하여 자격 증명 구성 AWS 작업을 AWS 통해를 인증한 다음 애플리케이션을 Elastic Beanstalk에 배포합니다. 배포 작업은 리포지토리 콘텐츠를 패키징하고, 소스 번들을 Amazon S3에 업로드하고, 새 애플리케이션 버전을 생성하고, 환경을 생성하거나 업데이트합니다. 기본적으로 배포가 완료되고 환경이 정상 상태로 돌아갈 때까지 기다립니다.

워크플로 예제: Beanstalk 클러스터 환경

Beanstalk 클러스터 환경은 컨테이너 이미지를 실행하므로 소스 번들 자체는 컨테이너 이미지에 배포할 수 없습니다. Beanstalk 클러스터 환경에 배포하려면 솔루션 스택 또는 플랫폼 ARN 대신 다음 입력 중 하나를 설정합니다.

  • image-uri - 워크플로가 이미 빌드하고 Amazon Elastic Container Registry(Amazon ECR)와 같은 레지스트리로 푸시한 컨테이너 이미지의 URI입니다. 작업은 이미지에서 직접 애플리케이션 버전을 생성하고 소스 번들을 Amazon S3에 업로드하지 않습니다.

  • build-configuration - AWS CodeBuild가 수임하는 및 빌드 유형을 포함하여 소스에서 이미지를 빌드하는 방법을 Elastic Beanstalk에 알려주CodeBuildServiceRole는 JSON 객체입니다. 작업은 소스 번들을 Amazon S3에 업로드하고, 빌드 구성으로 애플리케이션 버전을 생성하고, 배포 전에 빌드가 완료될 때까지 기다립니다. 빌드 설정은 섹션을 참조하세요Beanstalk 클러스터 환경을 위한 컨테이너 이미지 빌드.

다음 예제 워크플로는 이미지를 빌드하고 Amazon ECR로 푸시한 다음 Beanstalk 클러스터 환경에 배포합니다. 이 작업은 환경이 없는 경우 환경을 생성합니다. 이 경우 option-settings는에 설명된 클러스터, 노드 및 관찰성 역할을 제공해야 Beanstalk 클러스터에 대한 권한하며 GitHub Actions가 수임하는 역할은 이를 전달할 수 있어야 합니다.

예 Beanstalk 클러스터 환경에 대한 GitHub Actions 워크플로
name: Deploy to Elastic Beanstalk on: push: branches: - main permissions: id-token: write contents: read jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::123456789012:role/my-github-actions-role aws-region: us-east-1 - name: Login to Amazon ECR id: ecr uses: aws-actions/amazon-ecr-login@v2 - name: Build and push container image run: | docker build --platform linux/amd64 -t ${{ steps.ecr.outputs.registry }}/my-app:${{ github.sha }} . docker push ${{ steps.ecr.outputs.registry }}/my-app:${{ github.sha }} - name: Deploy to Elastic Beanstalk uses: aws-actions/aws-elasticbeanstalk-deploy@v1 with: aws-region: us-east-1 application-name: my-cluster-app environment-name: my-cluster-env image-uri: ${{ steps.ecr.outputs.registry }}/my-app:${{ github.sha }} option-settings: | [ { "Namespace": "aws:elasticbeanstalk:eks", "OptionName": "cluster-role", "Value": "${{ secrets.CLUSTER_ROLE_ARN }}" }, { "Namespace": "aws:elasticbeanstalk:eks", "OptionName": "node-role", "Value": "${{ secrets.NODE_ROLE_ARN }}" }, { "Namespace": "aws:elasticbeanstalk:eks:environment", "OptionName": "observability-role", "Value": "${{ secrets.OBSERVABILITY_ROLE_ARN }}" } ]

image-uri 또는를 설정하면 deployment-timeout 입력의 기본값build-configuration은 900초가 아닌 2400초입니다. 서브넷 세트의 첫 번째 Beanstalk 클러스터 환경은 15~20분이 걸리는 Amazon EKS 클러스터를 프로비저닝합니다. 이후 동일한 서브넷의 환경은 클러스터를 재사용하고 몇 분 내에 배포합니다.

필요한 권한, build-configuration 예제, 전체 입력 목록 및 두 환경 유형에 대한 추가 구성 옵션은 GitHub의 Elastic Beanstalk Deploy 작업 README를 참조하세요.

추가 리소스