我已经为我的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中的 Deploy 阶段
,所以我已经注释掉了最后两行。我的部署步骤如下:
目前,我的CloudFormationPipelineServiceRole
具有完全的管理员权限,尽管如此,执行此阶段仍然会导致以下错误。
Action execution failed
Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XXXXFFFFFXXXX; S3 Extended Request ID: XXXXFFFFFXXXXFFFFFXXXXX=)
我对为什么会收到此错误感到困惑。任何帮助将不胜感激。
答案 0 :(得分:2)
首先,sam package
期望需要通过--template-file
标志传递的源模板文件。我在代码的任何地方都看不到该模板文件。您要打包哪个模板文件?
第二,您没有将必要的工件上传到s3存储桶。您要上传的唯一内容是压缩代码,但是从已注释掉的命令中可以看到:
sam deploy --template-file deployment.yaml --stack-name MyStackSAM--region us-east-1 --capabilities CAPABILITY_IAM
您还需要此文件deployment.yaml
,但未在代码中指定。 CodeBuild无法猜测要保留哪些工件。
您将需要在buildspec文件的底部添加其他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:
...