チェックポイント
Create a VM instance in dynamic zone with Terraform
/ 100
Terraform の基礎
GSP156
概要
Terraform を使用すると、クラウド インフラストラクチャを安全かつ予想どおりに作成、変更、改善できます。Terraform は、API を宣言的な構成ファイルにコード化するオープンソースのツールです。ファイルは、同僚間で共有したり、コードとして扱ったりできます。また、編集、レビュー、バージョン管理を行うこともできます。
目標
このラボでは、次のタスクを行う方法を学びます。
-
Google Cloud で Terraform の使用を始める。
-
Terraform をインストール バイナリからインストールする。
-
Terraform を使用して VM インスタンスのインフラストラクチャを作成する。
設定と要件
Qwiklabs の設定
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
この Qwiklabs ハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
必要なもの
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、ラボでは使用しないでください。
注: Chrome OS デバイスを使用している場合は、シークレット ウィンドウを開いてこのラボを実行してください。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。
-
[ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。
重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後このタブで Cloud Console が開きます。
Google Cloud Shell の有効化
Google Cloud Shell は、デベロッパー ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Google Cloud Shell では、コマンドラインで GCP リソースにアクセスできます。
GCP Console の右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。
[続行] をクリックします。
環境のプロビジョニングと接続には少し時間がかかります。接続すると、すでに認証されており、プロジェクトは PROJECT_ID に設定されています。例えば:
gcloud
は Google Cloud Platform のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
出力:
ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project = <project_ID>
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Terraform とは
Terraform とは、インフラストラクチャを安全かつ効率的に構築、変更、バージョン管理するためのツールです。既存の一般的なサービス プロバイダと自社のカスタム ソリューションを管理できます。
構成ファイルには、Terraform が 1 つのアプリケーションまたはデータセンター全体を実行するために必要なコンポーネントが記述されています。Terraform は、インフラストラクチャを希望の状態にするまでの操作を記載した実行プランを生成し、そのプランを実行して、構成ファイルに記述されたインフラストラクチャを構築します。構成に変更があった場合は変更内容を特定し、増分実行プランを作成して適用することができます。
Terraform で管理できるインフラストラクチャには、コンピューティング インスタンス、ストレージ、ネットワークなどの低レベルのコンポーネントと、DNS エントリ、SaaS 機能などの高レベルのコンポーネントの両方が含まれます。
主な機能
Infrastructure as code
インフラストラクチャの記述には高レベルの構成構文を使用します。これにより、データセンターのブループリントをバージョン管理したり、他のコードと同じように扱ったりできます。インフラストラクチャを共有したり再利用したりすることも可能です。
実行計画
Terraform は、計画手順に沿って実行プランを作成します。実行プランは、apply
コマンドの実行時に Terraform が行う動作を示します。インフラストラクチャ構築時に、予想外の操作が実行されるのを回避できます。
リソースグラフ
Terraform では、すべてのリソースのグラフが作成され、依存しないリソースの作成と変更が同時に実行されます。こうしてインフラストラクチャは効率的に構築され、インフラストラクチャ内の依存関係も把握できます。
変更の自動化
インフラストラクチャには、最小限の手作業で、複雑な変更を適用できます。上述の実行プランとリソースグラフを使うと、何がどのような順番で変更されるかがわかるため、多くの人的ミスを回避できます。
Terraform のインストールの確認
Terraform は、Cloud Shell にプリインストールされています。
-
新しい Cloud Shell タブを開いて、Terraform が利用できることを確認します。
terraform
結果のヘルプ出力は次のようになります。
Usage: terraform [--version] [--help] <command> [args]
The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.
Common commands:
apply Builds or changes infrastructure
console Interactive console for Terraform interpolations
destroy Destroy Terraform-managed infrastructure
env Workspace management
fmt Rewrites config files to canonical format
get Download and install modules for the configuration
graph Create a visual graph of Terraform resources
import Import existing infrastructure into Terraform
init Initialize a Terraform working directory
output Read an output from a state file
plan Generate and show an execution plan
providers Prints a tree of the providers used in the configuration
push Upload this Terraform module to Atlas to run
refresh Update local state file against real resources
show Inspect Terraform state or plan
taint Manually mark a resource for recreation
untaint Manually unmark a resource as tainted
validate Validates the Terraform files
version Prints the Terraform version
workspace Workspace management
All other commands:
debug Debug output management (experimental)
force-unlock Manually unlock the terraform state
state Advanced state management
インフラストラクチャを構築する
Terraform がインストールされたら、インフラストラクチャの作成をすぐに開始できます。
構成
インフラストラクチャを説明するために Terraform で使用される一連のファイルは、Terraform 構成
と呼ばれています。このセクションでは、1 つの VM インスタンスを起動する最初の構成を記述します。構成ファイルの形式についてはこちらのドキュメントをご覧ください。構成ファイルの作成には JSON を使用することをおすすめします。
-
Cloud Shell で、次のコマンドを使って
instance.tf
という名前の空の構成ファイルを作成します。
touch instance.tf
-
Cloud Shell ツールバーの [エディタを開く] をクリックします。
Cloud Shell とコードエディタを切り替えるには、必要に応じて [エディタを開く] または [ターミナルを開く] をクリックするか、[新しいウィンドウで開く](イメージ)をクリックして別のタブでエディタを開いたままにします。 -
instance.tf
ファイルをクリックし、ファイルに次の内容を追加して、<PROJECT_ID>
を Google Cloud プロジェクト ID に置き換えます。
resource "google_compute_instance" "terraform" {
project = "<PROJECT_ID>"
name = "terraform"
machine_type = "n1-standard-1"
zone = "us-central1-a"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = "default"
access_config {
}
}
}
これは完全な構成なので、このまま Terraform で適用できます。全体的な構造は直感的で単純です。
instance.tf
ファイルの「resource」ブロックは、インフラストラクチャ内に存在するリソースを定義します。リソースは、VM インスタンスなどの物理コンポーネントの場合もあります。
resource ブロックには、ブロックを開く前にリソースタイプとリソース名の 2 つの文字列があります。このラボでは、リソースタイプは google_compute_instance
で、リソース名は terraform
です。タイプの接頭辞はプロバイダに対応しているため、google_compute_instance
と入力すると、Google
プロバイダが管理するリソースであることを Terraform が自動的に認識します。
resource ブロック自体は、リソースの記載に必要な構成になっています。
-
Cloud Shell で、新しいファイルが追加されたことと、ディレクトリにほかの
*.tf
ファイルが含まれていないことを確認します。Terraform はすべての *.tf ファイルを読み込むからです。
ls
初期化
新しい構成に対して(または既存の構成をバージョン管理からチェックアウトした後に)最初に実行するコマンドは、terraform init
です。このコマンドを実行すると、それ以降のコマンドで使用されるさまざまなローカル設定やローカルデータが初期化されます。
Terraform ではプラグイン ベースのアーキテクチャを使用して、さまざまなインフラストラクチャやサービス プロバイダをサポートしています。それぞれの「プロバイダ」は、Terraform 自体とは別に配布される、独自にカプセル化されたバイナリです。terraform init
コマンドを実行すると、プロバイダ(この場合は Google プロバイダのみ)のすべてのプロバイダ バイナリが自動的にダウンロード、インストールされ、構成で使用できるようになります。
-
プロバイダ バイナリをダウンロードしてインストールします。
terraform init
Google プロバイダのプラグインが、他のさまざまな簿記関連のファイルとともにダウンロードされて、現在の作業ディレクトリのサブディレクトリにインストールされます。「Initializing provider plugins」というメッセージが表示されます。Google プロジェクトから実行していることが認識されて、Google リソースが取得されます。
Downloading plugin for provider "google" (2.12.0)...
インストールされるプラグインのバージョンが出力に示されます。また、次回も同じバージョンの構成ファイルを指定すると、terraform init
に互換性のあるバージョンがインストールされることが示されます。
-
実行プランを作成します。
terraform plan
このコマンドを実行すると、明示的に無効にしない限り、実行プランが更新されます。その後、構成ファイルで指定した、インフラストラクチャを希望の状態にするのに必要な操作が確定します。このコマンドは、一連の変更を加えた実行プランで予想どおりの状態を実現できるかを、実際のリソースや状態に変更を加えずに確認するのに便利です。たとえば、変更をバージョン管理に保存する前にこのコマンドを実行して、意図したとおりに動作することを確認できます。
変更を適用
-
作成した
instance.tf
ファイルと同じディレクトリで、次のコマンドを実行します。
terraform apply
出力に実行プランが表示されます。実行プランには、実際のインフラストラクチャをこの構成に合わせて変更するために実行される操作が記述されています。出力の形式は、Git などのツールで生成される差分形式に似ています。
google_compute_instance.terraform
の横に +
があります。これは、Terraform でこのリソースが作成されることを意味しています。それに続いて、設定される属性が表示されています。値が <computed>
になっている場合、その属性の値はリソースが作成されるまでわかりません。
出力例:
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# google_compute_instance.default will be created
+ resource "google_compute_instance" "default" {
+ can_ip_forward = false
+ cpu_platform = (known after apply)
+ deletion_protection = false
+ guest_accelerator = (known after apply)
+ id = (known after apply)
+ instance_id = (known after apply)
+ label_fingerprint = (known after apply)
+ machine_type = "n1-standard-1"
+ metadata_fingerprint = (known after apply)
+ name = "terraform"
+ project = "qwiklabs-gcp-42390cc9da8a4c4b"
+ self_link = (known after apply)
+ tags_fingerprint = (known after apply)
+ zone = "us-central1-a"
+ boot_disk {
+ auto_delete = true
+ device_name = (known after apply)
+ disk_encryption_key_sha256 = (known after apply)
+ kms_key_self_link = (known after apply)
+ source = (known after apply)
+ initialize_params {
+ image = "debian-cloud/debian-9"
+ labels = (known after apply)
+ size = (known after apply)
+ type = (known after apply)
}
}
+ network_interface {
+ address = (known after apply)
+ name = (known after apply)
+ network = "default"
+ network_ip = (known after apply)
+ subnetwork = (known after apply)
+ subnetwork_project = (known after apply)
+ access_config {
+ assigned_nat_ip = (known after apply)
+ nat_ip = (known after apply)
+ network_tier = (known after apply)
}
}
+ scheduling {
+ automatic_restart = (known after apply)
+ on_host_maintenance = (known after apply)
+ preemptible = (known after apply)
+ node_affinities {
+ key = (known after apply)
+ operator = (known after apply)
+ values = (known after apply)
}
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
プランが正常に作成された場合、Terraform はここで一時停止して、続行する前に承認を求めます。本番環境では、実行プランに正しくない内容や危険な内容が含まれていると思われる場合は、安全のためにここで中止してください。この時点で、インフラストラクチャはまだ変更されていません。
- この例ではプランに問題がないようなので、確認プロンプトで「
yes
」と入力して続行します。
プランの実行には数分かかります。VM インスタンスが利用可能になるまで Terraform が待機するためです。
以上で Terraform の作業は終了です。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。タスクが正常に完了すると、評価スコアが提供されます。
- Google Cloud Console で、ナビゲーション メニューから、[Compute Engine] > [VM インスタンス] をクリックして、作成した VM インスタンスを表示します。
Terraform は、terraform.tfstate
ファイルにデータを書き込みます。この状態ファイルは非常に重要です。作成されたリソースの ID がトラッキングされるため、Terraform で管理しているリソースを把握できるからです。
-
Cloud Shell で現在の状態を確認します。
terraform show
出力例:
# google_compute_instance.default:
resource "google_compute_instance" "default" {
can_ip_forward = false
cpu_platform = "Intel Haswell"
deletion_protection = false
guest_accelerator = []
id = "terraform"
instance_id = "3408292216444307052"
label_fingerprint = "42WmSpB8rSM="
machine_type = "n1-standard-1"
metadata_fingerprint = "s6I5s2tjfKw="
name = "terraform"
project = "qwiklabs-gcp-42390cc9da8a4c4b"
self_link = "https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-42390cc9da8a4c4b/zones/us-central1-a/instances/terraform"
tags_fingerprint = "42WmSpB8rSM="
zone = "us-central1-a"
boot_disk {
auto_delete = true
device_name = "persistent-disk-0"
source = "https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-42390cc9da8a4c4b/zones/us-central1-a/disks/terraform"
....
このリソースを作成すると、多くの関連情報が収集されたことがわかります。これらの値を参照すると、追加のリソースや出力を構成できます。
これで完了です。ここでは、Terraform を使用して最初のインフラストラクチャを構築しました。さらに、構成構文、基本的な実行プランの例、状態ファイルを確認しました。
理解度チェック
今回のラボで学習した内容の理解を深めていただくために、以下の多肢選択式の問題を用意しました。正解を目指して頑張ってください。
お疲れさまでした
クエストを完了する
このセルフペース ラボは、Qwiklabs の「Managing Cloud Infrastructure with Terraform」クエストと「Automating Infrastructure on Google Cloud with Terraform」クエストの一部です。クエストとは学習プログラムを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。「Managing Cloud Infrastructure with Terraform」クエストまたは「Automating Infrastructure on Google Cloud with Terraform」スキル バッジ クエストに登録すれば、このラボを修了したクレジットをすぐに受け取ることができます。受講可能なその他の Qwiklabs のクエストもご確認ください。
次のラボを受講する
「Using a NAT Gateway with Kubernetes Engine」または「Infrastructure as Code with Terraform」に進んでクエストを続けてください。また、こちらも併せてご確認ください。
次のステップと詳細情報
Google Cloud Training & Certification
Google Cloud 技術を最大限に活用できるようになります。このクラスでは、必要な技術力とベスト プラクティスを習得し、継続的に学習することができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、仮想環境など、多忙なスケジュールに対応できるオプションが用意されています。認定資格を取得することで、Google Cloud の技術のスキルと知識を証明できます。
マニュアルの最終更新日: 2021 年 7 月 26 日
ラボの最終テスト日: 2021 年 7 月 26 日
Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。