View a markdown version of this page

使用 GitHub 操作部署到 Elastic Beanstalk - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 GitHub 操作部署到 Elastic Beanstalk

GitHub 当您将代码更改推送到存储库时,Actions 可以自动将您的应用程序部署到 Elastic Beanstalk。E lastic Beanstalk Deploy 操作提供了一个简单的 YAML 接口,用于创建应用程序版本并将其部署到您的 Elastic Beanstalk 环境中。您可以在任一 Elastic Beanstalk 环境类型中使用该操作。对于 Beanstalk 标准环境,该操作会将您的存储库打包到源包中并将其上传到 Amazon S3。对于 Beanstalk 集群环境,该操作将改为使用容器镜像创建应用程序版本,容器镜像要么是您的工作流程已经构建的镜像,要么是 Elastic Beanstalk 根据您的源代码构建的镜像。您设置的输入选择环境类型。

示例工作流程:Beanstalk 标准环境

以下示例工作流程会在您每次推送到分支时将应用程序部署到 Beanstalk 标准环境中。main在您的存储库下创建.yml文件.github/workflows/。如果环境不存在,该操作会创建环境。在这种情况下,solution-stack-name(或platform-arn)选择平台,并且option-settings必须提供中描述的实例配置文件和服务角色Elastic Beanstalk 服务角色、实例配置文件和用户策略。当环境已经存在时,这些输入是可选的。

例 GitHub Beanstalk 标准环境的操作工作流程
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 ECR))的容器映像的 URI。该操作直接从图像创建应用程序版本,不会将源包上传到 Amazon S3。

  • build-configuration— 一个 JSON 对象,它告诉 Elastic Beanstalk 如何从您的源代码构建镜像,包括 AWS CodeBuild 假定图像和构建类型。CodeBuildServiceRole该操作会将您的源包上传到 Amazon S3,使用构建配置创建应用程序版本,并等待构建完成后再部署。有关编译设置,请参阅为 Beanstalk 集群环境构建容器镜像。

以下示例工作流程构建镜像,将其推送到 Amazon ECR,然后将其部署到 Beanstalk 集群环境中。如果环境不存在,该操作会创建环境。在这种情况下,option-settings必须提供中描述的集群、节点和可观察性角色Beanstalk 集群的权限,并且必须允许 Act GitHub ions 承担的角色传递这些角色。

例 GitHub Beanstalk 集群环境的操作工作流程
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或build-configuration时,deployment-timeout输入默认为 2400 秒,而不是 900 秒。一组子网上的第一个 Beanstalk 集群环境提供 Amazon EKS 集群,这需要 15—20 分钟;相同子网上的后续环境会重复使用该集群并在几分钟内完成部署。

有关两种环境类型的所需权限、build-configuration示例、完整的输入列表以及更多配置选项,请参阅 E lastic Beanstalk Deploy 操作自述文件。 GitHub

其他资源