Terraform 无法将创建的集成附加到 API 网关的路由中

Terraform cannot attach created integrations into routes for API Gateway

我正在尝试使用 Terraform 部署 API 网关,将流量路由到我的域 google.com 作为示例。

我使用 aws_apigatewayv2_api 创建 HTTP_PROXY 集成类型。我浏览了文档,但仍然找不到将集成附加到路由 GET /sitemap.xml 的方法。如何处理?

resource "aws_api_gateway_deployment" "_" {
  rest_api_id = aws_api_gateway_rest_api._.id
  stage_name  = ""

  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_apigatewayv2_api" "_" {
  name          = "example"
  protocol_type = "HTTP"
}

resource "aws_apigatewayv2_route" "apigateway_route" {
  api_id    = aws_apigatewayv2_api._.id
  route_key = "GET /sitemap.xml"
}

resource "aws_apigatewayv2_integration" "apigateway_intergration" {
  api_id           = aws_apigatewayv2_api._.id
  integration_type = "HTTP_PROXY"

  connection_type      = "INTERNET"
  description          = "Gateway intergration for EC2"
  integration_method   = "ANY"
  integration_uri      = "https://www.google.com"
  passthrough_behavior = "WHEN_NO_MATCH"
}

# resource "aws_apigatewayv2_deployment" "apigateway_deployment" {
#   api_id      = aws_apigatewayv2_route.apigateway_route.api_id
#   description = "Example deployment"

#   lifecycle {
#     create_before_destroy = true
#   }
# }

resource "aws_apigatewayv2_stage" "apigateway_stage" {
  api_id = aws_apigatewayv2_api._.id
  name   = "example-stage"
}

您缺少几个组件。最重要的是 你的 aws_apigatewayv2_routeaws_apigatewayv2_integration 之间没有 link。

link 是使用 target 参数建立的。

同理,aws_apigatewayv2_stageaws_apigatewayv2_deployment之间也没有link。

你可以看看下面版本的代码:


resource "aws_apigatewayv2_deployment" "example" {
  api_id      = aws_apigatewayv2_api._.id
  description = "Example deployment"

  lifecycle {
    create_before_destroy = true
  }
  
  depends_on = [
    aws_apigatewayv2_route.apigateway_route
  ]
}


resource "aws_apigatewayv2_api" "_" {
  name          = "example"
  protocol_type = "HTTP"
}

resource "aws_apigatewayv2_route" "apigateway_route" {
  api_id    = aws_apigatewayv2_api._.id
  route_key = "GET /sitemap.xml"
  
  target = "integrations/${aws_apigatewayv2_integration.apigateway_intergration.id}"
  
}

resource "aws_apigatewayv2_integration" "apigateway_intergration" {
  api_id           = aws_apigatewayv2_api._.id
  integration_type = "HTTP_PROXY"

  connection_type      = "INTERNET"
  description          = "Gateway intergration for EC2"
  integration_method   = "ANY"
  integration_uri      = "https://www.google.com"
  passthrough_behavior = "WHEN_NO_MATCH"
}

resource "aws_apigatewayv2_stage" "apigateway_stage" {
  api_id = aws_apigatewayv2_api._.id
  name   = "example-stage"
  deployment_id = aws_apigatewayv2_deployment.example.id  
}

上面的代码正确地创建了集成: