如何在无服务器框架内使用云形成输出?

时间:2016-03-11 16:29:21

标签: serverless-framework

如果部署创建kinesis流的cloudformation,如何将arn等输出提供给在同一部署中创建的lambda。 cf在无服务器创建lambda之前发生了吗?有没有办法将lambformation值存储在lambda中?

2 个答案:

答案 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无服务器尚未发布。