【问题标题】:creating development and production versions of lambda functions创建 lambda 函数的开发和生产版本
【发布时间】:2015-10-14 04:06:28
【问题描述】:

为 lambda 函数(即 dev/prod)提供不同环境的最佳做法是什么

我应该只有两个 lambda 函数,一个名为 myFunction-prod 和 myFunction-dev,还是有更好的方法来创建环境。

我看到 Amazon API Gateway 有一个“阶段”的概念,可以将开发、暂存和生产版本的代码分开。

Amazon Lambda 有类似的概念吗?

【问题讨论】:

    标签: amazon-web-services aws-lambda


    【解决方案1】:

    您可以使用 AWS 网关 API。创建 lamdba 函数后,创建一个指向 lambda 函数的网关。这可以使用下拉菜单轻松选择。

    正如您所提到的,您可以创建 2 个阶段(实时和暂存)并将适当的网关 URL 映射到这些阶段。然后通过分阶段选择合适的方法,就可以得到访问stage的REST URL。 例如,someurl/live 和 someurl/staging。

    此外,在部署 lamda 函数更改时,请选择适当的阶段进行部署并使用暂存 URL 对其进行测试。完成后,将该功能部署到您的实时舞台。

    【讨论】:

      【解决方案2】:

      在 re:Invent 2015(10 月)期间;版本控制和别名已添加到 lambda;这个official doc 很好地描述了如何将它用于产品和开发。

      附言为了测试实时数据(不影响产品);我使用 SNS 扇出模式(将 prod 和 dev lambda 订阅到同一个 SNS 主题)。

      【讨论】:

      • 当被问到这个问题时,也许其他答案之一是最好的。但是自从别名发布(并且仍然在 2017 年)我认为这是最好的答案。使用“test”或“www”等别名标记发布,并在 Lambda 函数中使用 context.getInvokedFunctionArn() 来查找它的调用方式。
      【解决方案3】:

      AWS 控制台 - lamdba 不提供此功能,它只是列出您拥有的所有功能及其详细信息。

      就像你说的,你需要按环境划分函数,然后管理环境之间的代码移动 通过像詹金斯或竹子这样的构建集成服务器。您的部署脚本在内部将调用 aws sdk apis 它将替换目标环境中的功能代码。例如UpdateFunctionCode

      您还可以利用 IAM 角色/策略来控制部署访问。

      我建议使用您的工作流程开发您自己的自定义仪表板,或者将其集成到您现有的 devops 工具中。 AWS 控制台不是为生产使用而设计的,您最终需要一个仪表板来管理它。

      【讨论】:

        【解决方案4】:

        除了添加到 Neil 之外,您还可以使用阶段变量链接到相应的 Lambda 别名,即 dev 阶段将使用您的 lambda 函数的 DEV 别名,而 prod 阶段将使用您的 lambda 函数的 PROD 别名。更多关于阶段变量的信息在这里 Working with Stage Variables in Amazon API Gateway

        【讨论】:

          【解决方案5】:

          实现此目的的一种方法是指定一个函数输入,该输入告诉 lambda 函数在哪个环境中运行该函数。您的 lambda 函数应具有适当的特定于环境的配置。

          如果您已将 API 网关连接到 lambda 函数,您不妨在 api 请求中传递一个标头,以识别您所针对的环境。然而,这不是一个理想的解决方案,会有更好的方法来做到这一点。

          【讨论】:

            猜你喜欢
            • 2018-06-19
            • 1970-01-01
            • 2011-02-27
            • 2016-10-18
            • 1970-01-01
            • 2021-06-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多