🍎

terraformでAWS API Gateway v2 (HTTP API)を使ってRESTful APIを作成する

2023/02/14に公開

はじめに

株式会社 MamaWell でエンジニアのお手伝いをしている、kkb0318 です。

今回は terraform を使って API Gateway の HTTP API を作成してみました。

API Gateway を使用する際は REST API を選ぶことが多いと思いますが、REST API 以外にも HTTP API という機能があります。
どちらも RESTful ですが、HTTP API はより機能を絞ったサービスになるため、REST API の簡易版といえます。
以下のような状況においては、HTTP API はよい選択肢になると思います。

  • 複雑な設定を必要としない
  • Lambda 以外のサービスと連携する必要がない
  • コストを最低限に抑えたい

本記事では terraform を用いて HTTP API の設定をする方法について解説します。

API Gateway の構築

HTTP API を terraform で記述する場合は、aws_apigatewayv2_api を使用します。

resource "aws_apigatewayv2_api" "main" {
  name          = var.apigw_name
  protocol_type = "HTTP"
}

route, integration の設定

resource "aws_apigatewayv2_route" "main" {
  api_id    = aws_apigatewayv2_api.main.id
  route_key = "GET /"
  target    = "integrations/${aws_apigatewayv2_integration.main.id}"
}

resource "aws_apigatewayv2_integration" "main" {
  api_id               = aws_apigatewayv2_api.main.id
  connection_type      = "INTERNET"
  integration_method   = "POST"
  integration_uri      = aws_lambda_function.func1.invoke_arn
  integration_type     = "AWS_PROXY"
}

route 設定では、API Gateway で呼び出される API の URL パスを設定したり、HTTP method (GET、POST、PUT、DELETE など) を設定できます。

connection_typeは、INTERNETVPC_LINKの二択です。ECS や ALB など、VPC 内のプライベートサブネット内のリソースにアクセスしたい場合はVPC_LINKを使用しますが、今回のような Lambda 接続においては不要ですので、INTERNETにしています。
integration_typeは、VPC_LINKでプライベート統合したい場合などはHTTP_PROXYになりますが、今回はAWS_PROXYに設定します。
integration_uriには、Lambda のエンドポイントを指定しています。この設定を有効にするためにはintegration_typeAWS_PROXYに設定しておく必要があります。
別途aws_lambda_function リソースを作成している前提の設定になっていますが、Lambda の設定については割愛します。

stage の設定

resource "aws_apigatewayv2_stage" "main" {
  api_id      = aws_apigatewayv2_api.main.id
  auto_deploy = true
  name        = var.apigw_stage_name
}

auto_deploy = true にすることで、API Gateway の設定に変更があった場合に勝手にデプロイしてくれるようになります。

deployment に関連する設定が不要になることから、REST API の場合と比べてとても簡素になった印象です。

さいごに

REST API とは少し書き方が違うので戸惑うところもありましたが、一度作ってしまえば簡単な設定だけでリソースを立ち上げることができるのでおすすめです。

一方で、はじめにで記載したとおり、REST API と比べて HTTP API にはいくつか機能的な制限があるため注意が必要です。

機能の比較の詳細については公式のページを参照ください。

エンジニア募集

株式会社 MamaWell ではエンジニアを募集しています。

勤務形態はリモートで、働く曜日や日時は自由です。副業・アルバイトも募集中です。

モダンな開発に興味がある方、新規プロダクト立ち上げに興味のある方はぜひ、以下までご連絡ください!

https://mamawell.jp/engineer_recruit/

Discussion