当存在serverless.yml文件时,无服务器配置凭据不起作用

问题描述 投票:0回答:1

我们正在尝试在BitBucket管道上使用无服务器部署lambda,但是在运行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存储时出现的问题。

aws-lambda serverless bitbucket-pipelines
1个回答
1
投票

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=***************

如果您使用#2,则不必再运行serverless config credentials

© www.soinside.com 2019 - 2024. All rights reserved.