2

如果您部署创建 kinesis 流的 cloudformation,您如何向在同一部署中创建的 lambda 提供诸如 arn 之类的输出。cf 是否在无服务器创建 lambda 之前发生,有没有办法将 cloudformation 值存储在 lambda 中?

4

2 回答 2

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-1Kinesis Stream 部署 CF 模板时,将为该阶段/区域创建流,并且 Arn 将保存到区域属性文件/_meta/resources/variables/s-variables-dev-euwest1.json中。注意初始大小写更改insertVariableNameForLaterUse

然后,您可以在函数的s-function.jsonas 中使用它${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

希望有帮助。

于 2016-06-05T23:05:15.067 回答
0

您在 Serverless 中遵循的部署步骤是什么?对于您的问题的第一部分,我相信您可以执行“sls 资源部署”来部署所有 CF 相关资源,然后执行“sls 函数部署”或“sls dash deploy”来部署 lambda 函数。所以从技术上讲,资源部署(CF)实际上并不部署 lambda 函数。

对于您询问的第二部分,如果您有一个用例,您想使用正在创建的 CF 资源的输出,(截至目前)此功能已添加/合并到无服务器 v0.5 中尚未被释放。

于 2016-03-15T08:26:36.247 回答