そのほか
2024/02/26
與田 龍人

TerraformでGoogle Cloud Platformのオートスケーリングを実装する方法

この記事では、Terraformを使用してGoogle Cloud Platform(GCP)でオートスケーリングを実装する方法を説明します。オートスケーリングを使用することで、アプリケーションの負荷に応じて自動的にリソースを増減させることができ、コストを最適化し、サービスの可用性を向上させることができます。

概要

この記事では、Terraformを使用してGoogle Cloud Platform(GCP)でオートスケーリングを実装する方法を説明します。オートスケーリングを使用することで、アプリケーションの負荷に応じて自動的にリソースを増減させることができ、コストを最適化し、サービスの可用性を向上させることができます。


参考記事


Terraform公式ドキュメント


 

オートスケーリングについて

オートスケーリングは、アプリケーションの負荷が変動に応じて、自動的にリソースを増減させる機能です。Google Cloud Platformでは、Compute Engineのインスタンスグループとオートスケーラーを組み合わせて、オートスケーリングを実現することができます。

Terraformでのオートスケーリングの実装

まず、Terraformを使用してVMインスタンスのテンプレートを作成します。このテンプレートは、VMの設定を定義し、後で使用するインスタンスグループによって参照されます。



// main.tf

terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "3.72.0"
}
}
}

provider "google" {
credentials = file(".terraform/providers/registry.terraform.io/hashicorp/google/3.72.0/darwin_arm64/gcp.json")
project = "your-project-id"
region = "your-region"
}

resource "google_compute_instance_template" "example" {
name = "example-template"
machine_type = "e2-medium"
can_ip_forward = false

disk {
source_image = "debian-cloud/debian-10"
}

network_interface {
network = "default"
}
}



次に、インスタンスグループマネージャーを作成します。これは、インスタンステンプレートを基にしてVMインスタンスを作成し、それらを管理するためのリソースです。



// main.tf (続き)

resource "google_compute_target_pool" "example" {
name = "example-target-pool"
}

resource "google_compute_instance_group_manager" "example" {
name = "example-instance-group"
zone = "your-zone"

version {
instance_template = google_compute_instance_template.example.self_link
name = "primary"
}

target_pools = [google_compute_target_pool.example.self_link]
base_instance_name = "example-instance"
}



最後に、オートスケーリングポリシーを定義します。これにより、インスタンスグループのインスタンス数が自動的に調整されます。



// main.tf (続き)

resource "google_compute_autoscaler" "example" {
name = "example-autoscaler"
zone = "your-zone"
target = google_compute_instance_group_manager.example.self_link

autoscaling_policy {
max_replicas = 5 #最大インスタンス数
min_replicas = 1 #最小インスタンス数
cooldown_period_sec = 60

cpu_utilization {
target = 0.5
}
}
}


以上で、Terraformを使用してGoogle Cloud Platformでオートスケーリングを実装する手順が完了しました。これにより、アプリケーションの負荷に応じて自動的にリソースが増減されるようになります。



 

まとめ

今回は、Terraformを使用してGoogle Cloud Platformでオートスケーリングを実装する方法について説明しました。


また注意点として、オートスケーリングは、手動でインスタンスを停止させても、次のインスタンスがコールドスタンバイとして待機しているため、次のインスタンスが自動的に稼働してしまいます。そのため、インスタンスを停止させたい場合には手動でオートスケーリングポリシーを一時的に停止するか、インスタンスグループごと停止させる必要があります。


私自身、稼働中のインスタンスを停止させるだけで、オートスケーリングは止まると思っていたので、止まらずに少し焦りました(汗)


Terraformを使用すれば、一つのコマンドで、インフラを準備することが可能ですが、クラウド側の挙動がイメージ出来ていなければこういったトラブルも起きてしまいます。


皆さんも今回の事例を参考に、TerraformでのIac(Infrastructure-as-code)にチャレンジしてみてください!


New call-to-action