首页 文章

如何将OpenAPI用于aws_api_gateway_rest_api

提问于
浏览
1

我正在尝试使用OpenAPI,因为它看起来像一个标准,并且它比terraform资源更简单 . 我已将json转换为可能采用的terraform,但我得到了错误:

module.aws_api_gateway.aws_api_gateway_rest_api.CICDAPI: body must be a single value, not a list

贝娄是我的代码:

resource "aws_api_gateway_rest_api" "CICDAPI" {
  name        = "cicdapi"
  description = "cicd build pipeline"
  binary_media_types = [
    "application/json"
  ]

  body = {
      swagger = 2
      info {
        title = "AwsServerlessExpressApi"
      }
      basePath = "/prod"
      schemes = [
        "https"
      ]
   ....

我还没有找到一个关于如何将OpenAPI分配给aws网关api资源的示例 . 我可以让身体成为一个json字符串???文档中的任何地方都没有说 .

1 回答

  • 2

    正如您可以通过错误看到的,它需要是一个字符串而不是您在代码中的哈希映射 .

    您应该能够简单地将body值包装在heredoc中 .

    所以你想要这样的东西:

    resource "aws_api_gateway_rest_api" "CICDAPI" {
      name        = "cicdapi"
      description = "cicd build pipeline"
      binary_media_types = [
        "application/json"
      ]
    
      body = <<EOF
    {
      swagger = 2
      info {
        title = "AwsServerlessExpressApi"
      }
      basePath = "/prod"
      schemes = [
        "https"
      ]
     ....
    }
    EOF
    }
    

    文档缺乏解释这一点,但你也可以看到它是如何在_2717627中实现的 .

    我还需要检查一下,但我认为您可以使用 body = "${file("path/to/file")}" 从文件中加载OpenAPI规范

相关问题