-
-
Save mendhak/8303d60cbfe8c9bf1905def3ccdb2176 to your computer and use it in GitHub Desktop.
| terraform { | |
| required_providers { | |
| aws = { | |
| source = "hashicorp/aws" | |
| version = "~> 4.0" | |
| } | |
| } | |
| } | |
| provider "aws" { | |
| region = "eu-west-1" | |
| } | |
| resource "aws_api_gateway_rest_api" "MyDemoAPI" { | |
| name = "MyDemoAPI" | |
| description = "This is my API for demonstration purposes" | |
| } | |
| resource "aws_api_gateway_resource" "MyDemoResource" { | |
| rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id | |
| parent_id = aws_api_gateway_rest_api.MyDemoAPI.root_resource_id | |
| path_part = "{proxy+}" | |
| } | |
| resource "aws_api_gateway_method" "MyDemoMethod" { | |
| rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id | |
| resource_id = aws_api_gateway_resource.MyDemoResource.id | |
| http_method = "GET" | |
| authorization = "NONE" | |
| request_parameters = { | |
| "method.request.path.proxy" = true | |
| } | |
| } | |
| resource "aws_api_gateway_integration" "MyDemoIntegration" { | |
| rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id | |
| resource_id = aws_api_gateway_resource.MyDemoResource.id | |
| http_method = aws_api_gateway_method.MyDemoMethod.http_method | |
| type = "HTTP_PROXY" | |
| uri = "https://httpbin.org/anything/{proxy}" | |
| integration_http_method = "GET" | |
| cache_key_parameters = ["method.request.path.proxy"] | |
| timeout_milliseconds = 29000 | |
| request_parameters = { | |
| "integration.request.path.proxy" = "method.request.path.proxy" | |
| } | |
| } | |
| resource "aws_api_gateway_deployment" "teststage" { | |
| depends_on = [ | |
| aws_api_gateway_integration.MyDemoIntegration | |
| ] | |
| rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id | |
| stage_name = "test" | |
| } | |
| output "api_gateway_test_url" { | |
| value = "${aws_api_gateway_deployment.teststage.invoke_url}/hello/world" | |
| } |
This code works perfectly fine, except wgen I test it via its public URL, in other words, when I use Postman.
It keeps returning an 500 - Internal Server Error.
Seems as though it is missing either an integration_response or a method_response (or both).
I've trying different approaches but nothing worked.
Do you have any clue? (My code is a copy-paste from this code)
I can't speak for Postman but does it work when you try with curl?
I ran the TF just now and was able to:
curl "https://xxxxxxxxxxxxxxxxxxxxxxxx.execute-api.eu-west-1.amazonaws.com/test/hello/world?a=1"
And I got an output from httpbin.
I did have to add some missing Terraform to the top regarding the provider (I'll edit the gist now):
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
}
provider "aws" {
region = "eu-west-1"
}
I've added an output block to the gist too which shows what URL to invoke to test it
output "api_gateway_test_url" {
value = "${aws_api_gateway_deployment.teststage.invoke_url}/hello/world"
}I just realized that my script was technically correct, but since I use as a deployment trigger the ids of resources and methods, it was not being deployed at all!!
Thank you too much for the help and support!
Thank you!
@flarocca Thank you for your contribution. I spent nearly 3 days trying to deploy my function without realizing the problem.
Is it possible to proxy the root, without any stages?
Thank you so much!