View a markdown version of this page

GitHub Actions を使用した Elastic Beanstalk へのデプロイ - AWS Elastic Beanstalk

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

GitHub Actions を使用した 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 が引き受けCodeBuildServiceRoleる やビルドタイプなど、ソースからイメージを構築する方法を Elastic Beanstalk に指示する 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 クラスター環境は Amazon EKS クラスターをプロビジョニングします。これには 15~20 分かかります。同じサブネット上のそれ以降の環境はクラスターを再利用し、数分でデプロイします。

必要なアクセス許可、build-configuration例、入力の完全なリスト、および両方の環境タイプに関するその他の設定オプションについては、GitHub の「Elastic Beanstalk Deploy action README」を参照してください。

その他のリソース