【问题标题】:Serveless Framework and CodeBuild : Missing required key 'Bucket' in params无服务器框架和 CodeBuild:参数中缺少必需的键“桶”
【发布时间】:2018-03-16 01:09:49
【问题描述】:

我在让 AWS CodeBuild 构建和部署使用 Serverless Framework 创建的项目时遇到问题。

这是迄今为止的故事。

初始化项目

我已经按照docs 创建了一个无服务器项目的开端,然后“按原样”离开——基本上是“Hello World”。

然后我将项目放入 git repo 中。

从 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:

再次按下 Start Build 并得到:

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 新手,所以我在编辑策略时没有那么自信。

【问题讨论】:

  • This GitHub issue 似乎暗示可能需要删除堆栈并重新部署,因为您的堆栈可能不一致(由于原始权限错误。)

标签: amazon-iam serverless-framework aws-codebuild


【解决方案1】:

@Unsigned - 感谢您的评论。

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

我为我的代码构建角色和 k'boom 添加了完全 S3 访问权限。

【讨论】:

    【解决方案2】:

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

    最后,它看起来像这样。

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

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 2021-09-04
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      相关资源
      最近更新 更多