Terraform 错误:创建 API 网关部署时出错:BadRequestException:没有为方法定义集成

问题描述 投票:0回答:3

使用 terraform 创建 api_gateway 时出现错误,下面是我的代码和错误屏幕截图。 使用此代码我能够创建 REST API,但在部署部分失败...任何人都可以帮助我吗

aws_api_gateway_deployment.api-deployment: Creating...

Error: Error creating API Gateway Deployment: BadRequestException: No integration defined for method

日志截图

aws-api-gateway terraform-provider-aws
3个回答
15
投票

在“aws_api_gateway_deployment”资源中,您需要添加“depends_on”,其中需要包含以下条目:

  • aws_api_gateway_method
  • aws_api_gateway_integration

在您的 terraform 脚本中找到,例如:

   resource "aws_api_gateway_deployment" "example" {
    
      depends_on = [
        aws_api_gateway_method.methodproxy,
        aws_api_gateway_integration.apilambda
      ]
      ...
   }

问题来自两个资源中的任何一个尚未设置。


1
投票

双重、三重和四重检查您的 JSON 对于 api 主体是否有效。 这个错误不是很清楚,但是 JSON 格式或结构的任何问题也会导致您得到相同的结果。

我个人没有在我的配置中为

aws_api_gateway_method
aws_api_gateway_integration
定义 terraform 资源。 这是我对主体的示例以及修复错误的细微更改。

就上下文而言,这里的目标是使 API Gateway 能够触发 Lambda 函数,这意味着我还定义了一个

aws_lambda_permission
资源,允许通过 API Gateway 调用 Lambda。

这是投掷

Error: Error creating API Gateway Deployment: BadRequestException: No integration defined for method

locals {
  body = jsonencode({
    swagger = "2.0"
    info = {
      title   = "Example"
      version = "1.0"
    }
    schemes = [
        "https"
    ]
    paths = {
      "/path" = {
        get = {
          responses = {
            "200" = {
              description = "200 response"
            }
          }
        }
        x-amazon-apigateway-integration = {
          type       = "AWS"
          uri        = module.lambda.invoke_arn
          httpMethod = "POST"
          responses = {
            default = {
              statusCode = 200
            }
          }
        }
      }
    }
  })
}

将 JSON 更正为该值即可允许部署完成。

locals {
  body = jsonencode({
    swagger = "2.0"
    info = {
      title   = "Example"
      version = "1.0"
    }
    schemes = [
        "https"
    ]
    paths = {
      "/path" = {
        get = {
          responses = {
            "200" = {
              description = "200 response"
            }
          }                      <-- the change is here
          x-amazon-apigateway-integration = {
            type       = "AWS"
            uri        = module.lambda.invoke_arn
            httpMethod = "POST"
            responses = {
              default = {
                statusCode = 200
              }
            }
          }
        }
      }
    }
  })
}

0
投票

我遇到了这个错误;问题是开发人员通过 AWS 控制台在同一 API terraform 中创建了一个新资源(端点)并尝试重新部署。他尚未将该端点与任何服务集成。

一旦我们删除了部分资源,terraform apply 就可以正常工作,没有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.