In AWS API Gateway, I have a endpoint defined as /users/{userId}/someAction
, and I'm trying to recreate this with terraform
I would start having some sort of linked gateway_resource chain like so...
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" }
In which I then define the aws_api_gateway_method
and everything else.
How do I define this endpoint in terraform? The terraform documentation and examples don't cover this use case.
An integration request is an HTTP request that API Gateway submits to the backend, passing along the client-submitted request data, and transforming the data, if necessary. The HTTP method (or verb) and URI of the integration request are dictated by the backend (that is, the integration endpoint).
Resource: aws_api_gateway_integration. Provides an HTTP Method Integration for an API Gateway Integration.
Hence, When configuring a new API method in API Gateway integration response configuration needs no changes.
You need to define a resource whose path_part
is the parameter you want to use:
// 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}" }
Then you create the method and enable the path parameter:
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 } }
And finally you can successfully create the mapping within the 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" } }
The method needs to be there - and with the parameter enabled - in order for the integration mapping to work.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With