【问题标题】:Convert REST API described in OpenAPI specification to AWS API Gateway REST API described in Terraform template将 OpenAPI 规范中描述的 REST API 转换为 Terraform 模板中描述的 AWS API Gateway REST API
【发布时间】:2020-05-29 13:28:49
【问题描述】:

我的 REST API 有 OpenAPI 3.0 规范 (YAML),我需要在 Terraform 模板 (HCL) 中描述与 AWS API Gateway 资源相同的 REST API。

有什么工具可以帮我自动转换吗?

【问题讨论】:

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


    【解决方案1】:

    AWS 的API Gateway directly supports importing an OpenAPI 3.0 spec 定义 API 网关的所有相关部分。

    使用 Terraform,这可以通过 aws_api_gateway_rest_api resourcebody parameter 来完成。

    tests for the resource中给出了一个例子:

    resource "aws_api_gateway_rest_api" "test" {
      name = "foo"
      body = <<EOF
    {
      "swagger": "2.0",
      "info": {
        "title": "foo",
        "version": "2017-04-20T04:08:08Z"
      },
      "schemes": [
        "https"
      ],
      "paths": {
        "/test": {
          "get": {
            "responses": {
              "200": {
                "description": "200 response"
              }
            },
            "x-amazon-apigateway-integration": {
              "type": "HTTP",
              "uri": "https://www.google.de",
              "httpMethod": "GET",
              "responses": {
                "default": {
                  "statusCode": 200
                }
              }
            }
          }
        }
      }
    }
    EOF
    }
    

    您还可以使用file 函数直接从您的 YAML 文件中加载 OpenAPI 规范:

    resource "aws_api_gateway_rest_api" "test" {
      name = "foo"
      body = file("${path.module}/api.yml")
    }
    

    【讨论】:

    • 感谢您的评论!实际上,我需要以某种方式将我的 OpenAPI JSON 转换为 HCL 格式,而不仅仅是注入它。有什么选择吗?
    • 为什么需要转换?
    • 这是我项目中 Terraform 模板的约定,只是因为这个。
    • 我认为我无法理解重写它以完全描述 HCL 中的 API 的价值。 API 网关用 Terraform 来描述是一件非常可怕的事情,因为部署模式与 Terraform 对生命周期的理解不一致。在此处使用 body 参数可以巧妙地跳过这一点,同时仍然使用 Terraform(而不是 SAM/Serverless 等)。
    • 我完全同意你的看法,但很难迅速改变管理层做出的决定。
    【解决方案2】:

    也许试试 AWS 资源本身。

    根据documentation for aws_api_gateway_rest_api,您可以传递body 参数

    一种 OpenAPI 规范,定义了作为 REST API 的一部分创建的路由和集成集。

    然后,如果您需要对 OpenAPI 规范进行一些修改,您可以使用您最喜欢的 JSON 编程语言(例如nodejava、甚至jq 等...)。

    如需更多信息并查看哪些扩展可用,请参阅API Gateway docs

    【讨论】:

    • 感谢您的评论!实际上这就是我目前在 Terraform 模板中使用 OpenAPI 规范的方式,但我需要以某种方式将我的 OpenAPI 转换为 HCL 格式,而不仅仅是注入 JSON。
    猜你喜欢
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2022-01-22
    • 2020-08-14
    • 2021-09-13
    • 2016-11-25
    • 2022-10-25
    相关资源
    最近更新 更多