【问题标题】:How to access SSM Parameter Store Values through AWS Lambda Function Environment Variables using Serverless Framework?如何使用无服务器框架通过 AWS Lambda 函数环境变量访问 SSM 参数存储值?
【发布时间】:2020-02-20 05:32:57
【问题描述】:

所以我已经像这样配置了我的 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

我的 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);
    }
}

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

我看到的大多数示例都有很长的复杂路径来指向它们的 SSM 参数,但由于我只是想表明完全可以以这种方式访问​​ SSM 参数,所以我试图让它保持简单尽可能。我还假设 ${ssm: [] } 命令根本没有转义,因为如果没有找到 SSM 参数,我希望返回一个 undefined 值在定义的路径上。

【问题讨论】:

  • 请注意,这不是无服务器框架模板,它是 AWS SAM 模板...如果您正在阅读无服务器文档,那么阅读 SAM 文档可能会有所帮助。
  • 所以我不确定无服务器框架和 SAM 之间的区别是什么?我们应该转向无服务器,所以也许我们是小写的无服务器而不是无服务器™?
  • SAM 会阻止我做我想做的事吗?
  • 两者都是用于构建无服务器应用程序的开源框架。 SAM 代表“无服务器应用程序模型”,这是 Amazon 特有的,您可以在此处阅读更多信息 aws.amazon.com/serverless/sam。 Serverless Framework 独立于平台,支持许多不同的提供者;您可以在serverless.com 了解更多信息
  • 那么如果 ${ssm: [paramName] } 是 Serverless™ 方法,那么使用 SAM 访问 SSM 参数的命令是什么?

标签: node.js amazon-web-services aws-lambda serverless-framework aws-parameter-store


【解决方案1】:

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

      Environment:
        Variables:
          database_encrypt: '{{resolve:ssm-secure:databaseEncrypt:1}}' 
          database_password: '{{resolve:ssm-secure:databasePassword:1}}' 

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

【讨论】:

  • AWS::Lambda::Function 似乎不支持 SSM 安全参考,还是我遗漏了什么?
  • 正确,secure 参数不受 CloudFormation 支持 - 也许考虑使用 Secrets manager? aws.amazon.com/blogs/aws/…
猜你喜欢
  • 2019-06-18
  • 2021-03-20
  • 2018-07-26
  • 2019-06-19
  • 2019-10-08
  • 2021-05-09
  • 1970-01-01
  • 2016-05-17
  • 2019-07-23
相关资源
最近更新 更多