我们正在尝试在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存储时出现的问题。
profile
中的serverless.yaml
属性是指~/.aws/credentials
中保存的凭据。如果该文件中没有[default]
条目,则无服务器将抱怨。我可以想到2种可能的解决方案:
尝试从profile
中完全删除serverless.yaml
,并且仅使用环境变量。
将profile: default
留在serverless.yaml
中,但是像这样在~/.aws/credentials
中设置凭据:
[default]
aws_access_key_id=***************
aws_secret_access_key=***************
如果您使用#2,则不必再运行serverless config credentials
。