4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gakken LEAPAdvent Calendar 2024

Day 11

Google CloudのAPI GatewayでAPI Keyを使用したAPIを作成する - Terraform編

Last updated at Posted at 2024-12-10

はじめに

どうも、@to-fmakです。前回はGoogle CloudのAPI GatewayでAPI Keyを使用したAPIを作成する方法をご紹介したのですが、今回はTerraformでの実現方法について簡単に共有したいと思います。

サンプルコード

以下、サンプルコードです。実際に利用する際に、変数とproviderを修正し、OpenAPIやIAMなどの設計を適宜行ってから適用してください。

providers.tf
terraform {
  required_version = "~> 1.9.0"

  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "~> 6.10.0"
    }

    google-beta = {
      source  = "hashicorp/google-beta"
      version = "~> 6.12.0"
    }
  }
}

provider "google" {
  project = var.project_id
  region  = var.region
}

main.tf
resource "google_api_gateway_api" "sample" {
  provider = google-beta
  api_id   = "sample-api"
}

resource "google_api_gateway_api_config" "sample" {
  provider      = google-beta
  api           = google_api_gateway_api.sample.api_id
  api_config_id = "sample-api-config"

  gateway_config {
    backend_config {
      google_service_account = google_service_account.sample.email
    }
  }

  openapi_documents {
    document {
      path = "spec.yaml"
      contents = filebase64("test-fixtures/openapi.yaml")
    }
  }
}

resource "google_api_gateway_gateway" "sample" {
  provider   = google-beta
  api_config = google_api_gateway_api_config.sample.id
  gateway_id = "sample-api-gateway"
}

service_account.tf
resource "google_service_account" "sample" {
  account_id   = "api-gateway-sa"
  display_name = "API Gateway Service Account"
}

api_key.tf
resource "google_project_service" "sample" {
  service = google_api_gateway_api.sample.managed_service
}

resource "google_apikeys_key" "sample" {
  name         = "sample-api-key"
  display_name = "sample-api-key"

  restrictions {
    api_targets {
      service = google_project_service.sample.service
    }
  }
}

variables.tf
variable "project_id" {
  type = string
}

variable "region" {
  type = string
}

ポイントの解説

過去記事にも記載しましたが、API Gatewayで作成したAPIの認証にAPIキーを使用する場合は、サービスでAPIキーのサポートを有効にする必要があります。

詳しくは公式ドキュメントをご確認ください。

Terraformで該当処理を行いたい場合、まずgoogle_project_serviceリソースで作成済みのgoogle_api_gateway_apiリソースのmanaged_serviceに対してAPIの有効化を行います。

resource "google_project_service" "sample" {
  service = google_api_gateway_api.sample.managed_service
}

次に、google_apikeys_keyリソースのrestrictionsのapi_targetsブロックで、該当APIキーを対象APIの使用に限定するよう権限設定を行います。

resource "google_apikeys_key" "sample" {
  name         = "sample-api-key"
  display_name = "sample-api-key"

  restrictions {
    api_targets {
      service = google_project_service.sample.service
    }
  }
}

参考URL

エンジニア募集

Gakken LEAP では教育をアップデートしていきたいエンジニアを絶賛大募集しています!!
ぜひお気軽にカジュアル面談へお越しください!!

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?