![](/img/trans.png)
[英]How can I connect an existing app in the AWS Amplify Console with the AWS Amplify CLI?
[英]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 init
、 amplify configure
和amplify pull
这样的命令需要大量的权限和大量的用户交互,即使已经配置了 AWS 配置文件(带有密钥和访问密钥)。
做这样的事情会很棒:
amplify deploy build.zip <APP-ARN>
或(如果是文件夹)
amplify deploy /build <APP-ARN>
本质上,我只想自动化我手动执行的操作:上传(压缩的)构建文件夹以部署我的 AWS Amplify 应用程序。 因此,这意味着没有用户交互。
这个怎么做?
您的解决方案是 git,aws amplify 能够观察 git 存储库并检测更改。 如果您设置为监视的分支发生更改,它将自动构建一个新版本。
您可以将其设置为仅构建前端或同时构建后端(放大)和前端。
创建 git 存储库。 您可以使用例如 github 或 aws codecommit
配置您的项目以发布到该 git 存储库
在 AWS Amplify 控制台中启动一个新应用程序或更改您现有的应用程序,以观看 git 存储库
将更改发布到 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.