因此,我已经将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参数存储中存储的值。
我看到的大多数示例都具有指向它们的SSM Params的漫长路径,但是由于我只是试图表明以这种方式完全可以访问SSM Param,因此我试图使其尽可能地简单。我还假设$ {ssmm:[]}命令根本没有转义,因为如果在定义的路径中未找到SSM Param,我希望返回一个未定义的值。
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句