Amazon Lambda - 别名特定的环境变量

psu*_*has 8 amazon-web-services aws-lambda

我正在使用AWS Lambda并且可以使用Alias功能指向我们拥有的多个代码促销阶段(例如dev,qa,prod等).我已将别名设置为与stage相同的名称.大多数这些功能都是从S3或SNS触发的,每个阶段都有不同的实例.

如何设置基于别名的环境变量,以便该函数可以获取特定信息.基本功能(通常是dev)中的env vars设置被转移到所有不适用于部署的别名.

我知道如何在API网关中使用阶段变量,但目前的用途不是通过网关.

任何帮助将不胜感激,Thx

小智 8

我不相信有办法实现你想要的.您需要使用正确的环境变量发布Lambda函数的三个版本,并将每个别名指向函数的正确版本.

在将别名指向它们之前,您可以使用描述字段来帮助描述版本,以使更改更容易理解.

  • 有趣的是,关于版本控制和别名lambdas的AWS文档如何将其主要示例用例作为每个环境的别名并从一个环境推广到另一个环境,但缺少特定于环境的变量.在您需要引入环境变量的那一刻,别名和版本控制完全崩溃了. (4认同)
  • 谢谢回复。只是想确保我在这里不丢失任何东西。我完全按照您的建议使用它,但是问题是要使代码保持同步,因为我们还没有任何自动化方法。这将是对AWS Lambda imho的很好的补充。 (2认同)

Ste*_*com 5

我也发现有趣的是,这不是别名计划的一部分,但是您的代码中确实有可用的上下文-Context.InvokedFunctionArn

我认为MINDSET是您可以调用的,例如,一个S3存储桶,并具有TEST或DEV或PROD前缀(基于上下文InvokedFunctionArn您知道哪个别名)。给定基于ARN的上下文和安全性,您可以使用存储桶策略/ IAM来限制您的TEST ARN只能访问TEST s3前缀文件。这解决了环境之间的安全性。

注意:我不同意此模型,并认为环境变量应位于别名中,如果别名中未指定,则应使用该版本中的名称。

尽管这可以解决问题,但围绕前缀等额外条件的复杂性有时会被错误地配置-拥有单独的存储桶似乎更安全,并且可以更好地匹配无服务器应用程序模型文档。