首页 > 解决方案 > 使用 AWS S3 和 CodePipeline 自动化 Angular 7 应用程序部署

问题描述

我在 AWS S3 存储桶上托管了一个 Angular 7 应用程序作为静态网站,现在想在我的 github 存储库更新时自动部署较新版本。

我希望新版本的文件替换 s3 存储桶中以前版本的文件。这就是我要做的事情

我有一个 buildspec 文件

version: 0.2

phases:
  install:
    commands:
      # install dependencies
      - echo Installng source NPM dependencies...
      - npm install npm@latest -g
      - npm install -g @angular/cli

  pre_build:
    commands:
      - echo Prebuild steps
      - npm install

  build:
    commandS:
      # build angular app
      - echo Build started on `date`
      - ng build

  post_build:
    commands:
      # clear S3 bucket
      - aws s3 rm s3://${S3_BUCKET} --recursive
      - echo S3 bucket cleared
      # copy files from dist folder into S3 bucket
      - aws s3 cp dist s3://${S3_BUCKET} --recursive
      - echo Build completed on `date`

当代码管道运行时,该过程在 post_build 失败,如此处的日志所示

[容器] 2019/04/11 10:33:49 运行命令 aws s3 rm s3://${S3_BUCKET} --recursive /usr/local/lib/python2.7/dist-packages/urllib3/util/ssl_。 py:354: SNIMissingWarning: 已发出 HTTPS 请求,但 TLS 的 SNI(服务器名称指示)扩展在此平台上不可用。这可能会导致服务器提供不正确的 TLS 证书,从而导致验证失败。您可以升级到更新版本的 Python 来解决这个问题。有关更多信息,请参阅https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings SNIMissingWarning 删除失败:s3://trips9ja-admin/3rdpartylicenses.txt 调用 DeleteObject 操作时发生错误(AccessDenied):访问拒绝删除失败:s3://trips9ja-admin/Trips9jaPipeline/SourceArti/FyvYEvb.zip 发生错误(AccessDenied) 调用DeleteObject 操作时:Access Denied 删除失败:s3://trips9ja-admin/assets/bus.png 调用DeleteObject 操作时发生错误(AccessDenied):Access Denied

这就是我卡住的地方。那么我做错了什么,错误是什么意思?

我有一个 S3 存储桶策略来允许像这样的代码构建访问

{
            "Sid": "CodeBuildPermision",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::735681810231:role/service-role/codebuild-service-role"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::<bucket name>"
        }

标签: angularamazon-web-servicesamazon-s3aws-codebuild

解决方案


通过向 S3 存储桶策略添加另一行来解决该问题,"Resource"该策略允许像这样访问存储桶的所有内容 "Resource": ["arn:aws:s3:::<bucket name>", "arn:aws:s3:::<bucket name>/*"]


推荐阅读