このチュートリアルでは、Terraform を使用して Compute Engine で基本的なウェブサーバーを構築し、Terraform の使用を開始する方法を学習します。
このチュートリアルでは、次のことを行います。
- Terraform を使用して Cloud de Confianceに VM を作成します。
- 基本的な Python Flask サーバーを起動します。
費用
このドキュメントでは、課金対象である次の Cloud de Confiance by S3NSコンポーネントを使用します。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
チュートリアルを開始する準備をします。
プロジェクトの選択または作成
-
In the Cloud de Confiance console, go to the project selector page.
-
Select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
権限を設定する
ユーザー アカウントに、必要な Compute Engine の権限があることを確認します。
compute.instances.*compute.firewalls.*
ロールと権限について詳細を確認します。
API を有効にする
Enable the Compute Engine API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin), which
contains the serviceusage.services.enable permission. Learn how to grant
roles.
gcloud CLI をインストールする
ローカル開発環境から Terraform を使用するには、Google Cloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
- gcloud CLI をインストールします。
-
gcloud CLI を初期化します。
gcloud init
- アカウントのローカル認証情報を作成します。
gcloud auth application-default login
Compute Engine VM を作成する
まず、Terraform 構成ファイルで VM の設定を定義します。次に、Terraform コマンドを実行してプロジェクトに VM を作成します。
ディレクトリを作成する
新しいディレクトリを作成します。 新しいディレクトリに、Terraform 構成用の main.tf ファイルを作成します。このファイルには、プロジェクト内に作成するすべての Cloud de Confiance リソースが含まれています。
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 リソースを追加します。
サンプルコードでは、 Cloud de Confiance ゾーンを 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 が Cloud de Confiance API を呼び出して新しい VM を設定します。[VM インスタンス] ページで、新しい VM を確認します。
Cloud de Confianceでウェブサーバーを実行する
次に、ウェブ アプリケーションを作成して 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 を開いている必要があります。 Cloud de Confiance では、ファイアウォール ルールを使用してトラフィックのポートを開くことができます。
main.tf ファイルの末尾に、次の google_compute_firewall Terraform リソースを追加します。
terraform apply を実行してファイアウォール ルールを作成します。
ウェブサーバーの URL の出力変数を追加する
main.tfの末尾に、Terraform 出力変数を追加して、ウェブサーバーの URL を出力します。// A variable for extracting the external IP address of the VM output "Web-server-URL" { value = join("",["http://",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」と入力します。