はじめに
どうも、@to-fmakです。前回はGoogle CloudのAPI GatewayでAPI Keyを使用したAPIを作成する方法をご紹介したのですが、今回はTerraformでの実現方法について簡単に共有したいと思います。
サンプルコード
以下、サンプルコードです。実際に利用する際に、変数とproviderを修正し、OpenAPIやIAMなどの設計を適宜行ってから適用してください。
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
}
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"
}
resource "google_service_account" "sample" {
account_id = "api-gateway-sa"
display_name = "API Gateway Service Account"
}
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
}
}
}
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
-
https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/api_gateway_api
-
https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/api_gateway_gateway
-
https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/apikeys_key
エンジニア募集
Gakken LEAP では教育をアップデートしていきたいエンジニアを絶賛大募集しています!!
ぜひお気軽にカジュアル面談へお越しください!!