【问题标题】:How can I create route path in terraform for AWS apigateway version2?如何在 terraform 中为 AWS apigateway version2 创建路由路径?
【发布时间】:2020-08-05 02:28:02
【问题描述】:

我正在使用 terraform 在 AWS 上创建 API Gateway 版本 2。通过查看页面:https://www.terraform.io/docs/providers/aws/r/apigatewayv2_route.html,并没有说如何配置route pathHTTP method。我想知道我应该在哪里配置它们。 创建路由时,我可以在 AWS 控制台上看到以下设置:

它在 terraform 上没有任何这些配置。如何创建带有路径和方法的路由?

【问题讨论】:

    标签: amazon-web-services terraform aws-api-gateway


    【解决方案1】:

    API Gateway v2 API 以非常通用的方式对路由进行建模,因此相同的数据模型可用于 HTTP API 和 WebSocket API。在这两种情况下,都是 route_key 参数用于匹配路由。

    对于 WebSocket API,我们可以通过在声明 API 时设置 route_selection_expression 来选择 API Gateway 将如何构造路由密钥。

    对于 HTTP API,API Gateway v2 使用由方法和路径组成的单个字符串,并用空格分隔。例如,以下路由键将匹配您在控制台中输入的屏幕截图:

      route_key = "ANY /"
    

    The API Gateway documentation for routes 提供了第二个示例,我们可以将其转换为 Terraform,如下所示:

      route_key = "GET /pets"
    

    似乎 API Gateway 控制台在创建路由时会自动将 UI 中的这两个字段组合成一个字符串。


    当您试图了解 AWS 控制台 UI 如何映射到底层 API 以及它如何映射到 Terraform 时,一般提示是在控制台中创建一个测试对象,然后将其导入 Terraform看看 Terraform 是如何看待它的。

    在这种情况下,您需要使用显示的 UI 创建路由,然后使用控制台在 API Gateway API 中查找整个 API 和该路由的内部 id,例如通过在控制台中导航到它并查看浏览器 URL 栏。然后,您可以在 Terraform 中为其编写一个空的占位符配置并将您的对象导入其中:

    resource "aws_apigatewayv2_route" "example" {
      # TODO: Fill in after import
    }
    
    terraform import aws_apigatewayv2_route.example api-id/route-id
    

    如果导入成功,您可以通过运行 terraform show 并在输出中查找 resource "aws_apigatewayv2_route" "example" 块来查看 Terarform 对您导入的对象的理解。然后,您可以看到控制台创建的 route_key 并将其复制到您的配置中。

    以这种方式使用terraform import 时务必小心,因为在此之后Terraform 认为它是该对象的唯一管理器,并且如果您运行terraform destroy 或将其从配置中删除,它将计划销毁它。出于这个原因,我建议使用仅为实验而创建的临时 HTTP API 来执行此操作,而不是使用您想要保留的任何真实现有 HTTP API。 (当然,如果您确实打算使用 Terraform 来持续管理 API,那么您可以使用 terraform import 将您现有的 API 引入 Terraform,一旦您已经进行了足够多的实验以了解如何表示现有对象。)

    【讨论】:

    • 我可以很好地设置 POST 和 GET 路由,但是使用 ANY 会出现 CORS 错误——知道为什么吗?
    猜你喜欢
    • 2015-12-03
    • 2021-12-04
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2021-09-05
    • 2017-10-09
    相关资源
    最近更新 更多