web-dev-qa-db-ja.com

Terraformでは、リクエストパスの変数を使用してAPI Gatewayエンドポイントをどのように指定しますか?

AWS API Gatewayでは、/users/{userId}/someActionとして定義されたエンドポイントがあり、terraformでこれを再作成しようとしています

私はそのようなリンクされたgateway_resourceチェーンのようなものを持つようになります...

resource "aws_api_gateway_resource" "Users" {
  rest_api_id = "${var.rest_api_id}" 
  parent_id = "${var.parent_id}" 
  path_part = "users"
}

//{userId} here?

resource "aws_api_gateway_resource" "SomeAction" {
  rest_api_id = "${var.rest_api_id}" 
  parent_id = "${aws_api_gateway_resource.UserIdReference.id}"
  path_part = "someAction"
}

次に、aws_api_gateway_methodおよびその他すべてを定義します。

このエンドポイントをテラフォームで定義するにはどうすればよいですか? Terraformのドキュメントと例では、このユースケースについては説明していません。

25
iquestionshard

定義する必要があります resourcepath_partは、使用するパラメーターです。

// List
resource "aws_api_gateway_resource" "accounts" {
    rest_api_id = "${var.gateway_id}"
    parent_id   = "${aws_api_gateway_resource.finance.id}"
    path_part   = "accounts"
}

// Unit
resource "aws_api_gateway_resource" "account" {
  rest_api_id = "${var.gateway_id}"
  parent_id   = "${aws_api_gateway_resource.accounts.id}"
  path_part   = "{accountId}"
}

次に、パスパラメータ method およびenableを作成します。

resource "aws_api_gateway_method" "get-account" {
  rest_api_id   = "${var.gateway_id}"
  resource_id   = "${var.resource_id}"
  http_method   = "GET"
  authorization = "NONE"

  request_parameters {
    "method.request.path.accountId" = true
  }
}

最後に、 integration 内でマッピングを正常に作成できます。

resource "aws_api_gateway_integration" "get-account-integration" {
    rest_api_id             = "${var.gateway_id}"
    resource_id             = "${var.resource_id}"
    http_method             = "${aws_api_gateway_method.get-account.http_method}"
    type                    = "HTTP"
    integration_http_method = "GET"
    uri                     = "/integration/accounts/{id}"
    passthrough_behavior    = "WHEN_NO_MATCH"

    request_parameters {
        "integration.request.path.id" = "method.request.path.accountId"
    }
}

統合マッピングが機能するためには、メソッドがそこにあり、パラメーターが有効になっている必要があります。

35
pesama

評判が悪いためコメントできませんが、上記の答えに追加して、parent_idを変更してaws_api_gateway_resource動的パラメータを持っています。

1
naren