如何使用无服务器框架通过 AWS Lambda 函数环境变量访问 SSM 参数存储值?

Bra*_*ler 6 amazon-web-services node.js aws-lambda serverless-framework aws-parameter-store

所以我配置了 lambda 函数的 .yaml 文件,如下所示:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
  NewUser:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: NewUser/index.handler
      Runtime: nodejs8.10
      Environment:
        Variables:
          database_encrypt: ${ssm:databaseEncrypt}
          database_password: ${ssm:databasePassword}
          database_server: '8.8.8.8'
          database_user: ${ssm:databaseUser}
          database_version: ${ssm:databaseVersion}
      Description: ''
      MemorySize: 128
      Timeout: 15
      Role: 'arn:aws:iam::663404525923:role/LambdaRole'
      Events:
        LambdaMicroservice:
          Type: Api
          Properties:
            Path: /User/NewUser
            Method: ANY
Run Code Online (Sandbox Code Playgroud)

我的 lambda 函数如下所示:

var config = {  
  user: process.env.database_user,  
  password: process.env.database_password,  
  server: process.env.database_server,
  database: process.env.database_version,
  options: {encrypt: true}  
};

class UserService {

    constructor(){
        console.log(config);
        console.log("test test test");
        this.connectionPool = new sql.connect(config);
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以很好地访问硬编码的database_server值,但${ssm: [myParam] }命令被解释为字符串,而不是遵循路径并访问存储在 SSM 参数存储中的值。

我看到的大多数示例都有很长的复杂路径来指向其 SSM 参数,但由于我只是想表明可以通过这种方式访问​​ SSM 参数,因此我试图使其尽可能简单。我还假设${ssm: [] }命令根本没有转义,因为如果在定义的路径中找不到 SSM Param,我希望返回未定义的值。

Set*_*h E 3

SAM 是 CloudFormation 的超集,因此 CloudFormation 命令应该可以工作

      Environment:
        Variables:
          database_encrypt: '{{resolve:ssm-secure:databaseEncrypt:1}}' 
          database_password: '{{resolve:ssm-secure:databasePassword:1}}' 
Run Code Online (Sandbox Code Playgroud)

请参阅https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html