読み込んでいます...
一致する結果は見つかりませんでした。

Google Cloud コンソールでスキルを試す

Google Cloud Fundamentals for AWS Professionals

700 以上のラボとコースにアクセス

Terraform を使用したインフラストラクチャのデプロイの自動化

ラボ 1時間 universal_currency_alt クレジット: 5 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

概要

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

このラボでは、Terraform 構成とモジュールを作成して、Google Cloud インフラストラクチャのデプロイを自動化します。具体的には、以下の図に示すようにファイアウォール ルールと 2 つの VM インスタンスを備えた自動モード ネットワークをデプロイします。

目標

このラボでは、次のタスクの実行方法について学びます。

  • 自動モード ネットワークの構成を作成する
  • ファイアウォール ルールの構成を作成する
  • VM インスタンスのモジュールを作成する
  • 構成を作成してデプロイする
  • 構成のデプロイを確認する

設定

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

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

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

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

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

    {{{user_0.username | "Username"}}}

    [ラボの詳細] パネルでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] パネルでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

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

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。

タスク 1. Terraform と Cloud Shell を設定する

このタスクでは、Terraform を使用するように Cloud Shell 環境を構成します。

Terraform をインストールする

Terraform は Cloud Shell に統合されたので、インストールされているバージョンを確認します。

  1. Google Cloud コンソールで、Cloud Shell をアクティブにするアイコン()をクリックします。
  2. プロンプトが表示されたら、[続行] をクリックします。
  3. Terraform がインストールされていることを確認するには、次のコマンドを実行します。
terraform --version

出力は次のようになります。

Terraform v1.5.7

注: Terraform のバージョンが最新ではないという警告が表示されても問題ありません。このラボの手順では Terraform v1.5.7 以降を使用します。入手可能な最新バージョンの Terraform は Terraform ウェブサイトからダウンロードできます。Terraform はサポート対象のプラットフォームおよびアーキテクチャ別にバイナリ パッケージとして配布されています。Cloud Shell では Linux 64 ビット用のファイルを使用します。

  1. Terraform 構成用のディレクトリを作成するには、次のコマンドを実行します。
mkdir tfinfra
  1. Cloud Shell で [エディタを開く]()をクリックします。

注:サードパーティの Cookie が無効になっているためコードエディタを読み込めませんでした」というメッセージが表示された場合は、[新しいウィンドウで開く] をクリックしてください。新しいタブでコードエディタが開きます。元のタブに戻って [ターミナルを開く] をクリックした後、コードエディタのタブに戻ります。このラボでは、Cloud Shell のターミナルに繰り返し戻る必要があります。

  1. コードエディタの左側のペインで、tfinfra フォルダを展開します。

Terraform を初期化する

Terraform ではプラグイン ベースのアーキテクチャを使用して、さまざまなインフラストラクチャやサービス プロバイダをサポートしています。それぞれの「プロバイダ」は、Terraform 自体とは別に配布される、独自にカプセル化されたバイナリです。ここでは Google をプロバイダとして設定し、Terraform を初期化します。

  1. 新しいファイルを tfinfra フォルダ内に作成するために、tfinfra フォルダを右クリックし、[New File] をクリックします。
  2. 新しいファイルに「provider.tf」と名前を付けてから開きます。
  3. 次のコードを provider.tf にコピーします。
provider "google" {}
  1. [File] > [Save] をクリックして provider.tf を保存します。

  2. 次のコマンドを実行して、Terraform を初期化します。

cd tfinfra terraform init

これで Cloud Shell で Terraform を操作する準備が整いました。

タスク 2. mynetwork とそのリソースを作成する

このタスクでは、自動モード ネットワークの mynetwork を、ファイアウォール ルールと 2 つの VM インスタンス(mynet_vm_1mynet_vm_2)とともに作成します。

mynetwork を構成する

新たに構成を作成し、mynetwork を定義します。

  1. tfinfra 内に新しいファイルを作成するためにtfinfra フォルダを右クリックし、[New File] をクリックします。
  2. 新しいファイルに「mynetwork.tf」と名前を付けてから開きます。
  3. 次の基本コードを mynetwork.tf にコピーします。
# mynetwork ネットワークを作成する resource [RESOURCE_TYPE] "mynetwork" { name = [RESOURCE_NAME] # リソース プロパティをここに含める }

この基本型は、あらゆる Google Cloud リソースの作成に使用できます。name にはリソース名、type には作成する Google Cloud のリソースを指定します。プロパティも定義できますが、リソースによっては省略可能です。

  1. mynetwork.tf[RESOURCE_TYPE]"google_compute_network"(引用符付き)に置き換えます。

注: この google_compute_network リソースは VPC ネットワークです。利用可能なリソースは、Google Cloud Provider のドキュメントに記載されています。この特定のリソースについて詳しくは、Terraform のドキュメントをご覧ください。

  1. mynetwork.tf[RESOURCE_NAME]"mynetwork"(引用符付き)に置き換えます。
  2. mynetwork.tf に次のプロパティを追加します。
auto_create_subnetworks = "true"

文字どおり、自動モード ネットワークではサブネットワークが各リージョンに自動的に作成されます。そのため auto_create_subnetworkstrue に設定します。

  1. mynetwork.tf ファイルの内容が次のようになっていることを確認します。
# mynetwork ネットワークを作成する resource "google_compute_network" "mynetwork" { name = "mynetwork" # リソース プロパティをここに含める auto_create_subnetworks = "true" }
  1. [File] > [Save] をクリックして mynetwork.tf を保存します。

ファイアウォール ルールを構成する

mynetwork で HTTP、SSH、RDP、ICMP のトラフィックを許可するファイアウォール ルールを定義します。

  1. mynetwork.tf に次の基本コードを追加します。
# mynetwork で HTTP、SSH、RDP、ICMP のトラフィックを許可するファイアウォール ルールを追加する resource [RESOURCE_TYPE] "mynetwork-allow-http-ssh-rdp-icmp" { name = [RESOURCE_NAME] # リソース プロパティをここに含める }
  1. mynetwork.tf[RESOURCE_TYPE]"google_compute_firewall"(引用符付き)に置き換えます。

注: この google_compute_firewall リソースはファイアウォール ルールです。この特定のリソースについて詳しくは、Terraform のドキュメントをご覧ください。

  1. mynetwork.tf[RESOURCE_NAME]"mynetwork-allow-http-ssh-rdp-icmp"(引用符付き)に置き換えます。
  2. mynetwork.tf に次のプロパティを追加します。
network = google_compute_network.mynetwork.self_link

注: ファイアウォール ルールはネットワークに依存するため、google_compute_network.mynetwork.self_link 参照を使用すると、Terraform ではこれらのリソースが依存順序に沿って解決されます。この場合、ネットワークはファイアウォール ルールより先に作成されます。

  1. mynetwork.tf に次のプロパティを追加します。
allow { protocol = "tcp" ports = ["22", "80", "3389"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"]

この allow ルールのリストでは、許可されるプロトコルとポートを指定します。

  1. mynetwork.tf ファイルの内容が次のようになっていることを確認します。
# mynetwork ネットワークを作成する resource "google_compute_network" "mynetwork" { name = "mynetwork" # リソース プロパティをここに含める auto_create_subnetworks = "true" } # mynetwork で HTTP、SSH、RDP、ICMP のトラフィックを許可するファイアウォール ルールを追加する resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" { name = "mynetwork-allow-http-ssh-rdp-icmp" # リソース プロパティをここに含める network = google_compute_network.mynetwork.self_link allow { protocol = "tcp" ports = ["22", "80", "3389"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"] }
  1. [File] > [Save] をクリックして mynetwork.tf を保存します。

VM インスタンスを構成する

VM インスタンス モジュールを作成して、VM インスタンスを定義します。モジュールとは、フォルダ内に作成された再利用可能な構成のことです。このモジュールは、このラボの両方の VM インスタンスで使用します。

  1. 新しいフォルダを tfinfra 内に作成するには、tfinfra フォルダを選択してから、[File] > [New Folder] をクリックします。
  2. 新しいフォルダの名前を「instance」とします。
  3. 新しいファイルを instance 内に作成するために、instance フォルダを右クリックし、[New File] をクリックします。
  4. 新しいファイルに「main.tf」と名前を付けてから開きます。

Cloud Shell には以下のようなフォルダ構造が表示されます。

  1. 次の基本コードを main.tf にコピーします。
resource [RESOURCE_TYPE] "vm_instance" { name = [RESOURCE_NAME] # リソース プロパティをここに含める }
  1. main.tf[RESOURCE_TYPE]"google_compute_instance"(引用符付き)に置き換えます。

注: この google_compute_instance リソースは Compute Engine インスタンスです。この特定のリソースについて詳しくは、Terraform のドキュメントをご覧ください。

  1. main.tf[RESOURCE_NAME]"${var.instance_name}"(引用符付き)に置き換えます。

このモジュールは両方の VM インスタンスに使用するため、入力変数としてインスタンス名を定義します。これにより、mynetwork.tf の変数の名前を制御できます。入力変数について詳しくは、Terraform の入力変数の定義に関するガイドをご覧ください。

  1. main.tf に次のプロパティを追加します。
zone = "${var.instance_zone}" machine_type = "${var.instance_type}"

これらのプロパティでは、インスタンスのゾーンとマシンタイプを入力変数として定義しています。

  1. main.tf に次のプロパティを追加します。
boot_disk { initialize_params { image = "debian-cloud/debian-11" } }

このプロパティでは、Debian 11 OS イメージを使用するようにブートディスクを定義しています。両方の VM インスタンスで同じイメージを使用するため、モジュール内にこのプロパティをハードコードしてもかまいません。

  1. main.tf に次のプロパティを追加します。
network_interface { network = "${var.instance_network}" access_config { # インスタンスに 1 対 1 で NAT IP を割り振る } }

このプロパティは入力変数としてネットワーク名を指定し、アクセス構成を指定して、ネットワーク インターフェースを定義します。アクセス設定を空のままにしておくと、エフェメラル外部 IP アドレス(このラボで必要)になります。内部 IP アドレスのみを割り当てたインスタンスを作成するには、access_config セクションを削除してください。詳細については、Terraform のドキュメントをご覧ください。

  1. main.tf の内容が次のようになっていることを確認します(括弧 {} の欠落に注意)。
resource "google_compute_instance" "vm_instance" { name = "${var.instance_name}" zone = "${var.instance_zone}" machine_type = "${var.instance_type}" boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { network = "${var.instance_network}" access_config { # インスタンスに 1 対 1 で NAT IP を割り振る } } }
  1. [File] > [Save] をクリックして main.tf を保存します。
  2. 新しいファイルを instance 内に作成するために、instance フォルダを右クリックし、[New File] をクリックします。
  3. 新しいファイルに「variables.tf」と名前を付けてから開きます。
  4. 次の 4 つの入力変数を variables.tf 内に定義します。
variable "instance_name" {} variable "instance_zone" {} variable "instance_type" { default = "e2-micro" } variable "instance_network" {}

instance_type にデフォルト値を設定することで、この変数の指定をオプションとします。instance_nameinstance_zoneinstance_network は必須です。これらは mynetwork.tf で定義します。

  1. [File] > [Save] をクリックして variables.tf を保存します。
  2. mynetwork.tf に次の VM インスタンスを追加します。
# mynet-vm-1 インスタンスを作成する module "mynet-vm-1" { source = "./instance" instance_name = "mynet-vm-1" instance_zone = "{{{project_0.default_zone|Zone}}}" instance_network = google_compute_network.mynetwork.self_link } # mynet-vm-2 インスタンスを作成する module "mynet-vm-2" { source = "./instance" instance_name = "mynet-vm-2" instance_zone = "{{{project_0.default_zone_2|Zone 2}}}" instance_network = google_compute_network.mynetwork.self_link }

これらのリソースは instance フォルダ内のモジュールを利用し、名前、ゾーン、ネットワークを入力値として指定しています。これらのインスタンスは VPC ネットワークに依存するため、google_compute_network.mynetwork.self_link 参照を使用すると、Terraform ではこれらのリソースが依存順序に沿って解決されます。この場合は、インスタンスの前にネットワークが作成されます。

注: Terraform モジュールを作成するメリットは、さまざまな構成でモジュールを再利用できることです。独自のモジュールを作成する代わりに Terraform モジュール レジストリの既存のモジュールを活用することもできます。

  1. [File] > [Save] をクリックして mynetwork.tf を保存します。

  2. mynetwork.tf の内容が次のようになっていることを確認します(括弧 {} の欠落に注意)。

# mynetwork ネットワークを作成する resource "google_compute_network" "mynetwork" { name = "mynetwork" # リソース プロパティをここに含める auto_create_subnetworks = "true" } # mynetwork で HTTP、SSH、RDP、ICMP のトラフィックを許可するファイアウォール ルールを追加する resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" { name = "mynetwork-allow-http-ssh-rdp-icmp" # リソース プロパティをここに含める network = google_compute_network.mynetwork.self_link allow { protocol = "tcp" ports = ["22", "80", "3389"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"] } # mynet-vm-1 インスタンスを作成する module "mynet-vm-1" { source = "./instance" instance_name = "mynet-vm-1" instance_zone = "{{{project_0.default_zone|Zone}}}" instance_network = google_compute_network.mynetwork.self_link } # mynet-vm-2 インスタンスを作成する module "mynet-vm-2" { source = "./instance" instance_name = "mynet-vm-2" instance_zone = "{{{project_0.default_zone_2|Zone 2}}}" instance_network = google_compute_network.mynetwork.self_link }

mynetwork とそのリソースを作成する

ここで、mynetwork の構成を適用します。

  1. Terraform 構成ファイルを正規の形式とスタイルに書き換えるには、次のコマンドを実行します。
terraform fmt

出力は次のようになります。

mynetwork.tf

注: エラーが表示された場合は、前のステップに戻って構成がラボの説明と一致しているかどうかを確認してください。構成の問題をトラブルシューティングできない場合は、完成された構成をダウンロードして内容を確認してください。

  1. 次のコマンドを実行して、Terraform を初期化します。
terraform init

出力は次のようになります。

Initializing modules... - mynet-vm-2 in instance - mynet-vm-2 in instance ... Terraform has been successfully initialized!

注: エラーが表示された場合は、前のステップに戻ってフォルダとファイルの構造が正しいかどうかを確認してください。構成の問題をトラブルシューティングできない場合は、前述したリンクの完成された構成を参考にしてください。問題を修正したら、前のコマンドを再実行してください。

  1. 実行プランを作成するには、次のコマンドを実行します。
terraform plan

出力は次のようになります。

... Plan: 4 to add, 0 to change, 0 to destroy. ...

Terraform により以下の 4 つのリソースを追加する必要があると判断されました。

名前 説明
mynetwork VPC ネットワーク
mynetwork-allow-http-ssh-rdp-icmp HTTP、SSH、RDP、ICMP を許可するファイアウォール ルール
mynet-vm-2 内の VM インスタンス
mynet-vm-2 内の VM インスタンス
  1. 次のコマンドを実行して、必要な変更を適用します。
terraform apply
  1. 予定されたアクションを確定するには、次のように入力します。
yes

出力は次のようになります。

... Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 mynetwork とそのリソースを作成する

注: 実行中にエラーが表示された場合は、前のステップに戻ってフォルダとファイルの構造が正しいかどうかを確認してください。構成の問題をトラブルシューティングできない場合は、前述したリンクの完成された構成を参考にしてください。問題を修正したら、前のコマンドを再実行してください。

タスク 3. デプロイを確認する

Google Cloud コンソールで、リソースが作成されたことを確認します。

Google Cloud コンソールでネットワークを確認する

  1. Google Cloud コンソールのナビゲーション メニュー)で、[VPC ネットワーク] > [VPC ネットワーク] をクリックします。
  2. mynetwork VPC ネットワークと各リージョンのサブネットワークを確認します。
  3. ナビゲーション メニューで、[VPC ネットワーク] > [ファイアウォール] の順にクリックします。
  4. ファイアウォール ルールを [ネットワーク] の値で並べ替えます。
  5. mynetworkmynetwork-allow-http-ssh-rdp-icmp ファイアウォール ルールを確認します。

Google Cloud コンソールで VM インスタンスを確認する

  1. ナビゲーション メニュー)で、[Compute Engine] > [VM インスタンス] をクリックします。
  2. mynet-vm-1 インスタンスと mynet-vm-2 インスタンスを表示します。
  3. mynet-vm-2 の内部 IP アドレスをメモしておきます。
  4. mynet-vm-1 で [SSH] をクリックし、ターミナルを起動して接続します。
  5. SSH ターミナルで次のコマンドを実行して、mynet-vm-2 の内部 IP アドレスに接続されているかどうかをテストします(mynet-vm-2 の内部 IP アドレスを先ほどメモした値に置き換えます)。
ping -c 3 <mynet-vm-2 の内部 IP をここに入力> 注: どちらの VM インスタンスも同じネットワークにあり、ファイアウォール ルールで ICMP トラフィックが許可されているため、ping は成功するはずです。

タスク 4. まとめ

このラボでは、Terraform 構成とモジュールを作成して、Google Cloud インフラストラクチャのデプロイを自動化しました。Terraform では構成の変更に応じてインクリメンタルな実行プランの作成が可能であり、構成全体を段階的に構築できます。

インスタンス モジュールを使用すると、複数のリソースに対して同じリソース構成を再利用しながら、プロパティを入力変数として扱うことができます。作成した構成とモジュールは、今後デプロイを実行するときに活用できます。

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

前へ 次へ

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
プレビュー