よっしー
こんにちは。よっしーです(^^)
今日は、TerraformでGCPのリソース作成について解説しています。
背景
前回の記事の続きになります。
実施内容
main.tfに下記の緑部分を更新します。
resource "google_compute_instance" "vm_instance" {
name = "terraform-instance"
machine_type = "e2-micro"
tags = ["web", "dev"]
boot_disk {
initialize_params {
image = "cos-cloud/cos-stable"
}
}
network_interface {
network = google_compute_network.vpc_network.name
access_config {
}
}
}
# 実行プランの作成
terraform plan
# 変更を適用
terraform apply
# 状態ファイルの確認
terraform show
解説
terraform plan
terraform planを実行すると下記のような出力になります。
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-/+ destroy and then create replacement
Terraform will perform the following actions:
# google_compute_instance.vm_instance must be replaced
-/+ resource "google_compute_instance" "vm_instance" {
~ cpu_platform = "Intel Broadwell" -> (known after apply)
~ current_status = "RUNNING" -> (known after apply)
~ effective_labels = {} -> (known after apply)
この Terraform の実行計画出力は、既存のリソースを破棄して新しいリソースを作成する必要があることを示しています。詳細な解説は以下の通りです:
- アクション表示:
-/+
シンボルは、リソースが「破棄されてから再作成される」(destroy and then create replacement)ことを示しています。
- 対象リソース:
google_compute_instance.vm_instance
が置き換えられる必要があります。
- 変更の詳細:
cpu_platform
:- 現在の値: “Intel Broadwell”
- 新しい値: 適用後に決定される(known after apply)
current_status
:- 現在の値: “RUNNING”
- 新しい値: 適用後に決定される
effective_labels
:- 現在の値: 空のマップ {}
- 新しい値: 適用後に決定される
- リソースの置き換え理由:
- この出力からは具体的な理由は明示されていませんが、通常、インスタンスタイプの変更やブートディスクの設定変更など、インプレース更新ができない変更が行われた場合にこのような置き換えが必要になります。
- 影響:
- この操作により、既存のインスタンスは破棄され、新しいインスタンスが作成されます。
- これは、インスタンス上のデータが失われる可能性があることを意味します。重要なデータがある場合は、事前にバックアップを取る必要があります。
- 注意点:
- CPU プラットフォームと現在のステータスが「適用後に決定される」となっているのは、新しいインスタンスが作成されるまでこれらの値が確定しないためです。
effective_labels
も同様に、新しいインスタンスが作成されるまで確定しません。
このような大きな変更を行う前に、変更の影響を十分に理解し、必要なバックアップを取ることが重要です。また、ダウンタイムが発生する可能性があるため、適切なメンテナンス時間帯に実行することを検討してください。
強制置換となる理由は下記の出力から読み取ることができます。
~ initialize_params {
- enable_confidential_compute = false -> null
~ image = "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20240815" -> "cos-cloud/cos-stable" # forces replacement
~ labels = {} -> (known after apply)
~ provisioned_iops = 0 -> (known after apply)
~ provisioned_throughput = 0 -> (known after apply)
- resource_manager_tags = {} -> null
~ size = 10 -> (known after apply)
~ type = "pd-standard" -> (known after apply)
# (1 unchanged attribute hidden)
}
この出力は、Google Compute Engine インスタンスのブートディスク初期化パラメータの変更を示しています。詳細な解説は以下の通りです:
initialize_params
ブロック:
このブロックはインスタンスのブートディスクの初期設定を定義します。- 変更点:
enable_confidential_compute
:- 現在の値: false
- 新しい値: null(設定が削除される)
image
:- 現在の値: “https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20240815”
- 新しい値: “cos-cloud/cos-stable”
- この変更が置換を強制する(forces replacement)主な理由です。OSイメージがDebian 11からContainer-Optimized OS (COS)に変更されます。
labels
,provisioned_iops
,provisioned_throughput
,size
,type
:
これらの値は全て「適用後に決定される」(known after apply)となっています。resource_manager_tags
:- 現在の値: 空のマップ {}
- 新しい値: null(設定が削除される)
- 影響と重要性:
- OSイメージの変更(DebianからCOS)は大きな変更で、インスタンスの完全な再作成を必要とします。
- COSはコンテナ向けに最適化されたOSであり、この変更はインスタンスの用途が変わることを示唆しています。
- ディスクのサイズやタイプが「適用後に決定される」となっているため、これらも変更される可能性があります。
- 注意点:
- この変更により、既存のインスタンス上のデータやカスタム設定は失われます。
- 新しいOSイメージ(COS)は、以前のDebian環境とは大きく異なります。アプリケーションの互換性を確認する必要があります。
- パフォーマンスや課金に影響を与える可能性のある「provisioned_iops」や「provisioned_throughput」の値が変更される可能性があります。
- 推奨事項:
- この変更を適用する前に、既存のデータのバックアップを取ることが極めて重要です。
- 新しい環境(COS)でアプリケーションが正常に動作することを事前にテストすることをお勧めします。
- 本番環境に適用する前に、ステージング環境で変更をテストすることを検討してください。
おわりに
今日は、 TerraformでGCPのリソース作成について解説しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント