是否可以在 lambda 的环境变量中使用 SSM 参数?

Is it possible to use SSM parameters in environment variables for a lambda?

我知道在 Cloudformation 中您可以使用 SSM 创建参数,但我真的想知道您是否可以在 lambda 的环境变量中使用 SSM。 我知道我可以放置 SSM 路径并在代码中使用 sdk 来获取这些值,但也许有一种方法可以自动实现,而无需从代码中获取值。

谢谢

您可以直接从参数存储中获取 CloudFormation 中的值,并使用动态引用将其作为环境变量传递给 lambda。

例如:

  ServerlessTestLambda:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src
      Handler: test-env-var.handler
      Role: !GetAtt BasicLambdaRole.Arn
      Environment:
        Variables:
          ParamStoreVar: "{{resolve:ssm:/test/ssmparam:3}}"
      Events:
        LambdaSchedule:
          Type: Schedule
          Properties:
            Schedule: rate(3 minutes)

这是我创建的用于测试的 lambda,如您所见,密钥的值将被环境变量替换 ParamStoreVar

注意 - 出于明显的安全原因,您不能替换环境变量中的 ssm securestring。

更多信息: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html

您也可以将其定义为参数,然后在您的模板中引用它。这样做的一个好处是您不必担心指定版本号。 (我可以想象,在某些情况下,人们可能会说“¿没有版本号是 优势?呸!”。)

Parameters:
  SomeParameter:
    Type: AWS::SSM::Parameter::Value<String>
    Default: '/path/to/my-param'

...

MyFunction:
  Type: AWS::Serverless::Function
  Properties:
    ...
    Environment:
      Variables:
        MY_ENVIRONMENT_VAR: !Ref SomeParameter

当您查看 CloudFormation 中的“参数”选项卡(在 AWS 控制台中)时,您现在只会看到键 SomeParameter 旁边的字符串“/path/to/my-param”;但是,当您查看 Lambda 函数(在环境变量部分)时,您会发现它已解析为名为 /path/to/my-param.

的参数存储的任何值。