Я использовал Terraform для создания структуры в AWS. Все было хорошо, но теперь я застрял, потому что мне нужно реализовать API с API Gateway + Lambda. Я действительно много искал, но документы не помогают. В учебнике HashCorp показаны только простые URL-адреса.
Итак, как я могу передать строки запроса или параметры пути в моих URL в API Gateway + Lambda? У меня также есть сомнения относительно того, стоит ли мне использовать Proxy_Lambda или просто Lambda.
Это код шлюза API:
resource "aws_api_gateway_rest_api" "accountant_api" {
name = "dev-test"
description = "test"
}
resource "aws_api_gateway_resource" "proxy" {
rest_api_id = "${aws_api_gateway_rest_api.accountant_api.id}"
parent_id = "${aws_api_gateway_rest_api.accountant_api.root_resource_id}"
path_part = "emailAccountant"
}
resource "aws_api_gateway_method" "proxy" {
rest_api_id = "${aws_api_gateway_rest_api.accountant_api.id}"
resource_id = "${aws_api_gateway_resource.proxy.id}"
http_method = "GET"
authorization = "NONE"
}
resource "aws_api_gateway_integration" "lambda" {
rest_api_id = "${aws_api_gateway_rest_api.accountant_api.id}"
resource_id = "${aws_api_gateway_method.proxy.resource_id}"
http_method = "${aws_api_gateway_method.proxy.http_method}"
integration_http_method = "POST"
type = "AWS"
uri = "${aws_lambda_function.lambda_get_email_sent.invoke_arn}"
}
resource "aws_api_gateway_deployment" "example" {
depends_on = [
"aws_api_gateway_integration.lambda"
]
rest_api_id = "${aws_api_gateway_rest_api.accountant_api.id}"
stage_name = "dev"
}
Лямбда-разрешение:
resource "aws_lambda_permission" "apigw" {
statement_id = "AllowAPIGatewayInvoke"
action = "lambda:InvokeFunction"
function_name = "${aws_lambda_function.lambda_get_email_sent.arn}"
principal = "apigateway.amazonaws.com"
# The /*/* portion grants access from any method on any resource
# within the API Gateway "REST API".
source_arn = "${aws_api_gateway_deployment.example.execution_arn}/*/*"
}