我知道在 Cloudformation 中您可以使用 SSM 创建参数,但我真的很想知道您是否可以在环境变量中使用 SSM 作为 lambda。我知道我可以放置 SSM 路径并在代码中使用 sdk 来获取这些值,但也许有一种方法可以自动实现,而无需从代码中获取值。
谢谢
我知道在 Cloudformation 中您可以使用 SSM 创建参数,但我真的很想知道您是否可以在环境变量中使用 SSM 作为 lambda。我知道我可以放置 SSM 路径并在代码中使用 sdk 来获取这些值,但也许有一种方法可以自动实现,而无需从代码中获取值。
谢谢
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
您还可以将其定义为参数,然后在模板中引用它。这样做的一个好处是您不必担心指定版本号。(我可以想象在某些情况下人们会说“¿没有版本号是一个优势?呸!”。)
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 的参数存储的任何值。