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

Aws lambda 是否可以在lambda的环境变量中使用SSM参数?,aws-lambda,amazon-cloudformation,ssm,aws-ssm,Aws Lambda,Amazon Cloudformation,Ssm,Aws Ssm,我知道在Cloudformation中可以使用SSM创建参数,但我真的想知道是否可以在lambda的环境变量中使用SSM。 我知道我可以在代码中放置SSM路径并使用sdk来获取这些值,但也许有一种方法可以自动实现,而无需从代码中获取值 感谢您可以直接从参数存储中获取CloudFormation中的值,并使用动态引用将其作为环境变量传递给lambda 例如: ServerlessTestLambda: Type: AWS::Serverless::Function Proper

我知道在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

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

参数:
某些参数:
类型:AWS::SSM::参数::值
默认值:'/path/to/my param'
...
我的职能:
类型:AWS::Serverless::Function
特性:
...
环境:
变量:
我的_环境_变量:!Ref SomeParameter

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

安全字符串呢?我收到错误“失败。原因:[AWS::Lambda::Function/Properties/Environment/Variables/API_KEY]中不支持SSM安全引用”我已经在回答您的问题时添加了一条说明,ssm secure不支持明显的安全问题。对于安全ssm,您需要在lambdaYou中解决它可以加密环境变量:ttps://docs.aws.amazon.com/whitepapers/latest/kms-best-practices/encrypting-lambda-environment-variables.htmlwhat 如果SSM参数的值在创建CFT后修改eter?因为您没有指定参数值的版本,它引用的是哪个版本?
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