-
Notifications
You must be signed in to change notification settings - Fork 0
/
aws_apigateway.tf
174 lines (157 loc) · 5.33 KB
/
aws_apigateway.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#####################################
#API Gateway Settings
#####################################
resource "aws_api_gateway_rest_api" "sample" {
name = "sample"
description = "sample"
}
resource "aws_api_gateway_api_key" "sample" {
name = "sample"
}
#############################################
#POST method
#############################################
resource "aws_api_gateway_model" "post-sample" {
rest_api_id = "${aws_api_gateway_rest_api.sample.id}"
name = "PostSample"
description = "post-sample"
content_type = "application/json"
schema = <<EOF
{
"type" : "object",
"properties" : {
"key": { "type": "string" }
}
}
EOF
}
resource "aws_api_gateway_method" "post-sample" {
rest_api_id = "${aws_api_gateway_rest_api.sample.id}"
resource_id = "${aws_api_gateway_rest_api.sample.root_resource_id}"
http_method = "POST"
authorization = "NONE"
api_key_required = "true"
request_models = {
"application/json" = "${aws_api_gateway_model.post-sample.name}"
}
}
resource "aws_api_gateway_integration" "post-sample" {
rest_api_id = "${aws_api_gateway_rest_api.sample.id}"
resource_id = "${aws_api_gateway_rest_api.sample.root_resource_id}"
http_method = "${aws_api_gateway_method.post-sample.http_method}"
type = "AWS"
uri = "arn:aws:apigateway:ap-northeast-1:dynamodb:action/PutItem"
integration_http_method = "POST"
credentials = "${aws_iam_role.post-sample.arn}"
passthrough_behavior = "WHEN_NO_TEMPLATES"
request_templates = {
"application/json" = "${file("request_templates/post-sample.json")}"
}
}
resource "aws_api_gateway_integration_response" "post-sample" {
rest_api_id = "${aws_api_gateway_rest_api.sample.id}"
resource_id = "${aws_api_gateway_rest_api.sample.root_resource_id}"
http_method = "${aws_api_gateway_method.post-sample.http_method}"
status_code = "${aws_api_gateway_method_response.post-sample.status_code}"
selection_pattern = "200"
response_templates = {
"application/json" = "{'message':'Success'}"
}
}
resource "aws_api_gateway_method_response" "post-sample" {
rest_api_id = "${aws_api_gateway_rest_api.sample.id}"
resource_id = "${aws_api_gateway_rest_api.sample.root_resource_id}"
http_method = "${aws_api_gateway_method.post-sample.http_method}"
status_code = "200"
response_models = {
"application/json" = "Empty"
}
}
#############################################
#GET method
#############################################
resource "aws_api_gateway_model" "get-sample" {
rest_api_id = "${aws_api_gateway_rest_api.sample.id}"
name = "GetSample"
description = "get-sample"
content_type = "application/json"
schema = <<EOF
{
"type": "array",
"items": {
"type": "object",
"properties": {
"primary_key": {
"type": "string"
}
}
}
}
EOF
}
resource "aws_api_gateway_method" "get-sample" {
rest_api_id = "${aws_api_gateway_rest_api.sample.id}"
resource_id = "${aws_api_gateway_rest_api.sample.root_resource_id}"
http_method = "GET"
authorization = "NONE"
api_key_required = "true"
}
resource "aws_api_gateway_integration" "get-sample" {
rest_api_id = "${aws_api_gateway_rest_api.sample.id}"
resource_id = "${aws_api_gateway_rest_api.sample.root_resource_id}"
http_method = "${aws_api_gateway_method.get-sample.http_method}"
type = "AWS"
uri = "arn:aws:apigateway:ap-northeast-1:dynamodb:action/Scan"
integration_http_method = "POST"
credentials = "${aws_iam_role.get-sample.arn}"
passthrough_behavior = "WHEN_NO_TEMPLATES"
request_templates = {
"application/json" = "${file("request_templates/get-sample.json")}"
}
}
resource "aws_api_gateway_integration_response" "get-sample" {
rest_api_id = "${aws_api_gateway_rest_api.sample.id}"
resource_id = "${aws_api_gateway_rest_api.sample.root_resource_id}"
http_method = "${aws_api_gateway_method.get-sample.http_method}"
status_code = "${aws_api_gateway_method_response.get-sample.status_code}"
selection_pattern = "200"
response_templates = {
"application/json" = "${file("response_templates/get-sample.json")}"
}
}
resource "aws_api_gateway_method_response" "get-sample" {
rest_api_id = "${aws_api_gateway_rest_api.sample.id}"
resource_id = "${aws_api_gateway_rest_api.sample.root_resource_id}"
http_method = "${aws_api_gateway_method.get-sample.http_method}"
status_code = "200"
response_models = {
"application/json" = "${aws_api_gateway_model.get-sample.name}"
}
}
#############################################
#API Gateway Deploy
#############################################
resource "aws_api_gateway_deployment" "sample" {
depends_on = [
"aws_api_gateway_method.get-sample",
"aws_api_gateway_method.post-sample",
]
rest_api_id = "${aws_api_gateway_rest_api.sample.id}"
stage_name = "sample"
}
#############################################
#API Gateway Plan
#############################################
resource "aws_api_gateway_usage_plan" "sample" {
name = "sample"
description = "sample"
api_stages {
api_id = "${aws_api_gateway_rest_api.sample.id}"
stage = "${aws_api_gateway_deployment.sample.stage_name}"
}
}
resource "aws_api_gateway_usage_plan_key" "sample" {
key_id = "${aws_api_gateway_api_key.sample.id}"
key_type = "API_KEY"
usage_plan_id = "${aws_api_gateway_usage_plan.sample.id}"
}