【パート1】AIと一緒にGoogle Cloudのパラメータシート(詳細設計書)を作ってみた
AIを「優秀なクラウドインフラエンジニア」に見立てて、Google Cloudのパラメータシート作成を効率化するプロンプトと、その結果を紹介します。
Table of contents
author: kuribo-
はじめに
インフラチームのkuribo-です。
インフラ構築プロジェクトにおいて、パラメータシート(詳細設計書)の作成は、品質を担保する上で非常に重要ですが、毎回ゼロから作るのはなかなかに骨が折れる作業ですよね。
そこで今回は、GeminiのCanvasを「優秀なクラウドインフラエンジニア」に見立てて、この設計書作成をサポートしてもらいました。
本記事では、 【パラメータシート作成編】 として、Canvasを使ってパラメータシートの作成をする時にどのように行うと良いかや、うまくアウトプットを出してもらうためのプロンプトの工夫、その結果をご紹介します!
AIへの依頼(プロンプト)の工夫
AIから的確な成果物を引き出すには、依頼内容(プロンプト)が非常に重要です。
私が実際に試して効果的だと感じたポイントは以下の2点です。
- 明確な役割設定(ペルソナ): AIを単なるツールとしてではなく、「優秀なクラウドインフラエンジニア」として設定しました。これにより、より専門的で実践的なアウトプットが期待できます。
- 具体的なフォーマットとルールの提示: 最終的にスプレッドシートで管理することを伝え、転記しやすいフォーマットを指定します。また、「実在するリソースやパラメータのみを使う」といった制約をルールとして与えることで、アウトプットの精度を高めます。
これらのポイントを盛り込み、最終的に以下のようなプロンプトで依頼しました。
あなたは優秀なクラウドインフラエンジニアの一人です。
この度、インフラチームで使うパラメータシート(詳細設計書)を作成します。
そこで、一般的なWebシステム構成を想定したパラメータシートの **「テンプレート(素案)」** と、 **具体的な値をすべて入力した「記入例」** の2つを作成してください。
最終的にはスプレッドシートで管理するため、以下のフォーマットとルールを守ってください。
# フォーマット
- サービス毎
- 作成するリソース名
- サービスのパラメータ
# ルール
- 存在しないリソースを作成しないこと
- 存在しないパラメータを作成しないこと
- システムを開発する上で必要なリソースを作成すること
- Compute Engineを作成する場合はVPCが必須であるなど、インフラ的に必要な前提事項を満たすこと
生成された成果物と所感
このプロンプトの結果、一般的なWebシステム構成(VPC、サブネット、ファイアウォール、GCE、外部LB、Cloud SQL、GCSなど)を網羅した、実践的なパラメータシートの記入例が生成されました。
各パラメータもGoogle Cloudの実際の仕様に準拠しており、ほぼそのままプロジェクトのたたき台として使えるクオリティでした。
特に、インフラの前提知識(例えば、GCEにはVPCが必要など)を理解した上で構成案を提示してくれた点には驚きました。
生成された成果物は以下です。(毎回同じ内容が出力されるわけではないので、今回はあくまで例です)
# **GCP パラメータシート(記入例)**
## **1. ドキュメント管理**
| 項目 | 内容 |
| :------------------------- | :--------- |
| **ドキュメントバージョン** | 1.0 |
| **作成日** | 2023/10/27 |
| **作成者** | 田中 太郎 |
| **最終更新日** | 2023/10/27 |
| **最終更新者** | 田中 太郎 |
## **2. プロジェクト基本情報**
| 項目 | 内容 |
| :--------------------------- | :----------------------- |
| **プロジェクトID** | my-web-system-prod-12345 |
| **プロジェクト番号** | 123456789012 |
| **主リージョン** | asia-northeast1 (東京) |
| **副リージョン(DR用など)** | asia-northeast2 (大阪) |
## **3. ネットワーク (VPC)**
### **3.1. VPC**
| 項目 | 内容 |
| :--------------------- | :------- |
| **VPC名** | vpc-prod |
| **ルーティングモード** | REGIONAL |
### **3.2. サブネット**
| 項目 | サブネット1 | サブネット2 |
| :----------------------------- | :------------------ | :----------------- |
| **サブネット名** | subnet-prod-web-an1 | subnet-prod-db-an1 |
| **リージョン** | asia-northeast1 | asia-northeast1 |
| **IPアドレス範囲 (CIDR)** | 10.0.1.0/24 | 10.0.2.0/24 |
| **プライベートGoogleアクセス** | 有効 | 有効 |
### **3.3. ファイアウォールルール**
| ルール名 | ネットワーク | ターゲットタグ | ソースIP範囲 / ソースタグ | プロトコル:ポート | 優先度 | アクション |
| :-------------------------- | :----------- | :--------------------------------------------- | :------------------------ | :---------------- | :----- | :--------- |
| fw-allow-http-https | vpc-prod | web-server | 0.0.0.0/0 | tcp:80, tcp:443 | 1000 | 許可 |
| fw-allow-ssh-from-iap | vpc-prod | web-server, ap-server | 35.235.240.0/20 | tcp:22 | 1000 | 許可 |
| fw-allow-internal-web-to-ap | vpc-prod | ap-server | web-server (ソースタグ) | tcp:8080 | 1000 | 許可 |
| fw-allow-internal-ap-to-db | vpc-prod | db-server (※実際はCloud SQLのPrivate IPに適用) | ap-server (ソースタグ) | tcp:3306 | 1000 | 許可 |
## **4. ロードバランシング (Cloud Load Balancing)**
### **4.1. 外部HTTP(S)ロードバランサ**
| 項目 | 内容 |
| :----------------------- | :-------------------- |
| **LB名** | lb-prod-web |
| **IPアドレス名** | ip-prod-web |
| **IPアドレス (Static)** | 34.XXX.XXX.XXX |
| **SSL証明書名** | cert-prod-example-com |
| **バックエンドサービス** | bs-prod-web |
### **4.2. バックエンドサービス**
| 項目 | 内容 |
| :----------------------------- | :------------------- |
| **バックエンドサービス名** | bs-prod-web |
| **バックエンドタイプ** | インスタンスグループ |
| **対象のインスタンスグループ** | mig-prod-web |
| **ヘルスチェック** | hc-prod-web |
| **Cloud CDN** | 有効 |
### **4.3. ヘルスチェック**
| 項目 | 内容 |
| :-------------------- | :------------ |
| **ヘルスチェック名** | hc-prod-web |
| **プロトコル** | HTTP |
| **ポート** | 80 |
| **リクエストパス** | /health_check |
| **チェック間隔 (秒)** | 5 |
| **タイムアウト (秒)** | 5 |
| **正常しきい値** | 2 |
| **異常しきい値** | 2 |
## **5. コンピューティング (Compute Engine)**
### **5.1. インスタンステンプレート (Webサーバー用)**
| 項目 | 内容 |
| :---------------------------- | :----------------------------- |
| **テンプレート名** | it-prod-web-v1 |
| **マシンタイプ** | e2-medium (2vCPU, 4GBメモリ) |
| **ブートディスクイメージ** | Debian GNU/Linux 11 (bullseye) |
| **ブートディスクサイズ (GB)** | 20 |
| **ブートディスクタイプ** | pd-balanced |
| **ネットワークタグ** | web-server |
| **サービスアカウント** | プロジェクトのデフォルトSA |
### **5.2. インスタンステンプレート (APサーバー用)**
| 項目 | 内容 |
| :---------------------------- | :----------------------------- |
| **テンプレート名** | it-prod-ap-v1 |
| **マシンタイプ** | e2-medium (2vCPU, 4GBメモリ) |
| **ブートディスクイメージ** | Debian GNU/Linux 11 (bullseye) |
| **ブートディスクサイズ (GB)** | 20 |
| **ブートディスクタイプ** | pd-balanced |
| **ネットワークタグ** | ap-server |
| **サービスアカウント** | プロジェクトのデフォルトSA |
### **5.3. マネージドインスタンスグループ (MIG)**
| 項目 | WebサーバーMIG | APサーバーMIG |
| :--------------------------- | :---------------------------------- | :---------------------------------- |
| **MIG名** | mig-prod-web | mig-prod-ap |
| **インスタンステンプレート** | it-prod-web-v1 | it-prod-ap-v1 |
| **ロケーション** | マルチゾーン (asia-northeast1-a, c) | マルチゾーン (asia-northeast1-a, c) |
| **自動スケーリング** | オン | オン |
| **最小インスタンス数** | 2 | 2 |
| **最大インスタンス数** | 10 | 10 |
| **スケーリング指標** | CPU使用率 | CPU使用率 |
| **ターゲット使用率 (%)** | 60 | 60 |
## **6. データベース (Cloud SQL for MySQL)**
| 項目 | 内容 |
| :------------------------- | :------------------------------------------- |
| **インスタンスID** | mysql-prod-master |
| **データベースバージョン** | MYSQL_8_0 |
| **リージョン** | asia-northeast1 |
| **ゾーン** | asia-northeast1-a |
| **高可用性 (HA)** | 有効 (フェイルオーバー先: asia-northeast1-c) |
| **マシンタイプ** | db-n1-standard-2 (2vCPU, 7.5GBメモリ) |
| **ストレージタイプ** | SSD |
| **ストレージ容量 (GB)** | 100 |
| **自動増量** | 有効 |
| **バックアップ** | 有効 |
| **バックアップウィンドウ** | 04:00 - 08:00 (JST) |
| **プライベートIP** | 有効 (VPC: vpc-prod) |
## **7. ストレージ (Cloud Storage)**
| 項目 | 内容 |
| :----------------------- | :------------------------------- |
| **バケット名** | my-web-system-prod-static-files |
| **ロケーション** | ASIA |
| **ストレージクラス** | Standard |
| **公開アクセス制御** | 均一 (公開しない) |
| **ライフサイクルルール** | 365日経過後にArchiveクラスに移行 |
## **8. DNS (Cloud DNS)**
| ゾーン名 | レコードタイプ | DNS名 | TTL | データ |
| :--------------- | :------------- | :------------------ | :-- | :------------------------ |
| example-com-zone | A | www.example.com. | 300 | 34.XXX.XXX.XXX (LBのIP) |
| example-com-zone | CNAME | static.example.com. | 300 | c.storage.googleapis.com. |
※GCEのSAにデフォルトのサービスアカウントを指定していますが、実際のプロダクション環境では最小権限の原則に従い専用のサービスアカウントを作成して利用してください。
おわりに
これまで数時間かかっていた設計書の初期ドラフト作成が、AIを活用することで文字通り数分で完了しました。
これにより、エンジニアはより創造的な作業やアーキテクチャの検討に多くの時間を割けるようになります。
たたき台作成の圧倒的なスピードは大きな業務効率化に繋がると実感しました。
今回はパラメータシートから単体テスト仕様書を作成するという流れを説明したかったので、基本設計書のインプットもなく1からパラメータシートを作成させました。
ただ、本来は基本設計書というインプットが存在するはずですので、今回作成したものより解像度の高いものが作成できます。
次回はこのパラメータシートを元に単体テスト仕様書を自動生成していきます。
※本記事は、ジーアイクラウド株式会社の見解を述べたものであり、必要な調査・検討は行っているものの必ずしもその正確性や真実性を保証するものではありません。
※リンクを利用する際には、必ず出典がGIC dryaki-blogであることを明記してください。
リンクの利用によりトラブルが発生した場合、リンクを設置した方ご自身の責任で対応してください。
ジーアイクラウド株式会社はユーザーによるリンクの利用につき、如何なる責任を負うものではありません。