Serveless Framework 和 CodeBuild :参数中缺少必需的键'Bucket'



我在获取 AWS CodeBuild 以构建和部署使用无服务器框架创建的项目时遇到问题。

这是到目前为止的故事。

初始化项目

我按照文档创建了无服务器项目的开始,并"按原样"保留 - 基本上是"Hello World"。

然后,我将该项目放在 git 存储库中。

从 CLI 测试部署

然后,从 CLI 中,我打电话给...

serverless deploy

。正如预期的那样,Lambda 已经部署。一个良好的开端。

代码构建

接下来的议程是尝试使用 AWS CodeBuild 进行构建和部署。

我在项目的根目录中添加了一个buildspec.yml文件:

version: 0.1
phases:
install:
commands:
- npm install
- npm install -g serverless
- echo install done
build:
commands:
- serverless deploy
- echo build done

然后,使用 AWS 控制台/Web 界面,我定义了一个引用 git 存储库的代码构建项目。

执行此操作时,AWS 使用以下策略创建了 IAM 角色:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"arn:aws:logs:eu-west-1:************:log-group:/aws/codebuild/my-api-build",
"arn:aws:logs:eu-west-1:************:log-group:/aws/codebuild/my-api-build:*"
],
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
},
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::codepipeline-eu-west-1-*"
],
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion"
]
},
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-api-artifacts/*"
],
"Action": [
"s3:PutObject"
]
}
]
}

让我们这样做...

所以我在CodeBuild项目上按了"开始构建",并得到以下错误:

错误 1:

ServerlessError: User: arn:aws:sts::************:assumed-role/codebuild-my-api-build-service-role/AWSCodeBuild-********-****-****-****-************ is not authorized to perform: cloudformation:DescribeStackResources on resource: arn:aws:cloudformation:eu-west-1:************:stack/my-api-development/*

我通过将以下内容添加到代码构建创建的策略中来"修复"它......

{
"Effect": "Allow",
"Resource": [
"arn:aws:cloudformation:eu-west-1:*"
],
"Action": [
"cloudformation:*"
]
}

错误 2:

再次按下开始构建并得到:

An error occurred while provisioning your stack: ServerlessDeploymentBucket - API: s3:CreateBucket Access Denied.

我通过将以下内容添加到代码构建创建的策略中来"修复"它......

{
"Effect": "Allow",
"Resource": [
"arn:aws:cloudformation:eu-west-1:*"
],
"Action": [
"cloudformation:*"
]
}

错误 3:

Serverless Error ---------------------------------------

Missing required key 'Bucket' in params

最后:我的实际问题

  1. Missing required key 'Bucket' in params是什么意思? 我应该在哪里寻找?
  2. 我对错误 1 和 2 的"修复"正常吗?我有点像 AWS,因此是 IAM 新手,所以我在编辑策略时没有那么自信。

@Unsigned - 感谢您的评论。

尽管您删除和重新部署的建议不起作用,但您发布的链接确实提到了拥有 S3 权限。

我将完全 S3 访问权限添加到我的代码构建角色和 k'boom,它奏效了。

我通过将stage: prod添加(编辑(到serverless.yml中解决了这个问题。

最后,它看起来像这样。

provider:
name: aws
runtime: python3.6
stage: prod
credentials:
accessKeyId: <your-access-id>
secretAccessKey: <your-secret-access-key>

最新更新