amazon-web-services - 为 AWS SAM 应用程序创建 CodePipeline、部署阶段时出现问题
问题描述
我为我的 AWS SAM 应用程序创建了一个有效的 CodePipeline。它仅使用带有以下文件的Source和Build阶段buildspec.yaml
version: 0.2
phases:
install:
runtime-versions:
python: 3.7
commands:
- pip install --user aws-sam-cli
- USER_BASE_PATH=$(python -m site --user-base)
- export PATH=$PATH:$USER_BASE_PATH/bin
build:
commands:
- sam build
post_build:
commands:
sam package --s3-bucket deploy-bucket --output-template-file deployment.yaml
# finally:
# sam deploy --template-file deployment.yaml --stack-name MyStackSAM--region us-east-1 --capabilities CAPABILITY_IAM
如您所见,我已注释掉最后两行,因为我想将该操作移至CodePipeline中的部署阶段
我的部署步骤如下所示:
我CloudFormationPipelineServiceRole
在这一点上拥有完全的管理员权限,而且我仍然收到以下错误作为执行此阶段的结果。
Action execution failed
Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XXXXFFFFFXXXX; S3 Extended Request ID: XXXXFFFFFXXXXFFFFFXXXXX=)
我对为什么会收到此错误感到困惑。任何帮助将不胜感激。
解决方案
首先,sam package
期望需要通过--template-file
标志传递的源模板文件。我在您的代码中的任何地方都看不到该模板文件。您要打包哪个模板文件?
其次,您没有将必要的工件上传到 s3 存储桶。您上传的唯一内容是压缩代码,但正如您从已注释掉的命令中看到的那样:
sam deploy --template-file deployment.yaml --stack-name MyStackSAM--region us-east-1 --capabilities CAPABILITY_IAM
你也需要这个文件deployment.yaml
,但你没有在你的代码中指定它。CodeBuild 无法猜测您要保留哪些工件。
您需要在artifacts
构建规范文件的底部添加额外的部分并指定这些工件。
artifacts:
type: zip
files:
- template.yaml # (where do you have this file?)
- outputtemplate.yaml # (deployment.yaml in your case)
请注意,该artifacts
部分需要与version
和phases
version: 0.2
phases:
...
artifacts:
...
推荐阅读
- android - 向其他 Android 应用程序公开二进制文件
- javascript - 检查元素是否在视口中
- c++ - `stack_chk_fail` 未定义的原因是什么?
- postgresql - Docker for desktop - kubernetes - postgres 本地客户端
- javascript - 在反应中输出嵌套列表
- javascript - 分解函数的最佳方法 - JavaScript
- python-3.x - 将变量从一个 python 线程发送到另一个
- django - 带有Angular的Django - 当字体和背面具有不同的url时的相对路径
- vim - 如何在 vim 中只复制 () 中的一个单词?
- sapui5 - ES Module (.mjs) 格式的 UI5 控制器