web-dev-qa-db-ja.com

API Gateway統合応答の作成エラー:NotFoundException:無効な統合IDが指定された

目的

問題の解決策または回避策。

問題

FireHoseが事前に別々に作成された場合、FireHoseとのTerraform APIゲートウェイ統合は機能します。

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" = "'*'"
  }
}
 _

ただし、同じルートモジュールに作成されている場合は、エラーが発生します。

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" {
 _
3
mon

回避策/解決策

「NotFoundException:無効な統合識別子が指定された」というリソースからAWS_API_GATEWAY_INTEGRATEを配置します。

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
  ]
}
 _

参考文献

depends_on aws_api_gateway_integrationまたは待機の方法があるという表示があります。

おそらくAWS_API_Gateway_Integrationリソースの完全な完了を待っているおそらく推奨される慣習になります。

  • aws_api_gateway_integration_response

    注:REST API内のAWS_API_GATEWAY_INTEGRATIONを持つことによって異なります。これを確実にするためには、クリーンラン用に明示的な依存関係を追加する必要があるかもしれません。

  • API Gateway Integration Issue - Method Identifierが指定されたエラー#4001

    私は同様の問題を解決するために、次の回避策を使用しています。同じアプライ中にすべてのリソースが作成されたときに最初の実行時に無効なメソッド識別子エラーが発生しました。ラムダ用のプロキシAPIが作成されます。

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
}
 _
3
mon