このチュートリアルでは、Terraform を使用して Compute Engine で基本的なウェブサーバーを構築し、Terraform の使用を開始する方法を学習します。
このチュートリアルでは、次のことを行います。
- Terraform を使用して Google Cloud に VM を作成します。
- 基本的な Python Flask サーバーを起動します。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
チュートリアルを開始する準備をします。
プロジェクトの選択または作成
-
Google Cloud コンソールでプロジェクトの選択ページに移動します。
-
Google Cloud プロジェクトを選択または作成します。
権限を設定する
ユーザー アカウントに、必要な Compute Engine の権限があることを確認します。
compute.instances.*
compute.firewalls.*
ロールと権限について詳細を確認します。
API を有効にする
Compute Engine API を有効にします。
Cloud Shell の起動
Cloud Shell は Compute Engine 仮想マシンです。
この仮想マシンに関連付けられているサービス認証情報は自動的に設定されるため、サービス アカウント キーを設定またはダウンロードする必要はありません。
Terraform には Cloud Shell が統合されており、Cloud Shell が自動的に Terraform を認証するため、わずかなセットアップ作業で使用を開始できます。
Compute Engine VM を作成する
まず、Terraform 構成ファイルで VM の設定を定義します。次に、Terraform コマンドを実行してプロジェクトに VM を作成します。
ディレクトリを作成する
Cloud Shell で、新しいディレクトリを作成します。新しいディレクトリに、Terraform 構成用の main.tf
ファイルを作成します。このファイルには、プロジェクト内に作成するすべての Google Cloud リソースが含まれています。
mkdir tf-tutorial && cd tf-tutorial
nano main.tf
Virtual Private Cloud ネットワークとサブネットを作成する
このセクションでは、VM のネットワーク インターフェース用に Virtual Private Cloud(VPC)ネットワークとサブネットを作成します。
作成した main.tf
ファイルに次の Terraform リソースを追加します。
Compute Engine VM リソースを作成する
このセクションでは、Debian を実行する単一の Compute Engine インスタンスを作成します。このチュートリアルでは、利用可能な最小のマシンタイプを使用します。後で、より大きなマシンタイプにアップグレードできます。
作成した main.tf
ファイルに次の google_compute_instance
Terraform リソースを追加します。
サンプルコードでは、Google Cloud ゾーンを us-west1-a
に設定します。これを別のゾーンに変更できます。
Terraform を初期化する
この時点で、terraform init
を実行して必要なプラグインを追加し、.terraform
ディレクトリをビルドできます。
terraform init
出力:
Initializing the backend... Initializing provider plugins... ... Terraform has been successfully initialized!
Terraform 構成を検証する
これまでに作成した Terraform コードを検証できます。terraform plan
を実行します。これにより、次の処理が行われます。
main.tf
の構文が正しいことを確認します。- 作成されるリソースのプレビューが表示されます。
terraform plan
出力:
... Plan: 1 to add, 0 to change, 0 to destroy. Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
構成を適用する
VM を作成するには、terraform apply
を実行します。
terraform apply
プロンプトが表示されたら、「yes
」と入力します。
Terraform が Google Cloud APIs を呼び出して新しい VM を設定します。[VM インスタンス] ページで、新しい VM を確認します。
Google Cloud でウェブサーバーを実行する
次に、ウェブ アプリケーションを作成して VM にデプロイし、ウェブ アプリケーションへのクライアント リクエストを許可するファイアウォール ルールを作成します。
カスタム SSH ファイアウォール ルールを追加する
default
ネットワークに default-allow-ssh
ファイアウォール ルールを設定すると、SSH を使用して VM に接続できます。独自のカスタム ファイアウォール ルールを使用する場合は、main.tf
ファイルの末尾に次のリソースを追加します。
terraform apply
を実行してファイアウォール ルールを作成します。
SSH を使用して VM に接続する
SSH で VM に接続して、すべてが正しく設定されていることを確認します。
[VM インスタンス] ページに移動します。
flask-vm
という名前の VM を見つけます。[接続] 列で、[SSH] をクリックします。
実行中の VM のブラウザ内 SSH ターミナル ウィンドウが開きます。
詳細については、VM への接続をご覧ください。
Flask アプリをビルドする
このチュートリアル用に Python Flask アプリを作成します。ウェブサーバーとテスト エンドポイントを 1 つのファイルに記述します。
ブラウザ内 SSH ターミナルで、
app.py
というファイルを作成します。nano app.py
app.py
ファイルに以下を追加します。from flask import Flask app = Flask(__name__) @app.route('/') def hello_cloud(): return 'Hello Cloud!' app.run(host='0.0.0.0')
app.py
を実行します。python3 app.py
Flask はデフォルトで
localhost:5000
でトラフィックを処理します。2 つ目の SSH 接続を開きます。
- [VM インスタンス] ページに移動します。
flask-vm
という名前の VM を見つけて、[SSH] をクリックします。
2 番目の SSH 接続で
curl
を実行して、app.py
で構成したメッセージが返されることを確認します。curl http://0.0.0.0:5000
このコマンドの出力は、
Hello Cloud
です。
VM でポート 5000 を開く
ローカルのパソコンからウェブサーバーに接続するには、VM でポート 5000 を開いている必要があります。Google Cloud では、ファイアウォール ルールを使用してトラフィックのポートを開くことができます。
main.tf
ファイルの末尾に、次の google_compute_firewall
Terraform リソースを追加します。
Cloud Shell で、terraform apply
を実行してファイアウォール ルールを作成します。
ウェブサーバーの URL の出力変数を追加する
main.tf
の末尾に、Terraform 出力変数を追加して、ウェブサーバーの URL を出力します。// A variable for extracting the external IP address of the VM output "Web-server-URL" { value = join("",["https://",google_compute_instance.default.network_interface.0.access_config.0.nat_ip,":5000"]) }
terraform apply
を実行します。terraform apply
プロンプトが表示されたら、「
yes
」と入力します。Terraform は、次のように VM の外部 IP アドレスとポート 5000 を画面に出力します。Web-server-URL = "http://IP_ADDRESS:5000"
この出力は
terraform output
でいつでも入手できます。terraform output
前の手順の URL をクリックすると、「Hello Cloud!」のメッセージが表示されます。
これは、サーバーが稼働していることを意味します。
トラブルシューティング
必要な API が有効になっていない場合、Terraform はエラーを返します。エラー メッセージには、API を有効にするリンクが含まれています。API を有効にすると、
terraform apply
を再実行できます。SSH 経由で VM に接続できない場合:
- 必ず SSH ファイアウォール ルールを追加してください。
- VM に
tags = ["ssh"]
引数が含まれていることを確認します。
クリーンアップ
チュートリアルの完了後は、それ以上の費用が発生しないように、作成したものをすべて削除できます。
Terraform では、terraform destroy
コマンドを実行して、構成ファイルで定義されているすべてのリソースを削除できます。
terraform destroy
Terraform でリソースを削除できるようにするには、「yes
」と入力します。