如果部署创建kinesis流的cloudformation,如何将arn等输出提供给在同一部署中创建的lambda。 cf在无服务器创建lambda之前发生了吗?有没有办法将lambformation值存储在lambda中?
答案 0 :(得分:3)
要从您的CloudFormation模板“s-resource-cf.json”存储Arn,请在“输出”部分添加一些项目。
"Outputs": {
"InsertVariableNameForLaterUse": {
"Description": "This is the Arn of My new Kinesis Stream",
"Value": {
"Fn::GetAtt": [
"InsertNameOfCfSectionToFindArnOf",
"Arn"
]
}
}
}
Fn::GetAtt
是CF中的一个函数,用于从正在创建的其他资源获取引用。
使用serverless resources deploy -s dev -r eu-west-1
部署CF模板时,将为该舞台/区域创建Kinesis流,并将Arn保存到区域属性文件/_meta/resources/variables/s-variables-dev-euwest1.json
中。请注意初始大写更改insertVariableNameForLaterUse
。
然后,您可以在函数s-function.json
中使用它
${insertVariableNameForLaterUse}
,例如环境部分:
"environment": {
"InsertVariableNameWeWantToUseInLambda": "${insertVariableNameForLaterUse}"
...
}
并使用以下内容在您的Lambda中引用此变量:
var myKinesisStreamArn = process.env.InsertVariableNameWeWantToUseInLambda;
CloudFormation发生在Lambda Deployments之前。虽然你应该用脚本来控制它,而不仅仅是使用仪表板:
serverless resources deploy -s dev -r eu-west-1
serverless function deploy --a -s dev -r eu-west-1
serverless endpoint deploy --a -s dev -r eu-west-1
希望有所帮助。
答案 1 :(得分:0)
您在此处从Serverless进行部署的步骤是什么?对于你问的第一部分,我相信你可以做一个“资源部署”。部署所有CF相关资源,然后你做一个< sls功能部署' OR' sls dash deploy'部署lambda函数。从技术上讲,资源部署(CF)实际上并不部署lambda函数。
对于你问的第二部分,如果你有一个用例你想要使用正在创建的CF资源的输出,(截至目前),这个feature已被添加/合并到v0 .5无服务器尚未发布。