我已将Redis ElastiCache部分添加到我的s-resource-cf.json(CloudFormation模板)中,并将其主机名选为输出。如何在Lambda函数中使用CloudFormation资源?
"Resources": {
...snip...
"Redis": {
"Type": "AWS::ElastiCache::CacheCluster",
"Properties": {
"AutoMinorVersionUpgrade": "true",
"AZMode": "single-az",
"CacheNodeType": "cache.t2.micro",
"Engine": "redis",
"EngineVersion": "2.8.24",
"NumCacheNodes": "1",
"PreferredAvailabilityZone": "eu-west-1a",
"PreferredMaintenanceWindow": "tue:00:30-tue:01:30",
"CacheSubnetGroupName": {
"Ref": "cachesubnetdefault"
},
"VpcSecurityGroupIds": [
{
"Fn::GetAtt": [
"sgdefault",
"GroupId"
]
}
]
}
}
},
"Outputs": {
"IamRoleArnLambda": {
"Description": "ARN of the lambda IAM role",
"Value": {
"Fn::GetAtt": [
"IamRoleLambda",
"Arn"
]
}
},
"RedisEndpointAddress": {
"Description": "Redis server host",
"Value": {
"Fn::GetAtt": [
"Redis",
"Address"
]
}
}
}
运行sls resources deploy
时,我能得到CloudFormation输出Redis的服务器主机,但我怎么能访问从一个lambda函数内的输出?
此入门项目模板中没有任何内容参考示例项目附带的IamRoleArnLambda
。按照docs,模板只为项目配置使用,它们无法访问从lambda函数:
模板&变量是配置只
模板和变量被用于该项目的配置只要。这些信息在您的lambda函数中不可用。要设置可由lambda函数使用的变量,请使用环境变量。
那么,在创建ElastiCache服务器后,如何将环境变量设置为ElastiCache服务器的主机名呢?
这应该只是正常工作对我来说,只要我手动创建Elasticache集群,并与无服务器堆栈名称前缀键名。每个项目一次性手动操作不是问题,我可能还会为生产创建一个单独的实例。令人惊讶的是,虽然使用CloudFormation非常困难。这是我两天来第三次尝试使用它来简化基础结构初始化,只放弃并回退到手动创建资源,并将它们记录在自述文件和专用配置文件中。 –