3

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

谢谢

4

2 回答 2

6

You can directly fetch the values within CloudFormation from parameter store and pass it as an environment variable to the lambda using dynamic reference.

For example:

  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)

This is the lambda I created to test, and as you can see the value of the key would be replaced for the environment variable ParamStoreVar

Note - You cannot replace ssm securestring in the environment variable for obvious security reasons.

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

于 2019-05-08T12:18:58.483 回答
3

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

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 的参数存储的任何值。

于 2020-01-16T05:49:01.387 回答