7

在本地运行 sams 以测试我的 api 网关并传递环境变量时,我可以运行命令

sam local start-api -n env-vars.json

当环境变量与这样的特定函数绑定时,这很有效

MyFunction:
  Type: AWS::Serverless::Function
  Properties:
    Handler: index.handler
    Runtime: nodejs8.10
    CodeUri: .
    Environment:
      Variables:
        FIRST_BUCKET: !Ref firstBucket
        SECOND_BUCKET: !Ref secondBucket

但是,我目前有这样的全局环境变量

Globals:
  Function:
    CodeUri: .
    Runtime: nodejs8.10
    Environment:
      Variables:
        FIRST_BUCKET: !Ref firstBucket
        SECOND_BUCKET: !Ref secondBucket

如何使用 将自定义全局环境变量传递给 SAMS env-var.json?我希望能够为我的env-var.json文件做这样的事情

{
  "Globals": {
    "Function": {
      "FIRST_BUCKET": "this-is-my-bucket-name"
    }
  }
}

不幸的是,这不起作用,我在网上找不到任何资源来显示实现此行为的正确语法。

4

1 回答 1

0

明天我将不得不对此进行测试,但是通读转换文档(以及我对 SAM 转换的理解),我希望全局变量仅应用于每个函数,而无需重新声明它们。

因此,您将为每个函数正常生成 env.json:例如,

{
  "MyFunction": {
      "FIRST_BUCKET": "this-is-my-bucket-name"
  },
  "MySecondFunction": {
      "SECOND_BUCKET": "this-is-my-second-bucket-name"
  }
}

这将导致您的 lambda 函数具有两个全局变量,但仅覆盖传递的值:

我的功能:

  • FIRST_BUCKET = "这是我的桶名"
  • SECOND_BUCKET = !Ref secondBucket

我的第二个功能:

  • FIRST_BUCKET = !Ref firstBucket
  • SECOND_BUCKET = "这是我的第二个桶名"

请记住,您的函数将在您的函数中使用这两个变量,但您只是覆盖您从 json 传递的变量。

于 2019-09-09T04:27:58.307 回答