Solución o solución alternativa para el problema.
La integración de Terraform API Gateway con Firehose a continuación funciona si Firehose se crea por separado con anticipación.
resource "aws_api_gateway_integration" "click_put" { rest_api_id = data.aws_api_gateway_rest_api.mysfit.id resource_id = aws_api_gateway_resource.click.id type = "AWS" uri = "arn:aws:apigateway:${var.REGION}:firehose:action/PutRecord" credentials = aws_iam_role.api_click.arn http_method = aws_api_gateway_method.click_put.http_method integration_http_method = "POST" request_parameters = { "integration.request.header.Content-Type" = "'application/x-amz-json-1.1'" } passthrough_behavior = "NEVER" request_templates = { "application/json" = <<EOF { "DeliveryStreamName": "${local.firehose_name}", "Record": { "Data": "$util.base64Encode($input.json('$'))" } } EOF } } ... resource "aws_api_gateway_integration_response" "click_put" { rest_api_id = data.aws_api_gateway_rest_api.mysfit.id resource_id = aws_api_gateway_resource.click.id http_method = aws_api_gateway_method.click_put.http_method status_code = aws_api_gateway_method_response.click_put.status_code response_parameters = { "method.response.header.Access-Control-Allow-Origin" = "'*'" } }Sin embargo, si se crean en el mismo módulo raíz, provoca el error.
Error creating API Gateway Integration Response: NotFoundException: Invalid Integration identifier specified on api_click.tf line 185, in resource "aws_api_gateway_integration_response" "click_put": 185: resource "aws_api_gateway_integration_response" "click_put" {Coloque una dependencia en aws_api_gateway_integration del recurso que provoca "NotFoundException: se especificó un identificador de integración no válido".
resource "aws_api_gateway_integration_response" "click_put" { rest_api_id = data.aws_api_gateway_rest_api.mysfit.id resource_id = aws_api_gateway_resource.click.id http_method = aws_api_gateway_method.click_put.http_method status_code = aws_api_gateway_method_response.click_put.status_code response_parameters = { "method.response.header.Access-Control-Allow-Origin" = "'*'" } depends_on = [ aws_api_gateway_integration.click_put ] }Hay indicaciones de que depende de aws_api_gateway_integration o colocar una espera sería el camino.
Probablemente, esperar a que se complete por completo el recurso aws_api_gateway_integration sería una práctica recomendada.
aws_api_gateway_integration_response
Nota: Depende de tener aws_api_gateway_integration dentro de su API de descanso. Para asegurarse de esto, es posible que deba agregar un depend_on explícito para ejecuciones limpias.
Estoy usando la siguiente solución para resolver un problema similar. Recibo el error de identificador de método no válido en la primera ejecución cuando todos los recursos se crean durante la misma aplicación. Se crea una API de proxy para Lambda:
resource "aws_api_gateway_resource" "proxy" { rest_api_id = aws_api_gateway_rest_api.rest-api.id parent_id = aws_api_gateway_rest_api.rest-api.root_resource_id path_part = "{proxy+}" } resource "null_resource" "method-delay" { provisioner "local-exec" { command = "sleep 5" } triggers = { response = aws_api_gateway_resource.proxy.id } } resource "aws_api_gateway_method_response" "response" { depends_on = [null_resource.method-delay] http_method = "ANY" resource_id = aws_api_gateway_resource.proxy.id rest_api_id = aws_api_gateway_rest_api.rest-api.id }simplemente puede agregar depends_on . Debería ser algo como:
resource "aws_api_gateway_integration" "create-oauth-lambda" { rest_api_id = aws_api_gateway_rest_api.create-oauth-token-api-gw.id resource_id = aws_api_gateway_resource.auth-token-resource.id http_method = aws_api_gateway_method.method.http_method integration_http_method = "POST" type = "AWS_PROXY" uri = "some URI" } resource "aws_api_gateway_method_response" "response-200" { depends_on = [aws_api_gateway_integration.create-oauth-lambda] rest_api_id = aws_api_gateway_rest_api.create-oauth-token-api-gw.id resource_id = aws_api_gateway_resource.auth-token-resource.id http_method = aws_api_gateway_method.method.http_method status_code = "200" response_models = { "application/json" = "Empty" } }