Google Cloud 無料枠 Terraform Ansible
【実践編】Google Cloud + Terraform + Ansible 環境ガイド
WSL2 + Google Cloud + Terraform + Ansible 連携
前回のガイドで、Google Cloudにも環境は整いました。ですので今回は実践編を記述していきたいと思います。
この記事を読み終えると、以下の成果を自分の手で構築できます。
- Google Cloud無料枠(Always Free)の範囲内だけで
- TerraformとAnsibleによるインフラコード化を実現し
- 安全に管理(IAP)され、世界に公開(HTTP)されたWebサーバー
1. プロジェクトの論理構造と実現される世界
「いいっすか、今回の肝は『玄関』を分けること。裏口(SSH)はIAPで鍵をかけ、表門(HTTP)は世界に開く。これがプロの設計っす!」 —— レオ
💡 LOGIC:管理と公開の分離(Security by Design)
本稿の目的は、単にWebサイトを公開することではありません。無料枠という制約下で、商用環境でも通用する「経路の分離」を実装することにあります。
- 管理経路(SSH): IAP(Identity-Aware Proxy)経由。外部IPからの直接アクセスを遮断し、Identity(IAM)で保護。
- 公開経路(HTTP): 全世界(0.0.0.0/0)に開放。Webサービスを届けるためのパブリックな道。
ここで重要なのは、IAPは単に「SSHを安全にする機能」ではなく、「管理経路をインターネットの脅威から消すための仕組み」であるという視点です。この「裏口(管理)」を秘匿し、「表門(サービス)」だけを出す設計こそが、インフラエンジニアの基礎素養となります。
graph TD
User((全世界のユーザー)) -- HTTP:80 --> Firewall_Web[ファイアウォール: 80解放]
Admin((管理者/WSL2)) -- IAP Tunnel --> Firewall_IAP[ファイアウォール: 22制限]
Firewall_Web --> VM[GCE: e2-micro]
Firewall_IAP --> VM
VM --> Nginx[Nginx: It Works!]2. 実装の急所と公式仕様の接続:Terraform編
💡 LOGIC:Always Free(無期限無料枠)を逸脱しない定義
Google Cloudの無料枠を確実に適用させるには、コードレベルでの「厳密な指定」が不可欠です。
# GCEインスタンスの定義
resource "google_compute_instance" "web_server" {
name = "web-server-free"
machine_type = "e2-micro" # 無料枠対象(us-central1, us-east1, us-west1限定)
zone = "us-central1-a"
tags = ["http-server", "iap-ssh"]
boot_disk {
initialize_params {
image = "debian-cloud/debian-12"
size = 10 # 30GB以内が無料対象
}
}
network_interface {
network = "default"
access_config {
network_tier = "STANDARD" # 無料転送枠を最大活用するための実務的選択
}
}
metadata = {
enable-oslogin = "TRUE"
}
}
# HTTP(80)を全世界に解放する設定
resource "google_compute_firewall" "allow_http" {
name = "allow-http"
network = "default"
allow {
protocol = "tcp"
ports = ["80"]
}
source_ranges = ["0.0.0.0/0"]
target_tags = ["http-server"]
}3. Ansible実装:Dynamic Inventory によるデータ変換
4. 実装の急所:IAPトンネルと OS Login ユーザー
5. ⚠️ 実務上の失敗回避:運用アンチパターン
6. IAM最小権限のTerraform定義
7. deploy.sh:一気通貫の実行スクリプト
Google Cloud 公式リファレンス
- GCS バックエンドを使用した Terraform 状態管理: https://cloud.google.com/docs/terraform/resource-management/store-state
- OS Login の仕組みと構成手順: https://cloud.google.com/compute/docs/oslogin
- IAP を使用した TCP 転送(SSH 接続)の概要: https://cloud.google.com/iap/docs/using-tcp-forwarding
- IAP 経由の接続に必要な IP アドレス範囲と FW 設定: https://cloud.google.com/iap/docs/using-tcp-forwarding#create-firewall-rule
Terraform / Ansible 公式リファレンス
- Terraform: GCS バックエンドの構成リファレンス: https://developer.hashicorp.com/terraform/language/settings/backends/gcs
- Ansible: ネットワーク制限下での ProxyCommand 実行(ssh_common_args): https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html#list-of-behavioral-inventory-parameters

コメントを残す