Terraform を使用してクライアントとサーバーを作成する
ラボ
1時間
universal_currency_alt
クレジット: 5
show_chart
中級
info
このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
このコンテンツはまだモバイル デバイス向けに最適化されていません。
快適にご利用いただくには、メールで送信されたリンクを使用して、デスクトップ パソコンでアクセスしてください。
概要
このラボでは、データベース サーバーとして機能する Linux 仮想マシンをプライベート ネットワークにプロビジョニングします。また、管理者としてデータベース サーバーに接続する際の踏み台インスタンスとして使用できる仮想マシンも作成します。データベース サーバーのリモート接続を構成し、ユーザー アカウントを追加します。その後、クライアント マシンからデータベース サーバーに接続するために MySQL-MariaDB クライアント ソフトウェアをインストールします。
目標
このラボでは、次のタスクの実行方法について学びます。
- クライアント VM とサーバー VM を作成する。
- データベース サーバーを管理する。
- クライアントからデータベースに接続する。
設定と要件
このタスクでは、ラボの初期化手順を行います。
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
シークレット ウィンドウを使用して Google Skills にログインします。
-
ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
-
準備ができたら、[ラボを開始] をクリックします。
-
ラボの認証情報(ユーザー名とパスワード)をメモしておきます。この情報は、Google Cloud コンソールにログインする際に使用します。
-
[Google コンソールを開く] をクリックします。
-
[別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーや料金が発生します。
-
利用規約に同意し、再設定用のリソースページをスキップします。
タスク 1. クライアント VM とサーバー VM を作成する
-
新しいウェブブラウザ ウィンドウを開き、Google Cloud コンソール(console.cloud.google.com)に移動します。プロジェクト セレクタを使用して、名前が「qwiklabs-gcp」で始まる最初のプロジェクトを選択します。
-
ナビゲーション メニュー(
)で、[Cloud の概要] をクリックします。
-
[プロジェクト情報] セクションで、プロジェクト ID を見つけてコピーし、テキスト ファイルに貼り付けます。書き留めておきます。
![[プロジェクト情報] セクションでハイライト表示されているプロジェクト ID](https://cdn.qwiklabs.com/lvp5vE9Mcrkq1JgUUxV2lai21m%2BHnhf1tPAj7C%2BUr1w%3D)
-
コンソールの右上にある [Cloud Shell をアクティブにする] アイコン(
)をクリックします。Cloud Shell ターミナルがウィンドウの下部のペインに表示されます。
-
Identity-Aware Proxy API を有効にすると、SSH 認証鍵を構成しなくても、このプロジェクト内に作成されたすべての仮想マシンに接続できるようになります。Cloud Shell で次のコマンドを入力します。
gcloud services enable iap.googleapis.com
- 次のコマンドを入力して、前のラボの完成版を含む GitHub リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
- 次のフォルダに移動します。
cd ~/training-data-analyst/courses/db-migration/terraform-clients-servers/
-
ls と入力すると、このフォルダに前のラボで作成した Terraform ファイルがあることがわかります。
-
[エディタを開く] をクリックし、training-data-analyst/courses/db-migration/terraform-clients-servers/ フォルダから terraform.tfvars ファイルを開きます。
-
terraform.tfvars ファイルの値を以下のように変更します。
| 項目 |
値 |
| project_id |
|
| gcp_region_1 |
|
| gcp_zone_1 |
|
- プライベート ネットワークに Debian Linux マシンを作成します。vm-mysql-server.tf という名前のファイルを追加し、次の Terraform コードを貼り付けます。
# プライベート VPC に MySQL サーバーを作成する
resource "google_compute_instance" "mysql-server" {
name = "mysql-server-${random_id.instance_id.hex}"
machine_type = "f1-micro"
zone = var.gcp_zone_1
tags = ["allow-ssh", "allow-mysql"]
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = google_compute_network.private-vpc.name
subnetwork = google_compute_subnetwork.private-subnet_1.name
# access_config { }
}
}
output "mysql-server" {
value = google_compute_instance.mysql-server.name
}
output "mysql-server-external-ip" {
value = "NONE"
}
output "mysql-server-internal-ip" {
value = google_compute_instance.mysql-server.network_interface.0.network_ip
}
- そのサーバーの管理に使用できるマシンをパブリック ネットワークに作成します。vm-mysql-client.tf という名前のファイルを追加し、次の Terraform コードを貼り付けます。
# パブリック VPC に MySQL クライアントを作成する
resource "google_compute_instance" "mysql-client" {
name = "mysql-client-${random_id.instance_id.hex}"
machine_type = "f1-micro"
zone = var.gcp_zone_1
tags = ["allow-ssh"]
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = google_compute_network.public-vpc.name
subnetwork = google_compute_subnetwork.public-subnet_1.name
access_config { }
}
}
output "mysql-client" {
value = google_compute_instance.mysql-client.name
}
output "mysql-client-external-ip" {
value = google_compute_instance.mysql-client.network_interface.0.access_config.0.nat_ip
}
output "mysql-client-internal-ip" {
value = google_compute_instance.mysql-client.network_interface.0.network_ip
}
- パブリック ネットワークから MySQL サーバーへの通信を許可するファイアウォール ルールを作成します。vpc-firewall-rules-private.tf ファイルを開き、次のファイアウォール ルールを末尾に追加します。
# パブリック サブネットからの MySQL のみを許可する
resource "google_compute_firewall" "private-allow-mysql" {
name = "${google_compute_network.private-vpc.name}-allow-mysql"
network = google_compute_network.private-vpc.name
allow {
protocol = "tcp"
ports = ["3306"]
}
source_ranges = [
"${var.subnet_cidr_public}"
]
target_tags = ["allow-mysql"]
}
- Terraform を初期化してプランを作成するには、Cloud Shell ターミナルに戻り、次のコマンドを入力します。
terraform init
terraform plan
- リソースを作成するには、次のコマンドを実行します。
terraform apply -auto-approve
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
クライアント VM とサーバー VM を作成する
タスク 2. データベース サーバーを管理する
-
Terraform プロセスが完了したら、ナビゲーション メニュー(
)で [Compute Engine] をクリックします。 複数のマシンが一覧表示されます。
-
mysql-server- マシンを見つけて、その内部 IP アドレスをメモします(通常は 10.2.2.2 または 10.2.2.3 です)。
-
mysql-server- マシンの [SSH] をクリックして、そのマシンに接続します。
注: この時点で、サーバーに MySQL をインストールする必要があります。しかし、サーバーには外部 IP アドレスがなく、インターネットにアクセスできないため、MySQL をインストールするコマンドを実行できません。Google Cloud NAT サービスを使用して NAT を追加することで、この問題を解決します。
- 次のコマンドを実行して、うまくいかないことを確認します。インターネットにアクセスしようとすると、最終的に失敗します。
sudo apt install wget
- ターミナルで返されるメッセージは次のようになります。
Could not connect to debian.map...
-
Ctrl+C キーを押してコマンドを停止します。
-
Cloud Shell コードエディタに戻って、training-data-analyst/courses/db-migration/terraform-clients-servers フォルダに cloud-nat.tf というファイルを追加し、そのファイルに次の Terraform コードを追加します。
resource "google_compute_router" "nat-router" {
name = "nat-router"
region = google_compute_subnetwork.private-subnet_1.region
network = google_compute_network.private-vpc.id
bgp {
asn = 64514
}
}
resource "google_compute_router_nat" "private-nat" {
name = "private-nat"
router = google_compute_router.nat-router.name
region = google_compute_router.nat-router.region
nat_ip_allocate_option = "AUTO_ONLY"
source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
log_config {
enable = true
filter = "ERRORS_ONLY"
}
}
- Cloud Shell ターミナルに戻り、次のコマンドを実行してエラーがないことを確認します。
terraform plan
- 次に、プランを適用して NAT を作成します。
terraform apply -auto-approve
- MySQL サーバーに接続している SSH ウィンドウに戻ります。次のコマンドを実行して MySQL をインストールします。
sudo apt-get update
sudo apt-get install -y default-mysql-server
- MySQL-MariaDB が実行されていることを確認するには、次のコマンドを入力します。
sudo systemctl status mysql
出力は次のようになります。
mariadb.service - MariaDB 10.5.15 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-08-01 20:55:10 UTC; 33s ago
-
「q」と入力して終了します。
-
次のコマンドを使用して、root ユーザーのパスワードを作成します。
sudo mysql_secure_installation
初期パスワードは空白です。
-
手順に沿って、覚えやすいパスワードを使用して root のパスワードを作成します。残りのプロンプトすべてで [はい] を選択します。
-
次のコマンドを使用して、root アカウントでデータベースにログインします。
sudo mysql -u root -p
- プロンプトが表示されたら、新しく作成したパスワードを入力します。
クライアント マシンからログインするためのユーザー アカウントが必要です。
- パスワード password を持つ dbops という名前のユーザーを作成するには、次のコマンドを使用します。
CREATE USER 'dbops'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'dbops'@'%';
FLUSH PRIVILEGES;
- 「exit」と入力して MySQL クライアントを終了します。
デフォルトでは、データベース サーバーはローカルマシンからの接続のみをリッスンします。構成を簡単に修正するだけで、この問題を解決できます。
- 次のコマンドを使用して、Nano テキスト エディタで構成ファイルを開きます。
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
-
bind-address という行を見つけて、行の先頭に「#」を追加してコメントアウトします。
#bind-address = 127.0.0.1
-
Ctrl+X キーを押して終了し、変更を保存するかどうかを尋ねられたら Y キーを押します。
-
データベースを再起動するには、次のコマンドを入力します。
sudo systemctl restart mariadb
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
データベース サーバーを管理する
- もう一度「exit」と入力してサーバーを終了し、クライアント VM に戻ります。
タスク 3. クライアントからデータベースに接続する
-
クライアント マシンから MySQL-MariaDB データベースに接続するには、MySQL-MariaDB クライアント ソフトウェアをインストールする必要があります。
-
ナビゲーション メニュー(
)で、[Compute Engine] をクリックします。mysql-client- マシンの [SSH] をクリックして、そのターミナルに接続します。
-
新しい SSH ウィンドウで、次のコマンドを入力してインストールを完了します。
sudo apt-get update
sudo apt-get install -y default-mysql-client
-
ナビゲーション メニュー(
)に戻って [Compute Engine] をクリックします。mysql-server- マシンを見つけて、その内部 IP アドレスをメモします(通常は 10.2.2.2 または 10.2.2.3 です)。
-
データベースに接続するには、次のコマンドを使用します(SERVERIP は、先ほど確認した IP アドレスに置き換えます)。
mysql -h SERVERIP -u dbops -p'password'
-
MariaDB のプロンプトで「\s」と入力します。
-
データベース サーバーの詳細が返されます。
-
「exit」と入力して MySQL クライアントを終了します。
この時点ではデータベースがないため、他に行う作業はありませんが、完全なソリューションが用意されています。データベース サーバーは、一般公開されていない安全なネットワークにあります。データベースの管理に使用できる Linux マシンがパブリック ネットワークにあり、MySQL-MariaDB クライアント ソフトウェアを使用してそのマシンに接続できます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
クライアントからデータベースに接続する
-
SSH セッションを閉じて、Cloud Shell ターミナルに戻ります。
-
ラボで作成したものをすべて削除するには、次のコマンドを入力します。
terraform destroy -auto-approve
これで完了です。データベース サーバーとして機能する Linux 仮想マシンをプライベート ネットワークにプロビジョニングしました。また、管理者としてデータベース サーバーに接続するための踏み台インスタンスとして使用できる仮想マシンも作成しました。リモート接続用にデータベース サーバーを構成し、ユーザー アカウントを追加しました。その後、クライアント マシンからデータベース サーバーに接続するために MySQL クライアント ソフトウェアをインストールしました。
ラボを終了する
ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Skills から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
Copyright 2026 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。