如何将全局环境变量提供给AWS SAM本地

时间:2019-05-02 18:37:16

标签: amazon-web-services aws-sam

在本地运行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

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

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

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

1 个答案:

答案 0 :(得分:0)

我明天必须测试一下,但是通读transform documentation(以及我对SAM变换的理解)后,我希望将全局变量仅应用于每个函数,而不必重新声明它们。

因此,您将正常使用每个函数形成env.json: 例如,

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

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

MyFunction:

  • FIRST_BUCKET =“这是我的水桶名称”
  • SECOND_BUCKET =!Ref secondBucket

MySecondFunction:

  • FIRST_BUCKET =!Ref firstBucket
  • SECOND_BUCKET =“这是我的第二个存储桶名称”

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