如果您部署创建 kinesis 流的 cloudformation,您如何向在同一部署中创建的 lambda 提供诸如 arn 之类的输出。cf 是否在无服务器创建 lambda 之前发生,有没有办法将 cloudformation 值存储在 lambda 中?
2 回答
要存储 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
Kinesis Stream 部署 CF 模板时,将为该阶段/区域创建流,并且 Arn 将保存到区域属性文件/_meta/resources/variables/s-variables-dev-euwest1.json
中。注意初始大小写更改insertVariableNameForLaterUse
。
然后,您可以在函数的s-function.json
as
中使用它${insertVariableNameForLaterUse}
,例如环境部分:
"environment": {
"InsertVariableNameWeWantToUseInLambda": "${insertVariableNameForLaterUse}"
...
}
并使用以下方法在您的 Lambda 中引用此变量:
var myKinesisStreamArn = process.env.InsertVariableNameWeWantToUseInLambda;
CloudFormation 发生在 Lambda 部署之前。尽管您可能应该使用脚本来控制它,而不仅仅是使用仪表板:
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
希望有帮助。
您在 Serverless 中遵循的部署步骤是什么?对于您的问题的第一部分,我相信您可以执行“sls 资源部署”来部署所有 CF 相关资源,然后执行“sls 函数部署”或“sls dash deploy”来部署 lambda 函数。所以从技术上讲,资源部署(CF)实际上并不部署 lambda 函数。
对于您询问的第二部分,如果您有一个用例,您想使用正在创建的 CF 资源的输出,(截至目前)此功能已添加/合并到无服务器 v0.5 中尚未被释放。