Skip to content

Commit

Permalink
terraform/modules/aws_api_gateway_method_for_lambda_function
Browse files Browse the repository at this point in the history
  • Loading branch information
inoue_sachiro committed Aug 1, 2016
1 parent df1794e commit f94add8
Show file tree
Hide file tree
Showing 6 changed files with 153 additions and 214 deletions.
2 changes: 1 addition & 1 deletion Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ namespace :test do
desc 'Lint.'
task :lint do
sh 'bundle exec rubocop'
sh 'flake8 aws_lambda'
Dir.chdir('aws_lambda') { sh 'flake8' }
Dir.chdir 'terraform' do
sh 'terraform validate'
Dir['modules/*/'].each { |dir| sh "terraform validate #{dir}" }
Expand Down
7 changes: 7 additions & 0 deletions aws_lambda/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
configparser==3.5.0
enum34==1.1.6
flake8==3.0.3
mccabe==0.5.2
pep8==1.7.0
pycodestyle==2.0.0
pyflakes==1.2.3
246 changes: 33 additions & 213 deletions terraform/apigateway_research.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ resource "aws_api_gateway_rest_api" "research" {
}

resource "aws_api_gateway_deployment" "research_staging" {
depends_on = ["aws_api_gateway_integration.research_heartbeat_ok_get"]
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
stage_description = "staging"
stage_name = "staging"
Expand All @@ -14,7 +13,6 @@ resource "aws_api_gateway_deployment" "research_staging" {
}

resource "aws_api_gateway_deployment" "research_prod" {
depends_on = ["aws_api_gateway_integration.research_heartbeat_ok_get"]
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
stage_description = "production"
stage_name = "prod"
Expand Down Expand Up @@ -51,255 +49,77 @@ resource "aws_api_gateway_resource" "research_random_id" {
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
}

# {{{ GET /heartbeat/ok

resource "aws_api_gateway_method" "research_heartbeat_ok_get" {
authorization = "NONE"
# GET /heartbeat/ok
module "aws_api_gateway_method_research_heartbeat_ok_get" {
source = "./modules/aws_api_gateway_method_for_lambda_function"
aws_region = "${var.aws_region}"
aws_account_id = "${var.aws_account_id}"
error_status_codes = "500"
function_name = "${module.aws_lambda_function_for_apigateway_heartbeat_ok.function_name}"
http_method = "GET"
resource_id = "${aws_api_gateway_resource.research_heartbeat_ok.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
}

resource "aws_api_gateway_integration" "research_heartbeat_ok_get" {
http_method = "${aws_api_gateway_method.research_heartbeat_ok_get.http_method}"
integration_http_method = "POST"
request_templates = {
"application/json" = <<EOF
{
"stage": "$stageVariables.stage"
}
integration_response_parameters_in_json = <<EOF
{ "method.response.header.Content-Type": "'text/plain'" }
EOF
}
resource_id = "${aws_api_gateway_resource.research_heartbeat_ok.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
type = "AWS"
uri = "arn:aws:apigateway:${var.aws_region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${var.aws_region}:${var.aws_account_id}:function:${module.aws_lambda_function_for_apigateway_heartbeat_ok.function_name}:$${stageVariables.stage}/invocations"
}

resource "aws_api_gateway_method_response" "research_heartbeat_ok_get_200" {
http_method = "${aws_api_gateway_method.research_heartbeat_ok_get.http_method}"
resource_id = "${aws_api_gateway_resource.research_heartbeat_ok.id}"
response_parameters_in_json = <<EOF
{
"method.response.header.Content-Type": true
}
integration_response_templates = "$input.path('$')"
method_response_parameters_in_json = <<EOF
{ "method.response.header.Content-Type": true }
EOF
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
status_code = "200"
}

resource "aws_api_gateway_integration_response" "research_heartbeat_ok_get_200" {
depends_on = ["aws_api_gateway_integration.research_heartbeat_ok_get"]
http_method = "${aws_api_gateway_method.research_heartbeat_ok_get.http_method}"
resource_id = "${aws_api_gateway_resource.research_heartbeat_ok.id}"
response_parameters_in_json = <<EOF
{
"method.response.header.Content-Type": "'text/plain'"
}
EOF
response_templates = {
"application/json" = "$input.path('$')"
}
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
status_code = "${aws_api_gateway_method_response.research_heartbeat_ok_get_200.status_code}"
}

# }}} GET /heartbeat/ok

# {{{ GET /random/{id}

resource "aws_api_gateway_method" "research_random_id_get" {
authorization = "NONE"
# GET /random/{id}
module "aws_api_gateway_method_research_random_id_get" {
source = "./modules/aws_api_gateway_method_for_lambda_function"
aws_region = "${var.aws_region}"
aws_account_id = "${var.aws_account_id}"
error_status_codes = "400,500"
function_name = "${module.aws_lambda_function_for_apigateway_get_random.function_name}"
http_method = "GET"
request_parameters_in_json = <<EOF
{
"method.request.path.id": true,
"method.request.querystring.dummy1": true,
"method.request.querystring.dummy2": true
}
EOF
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
}

resource "aws_api_gateway_integration" "research_random_id_get" {
http_method = "${aws_api_gateway_method.research_random_id_get.http_method}"
integration_http_method = "POST"
request_parameters_in_json = <<EOF
integration_request_parameters_in_json = <<EOF
{
"integration.request.path.id": "method.request.path.id",
"integration.request.querystring.dummy1": "method.request.querystring.dummy1",
"integration.request.querystring.dummy2": "method.request.querystring.dummy2"
}
EOF
request_templates = {
"application/json" = <<EOF
integration_request_templates = <<EOF
{
"dummy1": "$input.params('dummy1')",
"dummy2": "$input.params('dummy2')",
"id": "$input.params('id')",
"stage": "$stageVariables.stage"
}
EOF
}
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
type = "AWS"
uri = "arn:aws:apigateway:${var.aws_region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${var.aws_region}:${var.aws_account_id}:function:${module.aws_lambda_function_for_apigateway_get_random.function_name}:$${stageVariables.stage}/invocations"
}

resource "aws_api_gateway_method_response" "research_random_id_get_200" {
http_method = "${aws_api_gateway_method.research_random_id_get.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
status_code = "200"
}

resource "aws_api_gateway_method_response" "research_random_id_get_400" {
http_method = "${aws_api_gateway_method.research_random_id_get.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
status_code = "400"
}

resource "aws_api_gateway_method_response" "research_random_id_get_500" {
http_method = "${aws_api_gateway_method.research_random_id_get.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
status_code = "500"
}

resource "aws_api_gateway_integration_response" "research_random_id_get_200" {
depends_on = ["aws_api_gateway_integration.research_random_id_get"]
http_method = "${aws_api_gateway_method.research_random_id_get.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
status_code = "${aws_api_gateway_method_response.research_random_id_get_200.status_code}"
}

resource "aws_api_gateway_integration_response" "research_random_id_get_400" {
depends_on = ["aws_api_gateway_integration.research_random_id_get"]
http_method = "${aws_api_gateway_method.research_random_id_get.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
response_templates = {
"application/json" = <<EOF
method_request_parameters_in_json = <<EOF
{
"error": "$input.path('$.errorMessage').substring(5)"
"method.request.path.id": true,
"method.request.querystring.dummy1": true,
"method.request.querystring.dummy2": true
}
EOF
}
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
selection_pattern = "400: .+"
status_code = "${aws_api_gateway_method_response.research_random_id_get_400.status_code}"
}

resource "aws_api_gateway_integration_response" "research_random_id_get_500" {
depends_on = ["aws_api_gateway_integration.research_random_id_get"]
http_method = "${aws_api_gateway_method.research_random_id_get.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
response_templates = {
"application/json" = <<EOF
{
"error": "$input.path('$.errorMessage').substring(5)"
}
EOF
}
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
selection_pattern = "500: .+"
status_code = "${aws_api_gateway_method_response.research_random_id_get_500.status_code}"
}

# }}} GET /random/{id}

# {{{ PUT /random/{id}

resource "aws_api_gateway_method" "research_random_id_put" {
authorization = "NONE"
# PUT /random/{id}
module "aws_api_gateway_method_research_random_id_put" {
source = "./modules/aws_api_gateway_method_for_lambda_function"
aws_region = "${var.aws_region}"
aws_account_id = "${var.aws_account_id}"
error_status_codes = "400,500"
function_name = "${module.aws_lambda_function_for_apigateway_put_random.function_name}"
http_method = "PUT"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
}

resource "aws_api_gateway_integration" "research_random_id_put" {
http_method = "${aws_api_gateway_method.research_random_id_put.http_method}"
integration_http_method = "POST"
request_templates = {
"application/json" = <<EOF
integration_request_templates = <<EOF
{
"dummy1": "$input.path('$.dummy1')",
"dummy2": "$input.path('$.dummy2')",
"id": "$input.params('id')",
"stage": "$stageVariables.stage"
}
EOF
}
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
type = "AWS"
uri = "arn:aws:apigateway:${var.aws_region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${var.aws_region}:${var.aws_account_id}:function:${module.aws_lambda_function_for_apigateway_put_random.function_name}:$${stageVariables.stage}/invocations"
}

resource "aws_api_gateway_method_response" "research_random_id_put_200" {
http_method = "${aws_api_gateway_method.research_random_id_put.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
status_code = "200"
}

resource "aws_api_gateway_method_response" "research_random_id_put_400" {
http_method = "${aws_api_gateway_method.research_random_id_put.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
status_code = "400"
}

resource "aws_api_gateway_method_response" "research_random_id_put_500" {
http_method = "${aws_api_gateway_method.research_random_id_put.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
status_code = "500"
}

resource "aws_api_gateway_integration_response" "research_random_id_put_200" {
depends_on = ["aws_api_gateway_integration.research_random_id_put"]
http_method = "${aws_api_gateway_method.research_random_id_put.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
status_code = "${aws_api_gateway_method_response.research_random_id_put_200.status_code}"
}

resource "aws_api_gateway_integration_response" "research_random_id_put_400" {
depends_on = ["aws_api_gateway_integration.research_random_id_put"]
http_method = "${aws_api_gateway_method.research_random_id_put.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
response_templates = {
"application/json" = <<EOF
{
"error": "$input.path('$.errorMessage').substring(5)"
}
EOF
}
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
selection_pattern = "400: .+"
status_code = "${aws_api_gateway_method_response.research_random_id_put_400.status_code}"
}

resource "aws_api_gateway_integration_response" "research_random_id_put_500" {
depends_on = ["aws_api_gateway_integration.research_random_id_put"]
http_method = "${aws_api_gateway_method.research_random_id_put.http_method}"
resource_id = "${aws_api_gateway_resource.research_random_id.id}"
response_templates = {
"application/json" = <<EOF
{
"error": "$input.path('$.errorMessage').substring(5)"
}
EOF
}
rest_api_id = "${aws_api_gateway_rest_api.research.id}"
selection_pattern = "500: .+"
status_code = "${aws_api_gateway_method_response.research_random_id_put_500.status_code}"
}

# }}} PUT /random/{id}

# vim: set fdm=marker:
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
resource "aws_api_gateway_method" "method" {
authorization = "${var.authorization}"
http_method = "${var.http_method}"
request_parameters_in_json = "${var.method_request_parameters_in_json}"
resource_id = "${var.resource_id}"
rest_api_id = "${var.rest_api_id}"
}

resource "aws_api_gateway_integration" "integration" {
depends_on = ["aws_api_gateway_method.method"]
http_method = "${var.http_method}"
integration_http_method = "POST"
request_parameters_in_json = "${var.integration_request_parameters_in_json}"
request_templates = {
"application/json" = "${var.integration_request_templates}"
}
resource_id = "${var.resource_id}"
rest_api_id = "${var.rest_api_id}"
type = "AWS"
uri = "arn:aws:apigateway:${var.aws_region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${var.aws_region}:${var.aws_account_id}:function:${var.function_name}:$${stageVariables.stage}/invocations"
}

resource "aws_api_gateway_method_response" "method_response_200" {
depends_on = ["aws_api_gateway_method.method"]
http_method = "${var.http_method}"
resource_id = "${var.resource_id}"
response_parameters_in_json = "${var.method_response_parameters_in_json}"
rest_api_id = "${var.rest_api_id}"
status_code = "200"
}

resource "aws_api_gateway_integration_response" "integration_response_200" {
depends_on = [
"aws_api_gateway_integration.integration",
"aws_api_gateway_method_response.method_response_200"
]
http_method = "${var.http_method}"
resource_id = "${var.resource_id}"
response_parameters_in_json = "${var.integration_response_parameters_in_json}"
response_templates = {
"application/json" = "${var.integration_response_templates}"
}
rest_api_id = "${var.rest_api_id}"
status_code = "200"
}

resource "aws_api_gateway_method_response" "method_response_error" {
count = "${length(split(",", var.error_status_codes))}"
depends_on = ["aws_api_gateway_method.method"]
http_method = "${var.http_method}"
resource_id = "${var.resource_id}"
rest_api_id = "${var.rest_api_id}"
status_code = "${element(split(",", var.error_status_codes), count.index)}"
}

resource "aws_api_gateway_integration_response" "integration_response_error" {
count = "${length(split(",", var.error_status_codes))}"
depends_on = ["aws_api_gateway_integration.integration"]
http_method = "${var.http_method}"
resource_id = "${var.resource_id}"
response_templates = {
"application/json" = <<EOF
{ "error": "$input.path('$.errorMessage').substring(5)" }
EOF
}
rest_api_id = "${var.rest_api_id}"
selection_pattern = "${element(split(",", var.error_status_codes), count.index)}: .+"
status_code = "${element(split(",", var.error_status_codes), count.index)}"
}
Empty file.
Loading

0 comments on commit f94add8

Please sign in to comment.