-
-
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" | |
} |
Thank you so much!
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.
🚀