arrow_back

Terraform の基礎

参加 ログイン

Terraform の基礎

35分 クレジット: 1

GSP156

Google Cloud セルフペース ラボ

概要

Terraform を使用すると、クラウド インフラストラクチャを安全かつ予想どおりに作成、変更、改善できます。Terraform は、API を宣言的な構成ファイルにコード化するオープンソースのツールです。ファイルは、同僚間で共有したり、コードとして扱ったりできます。また、編集、レビュー、バージョン管理を行うこともできます。

目標

このラボでは、次のタスクを行う方法を学びます。

  • Google Cloud で Terraform の使用を始める。

  • Terraform をインストール バイナリからインストールする。

  • Terraform を使用して VM インスタンスのインフラストラクチャを作成する。

設定と要件

Qwiklabs の設定

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

この Qwiklabs ハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

必要なもの

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
  • ラボを完了するために十分な時間

注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、ラボでは使用しないでください。

注: Chrome OS デバイスを使用している場合は、シークレット ウィンドウを開いてこのラボを実行してください。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Google Cloud Shell の有効化

Google Cloud Shell は、デベロッパー ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Google Cloud Shell では、コマンドラインで GCP リソースにアクセスできます。

GCP Console の右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

Cloud Shell アイコン

[続行] をクリックします。

cloudshell_continue

環境のプロビジョニングと接続には少し時間がかかります。接続すると、すでに認証されており、プロジェクトは PROJECT_ID に設定されています。例えば:

Cloud Shell 端末

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 にプリインストールされています。

  1. 新しい 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 を使用することをおすすめします。

  1. Cloud Shell で、次のコマンドを使って instance.tf という名前の空の構成ファイルを作成します。

touch instance.tf
  1. Cloud Shell ツールバーの [エディタを開く] をクリックします。
    Cloud Shell とコードエディタを切り替えるには、必要に応じて [エディタを開く] または [ターミナルを開く] をクリックするか、[新しいウィンドウで開く](イメージ)をクリックして別のタブでエディタを開いたままにします。

  2. 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 ブロック自体は、リソースの記載に必要な構成になっています。

  1. Cloud Shell で、新しいファイルが追加されたことと、ディレクトリにほかの *.tf ファイルが含まれていないことを確認します。Terraform はすべての *.tf ファイルを読み込むからです。

ls

初期化

新しい構成に対して(または既存の構成をバージョン管理からチェックアウトした後に)最初に実行するコマンドは、terraform init です。このコマンドを実行すると、それ以降のコマンドで使用されるさまざまなローカル設定やローカルデータが初期化されます。

Terraform ではプラグイン ベースのアーキテクチャを使用して、さまざまなインフラストラクチャやサービス プロバイダをサポートしています。それぞれの「プロバイダ」は、Terraform 自体とは別に配布される、独自にカプセル化されたバイナリです。terraform init コマンドを実行すると、プロバイダ(この場合は Google プロバイダのみ)のすべてのプロバイダ バイナリが自動的にダウンロード、インストールされ、構成で使用できるようになります。

  1. プロバイダ バイナリをダウンロードしてインストールします。

terraform init

Google プロバイダのプラグインが、他のさまざまな簿記関連のファイルとともにダウンロードされて、現在の作業ディレクトリのサブディレクトリにインストールされます。「Initializing provider plugins」というメッセージが表示されます。Google プロジェクトから実行していることが認識されて、Google リソースが取得されます。

Downloading plugin for provider "google" (2.12.0)...

インストールされるプラグインのバージョンが出力に示されます。また、次回も同じバージョンの構成ファイルを指定すると、terraform init に互換性のあるバージョンがインストールされることが示されます。

  1. 実行プランを作成します。

terraform plan

このコマンドを実行すると、明示的に無効にしない限り、実行プランが更新されます。その後、構成ファイルで指定した、インフラストラクチャを希望の状態にするのに必要な操作が確定します。このコマンドは、一連の変更を加えた実行プランで予想どおりの状態を実現できるかを、実際のリソースや状態に変更を加えずに確認するのに便利です。たとえば、変更をバージョン管理に保存する前にこのコマンドを実行して、意図したとおりに動作することを確認できます。

変更を適用

  1. 作成した 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 はここで一時停止して、続行する前に承認を求めます。本番環境では、実行プランに正しくない内容や危険な内容が含まれていると思われる場合は、安全のためにここで中止してください。この時点で、インフラストラクチャはまだ変更されていません。

  1. この例ではプランに問題がないようなので、確認プロンプトで「yes」と入力して続行します。
    プランの実行には数分かかります。VM インスタンスが利用可能になるまで Terraform が待機するためです。

以上で Terraform の作業は終了です。

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。タスクが正常に完了すると、評価スコアが提供されます。

Terraform を使用して us-central1-a ゾーンに VM インスタンスを作成する。
  1. Google Cloud Console で、ナビゲーション メニューから、[Compute Engine] > [VM インスタンス] をクリックして、作成した VM インスタンスを表示します。

terraform-vm.png

Terraform は、terraform.tfstate ファイルにデータを書き込みます。この状態ファイルは非常に重要です。作成されたリソースの ID がトラッキングされるため、Terraform で管理しているリソースを把握できるからです。

  1. 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 を使用して最初のインフラストラクチャを構築しました。さらに、構成構文、基本的な実行プランの例、状態ファイルを確認しました。

理解度チェック

今回のラボで学習した内容の理解を深めていただくために、以下の多肢選択式の問題を用意しました。正解を目指して頑張ってください。

お疲れさまでした

Terraform_badge_125.png

クエストを完了する

このセルフペース ラボは、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 の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。