繁体   English   中英

如何在没有用户交互的情况下使用 AWS/Amplify CLI 部署现有 Amplify 应用程序的新版本?

[英]How can I deploy a new version of an existing Amplify app using the AWS/Amplify CLI without user interaction?

我是使用 AWS Amplify 的新手,我刚刚发布了自己的前端 WebApp,它是用 React 开发的。 我只是压缩了我的构建文件夹并将生成的 zip 文件放到 AWS 控制台中。 它工作正常。

在此处输入图像描述

但是,这项工作是手动完成的,我想自动化。 我有 CI&CD 服务器,而不是 AWS 中的服务器,这些服务器在我的其他服务中运行良好。 所以我需要一个脚本来自动化我刚刚做的事情,因为我想重用我现有的 CI&CD 服务器。 拥有这样的脚本将非常有用,因为我可以在本地或在 docker 容器中重现这些步骤。

我知道有一个解决方案:放大 CLI。 然而,像amplify initamplify configureamplify pull这样的命令需要大量的权限和大量的用户交互,即使已经配置了 AWS 配置文件(带有密钥和访问密钥)。

做这样的事情会很棒:

amplify deploy build.zip <APP-ARN>

或(如果是文件夹)

amplify deploy /build <APP-ARN>

本质上,我只想自动化我手动执行的操作:上传(压缩的)构建文件夹以部署我的 AWS Amplify 应用程序。 因此,这意味着没有用户交互。

这个怎么做?

您的解决方案是 git,aws amplify 能够观察 git 存储库并检测更改。 如果您设置为监视的分支发生更改,它将自动构建一个新版本。

您可以将其设置为仅构建前端或同时构建后端(放大)和前端。

  1. 创建 git 存储库。 您可以使用例如 github 或 aws codecommit

  2. 配置您的项目以发布到该 git 存储库

  3. 在 AWS Amplify 控制台中启动一个新应用程序或更改您现有的应用程序,以观看 git 存储库

  4. 将更改发布到 git 存储库并在放大控制台中观察它会自动构建您的应用程序的新版本

我对 AWS 和 Amplify 很陌生,但我认为包括 CI/CD 在内的设计理念是使用新的 Amplify 安装启动一个新的计算实例,并让负载均衡器在停止过时的实例后进行整理。 这允许更容易的回滚等。

您可以使用 AWS CLI 实现您想要做的事情。 如果您在 CI/CD 管道中配置了 AWS CLI,则可以使用命令 'start-deployment.

aws amplify start-deployment --app-id <value> --branch-name <value> --source-url <value>

在上述命令中,使用 --source-url 参数指定 URL,Amplify 可以从中下载 zip 文件(此 URL 应该可以公开访问)。 运行上述命令后,您应该能够在 Amplify 控制台屏幕上看到部署。

您也可以使用 create-deployment 和 start-deployment 命令实现相同的目的。 使用这种方法,首先,您可以在 create-deployment 命令中传递 zip 文件,其次,在 start-deployment 命令期间,您不必使用 --source-url 参数。 当使用 web UI 手动上传 zip 时,您可以在开发人员工具的“网络”选项卡中看到这些命令被调用。

我已经尝试过使用 Node Package Manager (npm) 的示例 React 应用程序,如下所示。 使用 github 工作流程实现如下

name: CI-CD-Pipeline-to-AWS-Amplify-Manual-Deployment
env:
  AMPLIFY_PACKAGE_S3_BUCKET_NAME: "amplify-manual-deploy-trail"
  AWS_REGION: "us-west-2"
  APP_ID: "ABC123xyz" 
  PACKAGE_NAME: "build"
 
on:
  push:
    branches: ["main"]
jobs:
  ci-pipeline:
    runs-on: [ubuntu-latest]
    steps:      
      - uses: actions/checkout@v3
      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 16
      - run: npm ci
      - run: npm run build --if-present
    
      - name: Create Zip Deployment Package
        run: cd build && zip -r $PACKAGE_NAME * -x *.git*


      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.SECRET_ACCESS_KEY }}
          aws-region: $AWS_REGION

      - name: Copy Deployment Package to AWS S3
        run: |
          cd build && \
          aws s3 cp $PACKAGE_NAME s3://$AMPLIFY_PACKAGE_S3_BUCKET_NAME

  cd-pipeline:
    runs-on: ubuntu-latest
    needs: [ci-pipeline]
    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.SECRET_ACCESS_KEY }}
          aws-region: $AWS_REGION
     
      - name: Deploy the new application version
        run: |
          aws amplify start-deployment \
            --app-id $APP_ID \
            --branch-name manual \
            --source-url s3://$AMPLIFY_PACKAGE_S3_BUCKET_NAME/$PACKAGE_NAME.zip 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM