【问题标题】:How to point AWS API gateway stage to specific lambda function alias?如何将 AWS API 网关阶段指向特定的 lambda 函数别名?
【发布时间】:2019-05-29 09:03:04
【问题描述】:

因此根据 AWS 文档

而不是在 Lambda 函数中使用 Amazon 资源名称 (ARN) 事件源映射,您可以使用别名 ARN。这种方法意味着 你不需要更新你的事件源映射,当你 升级新版本或回滚到以前的版本。

我有 AWS lambda 函数 pets 并且我创建了 2 个别名 dev 和 prod 指向不同版本的 lambda 函数。

然后在 API Gateway 中,我在 Integration Request 中使用这个 lambda 函数。我有两个阶段的 API,development 和 production。我希望 development API 阶段指向 dev Lambda 别名 ARN,production 需要指向 prod 别名。

当我选择 lambda 函数作为 Integration Type 时,下拉列表会显示我之前在创建 lambda 函数时给出的任何显示名称..

我没有为 lambda 函数找到任何特定于阶段的配置。根据我对 SO 的研究,我必须按照以下步骤部署指向 dev 别名的 development 阶段

1> 转到Integration Request
2> 选择Lambda函数,改成pets:dev
3> 部署到development 阶段

在部署前将 Lambda 函数更改为 pets:prod,对 production 执行相同的步骤。

随着 lambda 函数的增长,这将是维护的噩梦。有没有更简单的方法?

【问题讨论】:

  • 您是否在使用 Cloudformation 或 terraform 等 IaC 工具?如果是这样,我认为如果你有一个统一的命名约定,这不会是一个巨大的痛苦。
  • 我正在使用 AWS 控制台。不确定你提到的工具,但我会调查一下
  • 通常 terraform 是管理您自己的基础架构的更好选择。如果您的基础架构需要部署到与您帐户不同的 aws 帐户,那么 cloudformation 会更好。
  • IaC 是否允许您在 API 阶段和 Lambda 别名之间进行一对一的映射?
  • 你看过serverless吗?

标签: amazon-web-services amazon-ec2 aws-lambda aws-api-gateway


【解决方案1】:

我找到了
https://aws.amazon.com/blogs/compute/using-api-gateway-stage-variables-to-manage-lambda-functions/

以下是我遵循的步骤:

  1. 创建 lambda 函数后,为 lambda 创建 2 个别名 功能。 dev 指向$latest 版本和prod 指向一个 您想在 prod 中使用的特定版本
  2. 然后转到 API Gateway 控制台 -> 集成请求 -> Lambda 函数,然后键入 pets:${stageVariables.lambdaAlias} 其中pets 是我的函数名,lambdaAlias 是我们必须在每个 API 阶段添加的阶段变量
  3. 将您的 API 部署到新的 API 阶段 development 和 production
  4. 在每个 API 阶段添加阶段变量lambdaAlias,其值分别为dev 和prod。阶段变量值必须与 lambda 函数的别名匹配

现在我们不必为每个 API 部署不断更改 lambda 别名

【讨论】:

  • 他们的 UI 的最新版本不允许在集成函数名称中输入阶段变量。有谁知道现在应该如何工作?
  • 我找不到通过 UI 执行此操作的方法,但通过将变量放置在您期望的位置,它可以很好地与 aws cli 配合使用。 ——这样做也显示了使用 UI 的正确方法。您需要手动指定完整的 ARN,不能只选择 lambda 函数名称,然后附加 ${stagingVariables.lambdaAlias}。
猜你喜欢
  • 2018-10-21
  • 2018-10-29
  • 2023-01-24
  • 2017-10-27
  • 2021-10-24
  • 2020-12-08
  • 2016-05-30
  • 2020-04-16
  • 2021-06-01
相关资源
最近更新 更多