Serveless Framework и CodeBuild: отсутствует обязательный ключ «Ведро» в параметрах

У меня возникают проблемы с получением AWS CodeBuild для сборки и развертывания проекта, созданного с использованием Serverless Framework.

Вот история до сих пор.

Инициализировать проект

Я следовал документам, чтобы создать основы Бессерверный проект так и оставили «как есть» — по сути, «Hello World».

Затем я поместил проект в репозиторий git.

Тестовое развертывание из CLI

Затем из командной строки я позвонил...

serverless deploy

... и, как и ожидалось, лямбда была развернута. Хорошее начало.

КодБилд

Следующим на повестке дня было попробовать сборку и развертывание с помощью 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, я определил проект сборки кода, который ссылается на репозиторий 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, поэтому я не очень уверен в редактировании политик.

person L G    schedule 21.07.2017    source источник
comment
Эта проблема с GitHub предполагает, что может потребоваться удалить стек и повторно развернуть его, поскольку у вас может быть несогласованный стек (из-за исходных ошибок разрешений).   -  person Unsigned    schedule 21.07.2017


Ответы (2)


@Unsigned - Спасибо за комментарий.

Хотя ваша рекомендация удалить и повторно развернуть не сработала, опубликованная вами ссылка упоминала о наличии привилегии S3.

Я добавил полный доступ к S3 в свою роль сборки кода, и это сработало.

person L G    schedule 11.08.2017

Я решил эту проблему, добавив (отредактировав) stage: prod в serverless.yml.

наконец, это выглядит так.

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