如何将 AWS HTTP API(而非 REST API)与 terraform 一起使用?
How can I use an AWS HTTP API (not REST API) with terraform?
Amazon 为 aws_apigatewayv2_api
资源发布了 HTTP APIs for their api gateway product fairly recently, and I'd like to use Terraform to spin some up. I saw that Terraform has documentation,它将创建网关本身,但我找不到路线、阶段或我将要创建的任何其他类型资源的文档在我的网关中需要。
Terraform 是否还没有完全支持 HTTP API,还是我在某处遗漏了一些文档?
更新:
根据 closing comment on issue #11148, the AWS API Gateway HTTP API resources were first generally supported in terraform-aws-provider starting in v3.3.0。以后的版本已经添加了新功能。
历史答案:
实际上,Terraform AWS 提供商似乎还不支持 API 网关 HTTP API.
所需的所有资源
aws_apigatewayv2_api
资源于 2020 年 3 月 12 日在 terraform-provider-aws 2.53.0 中发布,但是 aws_apigatewayv2_route
、aws_apigatewayv2_stage
和 aws_apigatewayv2_stage
等资源的实现aws_apigatewayv2_integration
尚未合并。
terraform-provider-aws 问题 #11148 有指向新资源的未决拉取请求的链接。
您使用 http v2 api 所需的一切现在都可以在 terraform 中使用。有一个关于创建它们的很好的教程 here。
本质上,对于简单的网关+lambda 组合,您需要这样的东西:
# Lambda function
resource "aws_lambda_function" "lambda" {
# ...
}
# HTTP API
resource "aws_apigatewayv2_api" "api" {
name = "api-${random_id.id.hex}"
protocol_type = "HTTP"
target = aws_lambda_function.lambda.arn
}
# Permission
resource "aws_lambda_permission" "apigw" {
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.lambda.arn
principal = "apigateway.amazonaws.com"
source_arn = "${aws_apigatewayv2_api.api.execution_arn}/*/*"
}
Amazon 为 aws_apigatewayv2_api
资源发布了 HTTP APIs for their api gateway product fairly recently, and I'd like to use Terraform to spin some up. I saw that Terraform has documentation,它将创建网关本身,但我找不到路线、阶段或我将要创建的任何其他类型资源的文档在我的网关中需要。
Terraform 是否还没有完全支持 HTTP API,还是我在某处遗漏了一些文档?
更新:
根据 closing comment on issue #11148, the AWS API Gateway HTTP API resources were first generally supported in terraform-aws-provider starting in v3.3.0。以后的版本已经添加了新功能。
历史答案:
实际上,Terraform AWS 提供商似乎还不支持 API 网关 HTTP API.
所需的所有资源aws_apigatewayv2_api
资源于 2020 年 3 月 12 日在 terraform-provider-aws 2.53.0 中发布,但是 aws_apigatewayv2_route
、aws_apigatewayv2_stage
和 aws_apigatewayv2_stage
等资源的实现aws_apigatewayv2_integration
尚未合并。
terraform-provider-aws 问题 #11148 有指向新资源的未决拉取请求的链接。
您使用 http v2 api 所需的一切现在都可以在 terraform 中使用。有一个关于创建它们的很好的教程 here。
本质上,对于简单的网关+lambda 组合,您需要这样的东西:
# Lambda function
resource "aws_lambda_function" "lambda" {
# ...
}
# HTTP API
resource "aws_apigatewayv2_api" "api" {
name = "api-${random_id.id.hex}"
protocol_type = "HTTP"
target = aws_lambda_function.lambda.arn
}
# Permission
resource "aws_lambda_permission" "apigw" {
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.lambda.arn
principal = "apigateway.amazonaws.com"
source_arn = "${aws_apigatewayv2_api.api.execution_arn}/*/*"
}