Responsive Ad Area

Share This Post

test

Why is the method response of an API gateway different when being created using terraform?

Why is the method response of an API gateway different when being created using terraform?

I have the following terraform script which creates an API gateway that passes requests to a lambda function.

provider "aws" {

  access_key = "${var.access_key}"

  secret_key = "${var.secret_key}"
  # 
  region     = "${var.region}"

  version = "~> 2.6"
}

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   = "mydemoresource"
}

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   = "POST"
  authorization = "NONE"
}

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}"
  integration_http_method = "POST"
  type        = "AWS_PROXY"
  uri         = "arn:aws:apigateway:ap-southeast-1:lambda:path/2015-03-31/functions/${aws_lambda_function.test_lambda_function.arn}/invocations"
  content_handling = "CONVERT_TO_TEXT"
}

resource "aws_api_gateway_method_response" "200" {
  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}"
  status_code = "200"
  response_models {
     "application/json" = "Empty"
  }
}

resource "aws_lambda_function" "test_lambda_function" {
  filename         = "lambda.zip"
  description      = "test build api gateway and lambda function using terraform"
  function_name    = "test_lambda_function"
  role             = "arn:aws:iam::123456789123:role/my_labmda_role"
  handler          = "gateway.lambda_handler"
  runtime          = "python3.6"
  memory_size      = 128
  timeout          = 60
}

The Method Response section of the API gateway resource display Select an integration response..

enter image description here

But if I create the same API gateway using AWS console, the Method Response section displays something different:

enter image description here

Why does this happen?

The following steps are how I use AWS console to create the same API gateway:

  1. Select Create Method under the resource.
    enter image description here

  2. Select POST method.
    enter image description here

  3. Select the desired options.
    enter image description here

I’ve tried creating the above resources manually first, then execute terraform apply. Then terraform tells me that nothing needs to be changed.

terraform apply
aws_api_gateway_rest_api.MyDemoAPI: Refreshing state... (ID: 1qa34vs1k7)
aws_lambda_function.test_lambda_function: Refreshing state... (ID: test_lambda_function)
aws_api_gateway_resource.MyDemoResource: Refreshing state... (ID: 4xej81)
aws_api_gateway_method.MyDemoMethod: Refreshing state... (ID: agm-1qa34vs1k7-4xej81-POST)
aws_api_gateway_method_response.200: Refreshing state... (ID: agmr-1qa34vs1k7-4xej81-POST-200)
aws_api_gateway_integration.MyDemoIntegration: Refreshing state... (ID: agi-1qa34vs1k7-4xej81-POST)

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

This seems to mean that the manually built structure is the same as the structure built by terraform.


Why is the method response of an API gateway different when being created using terraform?
Why is the method response of an API gateway different when being created using terraform?
test
{$excerpt:n}

Share This Post

Leave a Reply

Your email address will not be Publishedd. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Skip to toolbar