如何将 AWS HTTP API(而非 REST API)与 terraform 一起使用?

How can I use an AWS HTTP API (not REST API) with terraform?

A​​mazon 为 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_routeaws_apigatewayv2_stageaws_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}/*/*"
}