Учетные данные конфигурации без сервера не работают при наличии файла serverless.yml - PullRequest
0 голосов
/ 17 апреля 2020

Мы пытаемся развернуть нашу лямбду, используя безсерверный режим на конвейерах BitBucket, но у нас возникает проблема при запуске команды serverless config credentials. Эта проблема также возникает в docker контейнерах и локально на наших машинах.

Это команда, которую мы выполняем:

serverless config credentials --stage staging --provider aws --key $AWS_ACCESS_KEY --secret $AWS_ACCESS_SECRET

И она выдает нам ошибку:

Error: Profile default does not exist

Профиль определен в нашем файле serverless.yml. Если мы переименуем файл без сервера перед запуском команды, он сработает, а затем мы сможем вернуть файл serverless.yml обратно и успешно развернуть.

например

            - mv serverless.yml serverless.old
            - serverless config credentials --stage beta --provider aws --key $AWS_ACCESS_KEY --secret $AWS_ACCESS_SECRET
            - mv serverless.old serverless.yml

Мы попробовали добавив туда переключатель --profile default, но это не имеет значения.

Стоит отметить, что это не было проблемой, пока мы не начали использовать хранилище параметров SSM в файле без сервера, в тот момент, когда мы добавили, что , он начал выдавать нам ошибку Profile default does not exist.

serverless.yml (частично)

service: our-service

provider:
  name: aws
  runtime: nodejs12.x
  region: eu-west-1
  profile: default
  stage: ${opt:stage, 'dev'}

  iamRoleStatements:
    - Effect: 'Allow'
      Action: 'ssm:GetParameter'
      Resource:
        - 'arn:aws:ssm:eu-west-1:0000000000:parameter/our-service-launchdarkly-key-dev'
        - 'arn:aws:ssm:eu-west-1:0000000000:parameter/our-service-launchdarkly-key-beta'
        - 'arn:aws:ssm:eu-west-1:0000000000:parameter/our-service-launchdarkly-key-staging'
        - 'arn:aws:ssm:eu-west-1:0000000000:parameter/our-service-launchdarkly-key-live'
    - Effect: 'Allow'
      Action: 'kms:Decrypt'
      Resource:
        - 'arn:aws:kms:eu-west-1:0000000000:key/alias/aws/ssm'

  environment:
    LAUNCH_DARKLY_SDK_KEY: ${self:custom.launchDarklySdkKey.${self:provider.stage}}

custom:
  stages:
    - dev
    - beta
    - staging
    - live

  launchDarklySdkKey:
    dev: ${ssm:/our-service-launchdarkly-key-dev~true}
    beta: ${ssm:/our-service-launchdarkly-key-beta~true}
    staging: ${ssm:/our-service-launchdarkly-key-staging~true}
    live: ${ssm:/our-service-launchdarkly-key-live~true}

plugins:
  - serverless-offline
  - serverless-stage-manager

...

TLDR: только учетные данные конфигурации без сервера работает, когда serverless.yml отсутствует, в противном случае он жалуется на несуществующий профиль по умолчанию, только проблема при использовании SSM Param store в файле без сервера.

1 Ответ

1 голос
/ 19 апреля 2020

Атрибут profile в вашем serverless.yaml относится к сохраненным учетным данным в ~/.aws/credentials. Если в этом файле отсутствует запись [default], сервер не будет подавать жалобу. Я могу придумать 2 возможных решения этой проблемы:

  1. Попробуйте полностью удалить profile из serverless.yaml и использовать только переменные окружения.

  2. Оставьте profile: default в своем serverless.yaml, но установите учетные данные в ~/.aws/credentials следующим образом:

[default]
aws_access_key_id=***************
aws_secret_access_key=***************

Если вы go с # 2, у вас нет бежать serverless config credentials больше.

...