当我们使用AWS sam cli本地调用lambda函数时,可能会遇到使用secrets manager时端口未定义的问题。这时可以在SAM的template.yaml文件中添加以下代码:
Resources:
MyLambdaFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs14.x
CodeUri: .
Environment:
Variables:
NODE_ENV: test
SECRET_ID: !Ref MySecretID
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
MySecretID:
Type: AWS::SecretsManager::Secret
Properties:
Description: My secret.
GenerateSecretString:
SecretStringTemplate: "{\"username\":\"\",\"password\":\"\"}"
GenerateStringKey: password
PasswordLength: 16
ExcludeCharacters: \"{}[]\\\"/\":;!@#$%^&*()+=`~|'<>?\"
在其中,我们添加了一个名为MySecretID的AWS::SecretsManager::Secret和一个名为SECRET_ID的环境变量。在代码中,我们可以使用这个环境变量来访问secrets manager中存储的密码。
我们还需要在Lambda函数的代码中使用以下代码来获取secrets manager中存储的密码:
const SecretsManager = require('aws-sdk/clients/secretsmanager');
const client = new SecretsManager({ region: process.env.AWS_REGION });
...
const secretValue = await client.getSecretValue({ SecretId: process.env.SECRET_ID }).promise();
const dbPassword = JSON.parse(secretValue.SecretString).password;
这样,我们就能够在AWS sam cli本地调用lambda函数时,使用secrets manager并避免端口未定义的问题。
上一篇:AWSSAMCLI1.21升级后导致samlocalinvoke失败
下一篇:AWSSAMCLI部署-解析“OutoftheBox”秘密时出现问题,需要使用“get_secret_value_response['SecretString']”。