【问题标题】:Terraform can't deploy API Gateway changes to one stage out of many?Terraform 无法将 API 网关更改部署到多个阶段中的一个阶段?
【发布时间】:2018-07-25 02:41:12
【问题描述】:

使用此代码:

resource "aws_api_gateway_deployment" "example_deployment" {
  depends_on = [
    "aws_api_gateway_method.example_api_method",
    "aws_api_gateway_integration.example_api_method_integration"
  ]
  rest_api_id = "${aws_api_gateway_rest_api.example_api.id}"
  stage_name = "${var.stage_name}"
}

我可以将 API 网关更改部署到我指定的任何阶段。但是,这将覆盖任何现有阶段。也就是说,如果我首先部署到名为“dev”的阶段,然后部署到“prod”,它将擦除“dev”。

如何实现多阶段部署?这样我就可以首先部署到 dev 或 staging 阶段,如果一切看起来都不错,然后部署到 prod 阶段。

【问题讨论】:

  • Terraform 并不能真正很好地处理 API Gateway 发布模型,尽管我认为尝试处理 AWS 提供商 repo 上的此类事情和 ECS 任务定义存在问题。相反,您最好为每个阶段创建单独的 API Gateway 资源并以这种方式链接事物。要保存复制粘贴内容,您可能需要将资源包装在模块中,然后在获取资源时配置名称/阶段。
  • @ydaetskcoR 感谢您的回复。最后,这正是我们所做的 - 每个阶段单独的文件夹/状态文件,然后使用模块使其保持干燥。
  • 您可能需要考虑自己回答您的问题,并通过一个最小的示例说明您为未来的读者所做的工作。

标签: aws-lambda aws-api-gateway terraform


【解决方案1】:

经过一些研究,我们最终采取了不同的策略。根据 thisthis 等文章,我们将 terraform 拆分为每个阶段的文件夹。因此,如果要部署 dev,请在 dev 文件夹中运行 terraform。为避免代码重复,请使用modules。它似乎运行良好,并允许我们部署不同版本的 API。

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 1970-01-01
    • 2020-11-24
    • 2020-04-07
    • 2017-05-16
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多