无服务器框架和 CodeBuild:参数中缺少必需的键 'Bucket'
Serveless Framework and CodeBuild : Missing required key 'Bucket' in params
我在让 AWS CodeBuild 构建和部署使用 Serverless Framework 创建的项目时遇到问题。
这是目前的故事。
初始化项目
我已经按照 docs 开始创建无服务器项目并离开 "as is" - 基本上,"Hello World"。
然后我将该项目放入 git 存储库。
从 CLI 测试部署
然后,我从 CLI 调用了...
serverless deploy
...正如预期的那样,lambda 已部署。一个好的开始。
CodeBuild
接下来的议程是尝试使用 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 Console/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 项目上按 "Start Build" 并得到以下错误:
错误一:
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/*
我 "fixed" 通过将以下内容添加到代码构建创建的策略中...
{
"Effect": "Allow",
"Resource": [
"arn:aws:cloudformation:eu-west-1:*"
],
"Action": [
"cloudformation:*"
]
}
错误2:
再次按下 Start Build 得到:
An error occurred while provisioning your stack: ServerlessDeploymentBucket - API: s3:CreateBucket Access Denied.
我 "fixed" 通过将以下内容添加到代码构建创建的策略中...
{
"Effect": "Allow",
"Resource": [
"arn:aws:cloudformation:eu-west-1:*"
],
"Action": [
"cloudformation:*"
]
}
错误3:
Serverless Error ---------------------------------------
Missing required key 'Bucket' in params
最后:我的实际问题
Missing required key 'Bucket' in params
是什么意思?我应该看哪里?
- 我的 "fixes" 错误 1 和 2 可以吗?我有点 AWS,因此是 IAM 新手,所以我在编辑策略时没有那么自信。
@Unsigned - 感谢您的评论。
虽然您关于删除和重新部署的建议没有奏效,但您发布的 link 确实提到了拥有 S3 权限。
我为我的代码构建角色添加了完整的 S3 访问权限,结果成功了。
我通过将 stage: prod
添加(编辑)到 serverless.yml.
中解决了这个问题
最后是这个样子
provider:
name: aws
runtime: python3.6
stage: prod
credentials:
accessKeyId: <your-access-id>
secretAccessKey: <your-secret-access-key>
我在让 AWS CodeBuild 构建和部署使用 Serverless Framework 创建的项目时遇到问题。
这是目前的故事。
初始化项目
我已经按照 docs 开始创建无服务器项目并离开 "as is" - 基本上,"Hello World"。
然后我将该项目放入 git 存储库。
从 CLI 测试部署
然后,我从 CLI 调用了...
serverless deploy
...正如预期的那样,lambda 已部署。一个好的开始。
CodeBuild
接下来的议程是尝试使用 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 Console/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 项目上按 "Start Build" 并得到以下错误:
错误一:
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/*
我 "fixed" 通过将以下内容添加到代码构建创建的策略中...
{
"Effect": "Allow",
"Resource": [
"arn:aws:cloudformation:eu-west-1:*"
],
"Action": [
"cloudformation:*"
]
}
错误2:
再次按下 Start Build 得到:
An error occurred while provisioning your stack: ServerlessDeploymentBucket - API: s3:CreateBucket Access Denied.
我 "fixed" 通过将以下内容添加到代码构建创建的策略中...
{
"Effect": "Allow",
"Resource": [
"arn:aws:cloudformation:eu-west-1:*"
],
"Action": [
"cloudformation:*"
]
}
错误3:
Serverless Error ---------------------------------------
Missing required key 'Bucket' in params
最后:我的实际问题
Missing required key 'Bucket' in params
是什么意思?我应该看哪里?- 我的 "fixes" 错误 1 和 2 可以吗?我有点 AWS,因此是 IAM 新手,所以我在编辑策略时没有那么自信。
@Unsigned - 感谢您的评论。
虽然您关于删除和重新部署的建议没有奏效,但您发布的 link 确实提到了拥有 S3 权限。
我为我的代码构建角色添加了完整的 S3 访问权限,结果成功了。
我通过将 stage: prod
添加(编辑)到 serverless.yml.
最后是这个样子
provider:
name: aws
runtime: python3.6
stage: prod
credentials:
accessKeyId: <your-access-id>
secretAccessKey: <your-secret-access-key>