Gemini を使用してサービスの合成モニタリング テストを作成する

1. はじめに

この Codelab では、文書作成サポート機能を使用して、既存のサービスの合成モニタリング テストを作成する方法について説明します。

演習内容

  • API を Google Cloud Run にデプロイします。これは、テストするサービスの基盤として機能します。
  • 次に、Cloud Monitoring の機能である合成モニターを作成します。
  • 文書作成サポート機能を使用して、合成モニタリングを作成します。

学習内容

  • 合成モニタリングとは。
  • 合成モニタリングにある Gemini の文書作成サポート機能を使用して、コアサービスの機能を検証するテストケースを作成する方法。

必要なもの

  • Chrome ウェブブラウザ
  • Gmail アカウント
  • 課金が有効になっている Cloud プロジェクト
  • Cloud プロジェクトで Gemini Code Assist が有効になっている

このラボは、初心者を含むあらゆるレベルのデベロッパーを対象としています。サンプルアプリは Python 言語で記述されていますが、内容を理解するために Python プログラミングに精通している必要はありません。

2. セットアップ

Google Cloud プロジェクトで Gemini for Cloud を有効にします。以下の手順に沿って操作してください。

  1. https://console.cloud.google.com にアクセスし、このラボで使用する Google Cloud プロジェクトが選択されていることを確認します。右上にある [Gemini を開く] アイコンをクリックします。

28f084ec1e159938.png

  1. コンソールの右側に Gemini for Cloud のチャット ウィンドウが開きます。下図の [有効にする] ボタンをクリックします。[有効にする] ボタンが表示されず、Chat インターフェースが表示されている場合は、プロジェクトで Gemini for Cloud がすでに有効になっている可能性が高いため、次のステップに進んでください。

e8df9adc4ea43a37.png

  1. Gemini for Cloud を有効にすると、クエリを 1 つまたは 2 つ実行してテストできます。サンプルクエリがいくつか表示されますが、「What is Synthetic Monitoring?」のようなクエリを試すことができます。

9859ea86a8310cb.png

Gemini for Cloud が質問に対する回答を返します。Google Cloud で合成モニターを作成する方法について説明したリファレンス ドキュメントのリストをご覧ください。

右上の f68286b2b2ea5c0a.png アイコンをクリックすると、Gemini for Cloud のチャット ウィンドウが閉じます。

3. Google Cloud Run にサンプル インベントリ API をデプロイする

テストの作成に入る前に、テスト対象となるサンプル API が必要になります。このため、Google Cloud Run にデプロイする簡単なインベントリ API を作成します。

ここでは、フルマネージドの Code OSS ベースの開発環境である Cloud Shell IDE を使用します。この環境には、Google Cloud サービスを効率的に使用できる Cloud Code IDE 拡張機能が付属しています。以下の手順に沿って操作してください。

  1. ide.cloud.google.com にアクセスします。IDE が表示されるまでに時間がかかることがあります。しばらくお待ちください。
  2. 下のステータスバーにある [Cloud Code - Sign in] ボタンをクリックします。指示に従ってプラグインを承認します。ステータスバーに「Cloud Code - no project」と表示されている場合は、それを選択して、使用するプロジェクトのリストから特定の Google Cloud プロジェクトを選択します。

6f5ce865fc7a3ef5.png

  1. 図のように右下にある [Gemini] ボタンをクリックし、正しい Google Cloud プロジェクトをもう一度選択します。Cloud AI Companion API を有効にするよう求められた場合は、有効にして次に進んでください。
  2. Google Cloud プロジェクトを選択したら、下の図のようにステータスバーの Cloud Code ステータス メッセージが表示されていることと、その右側で Code Assist が有効になっていることを確認します。

709e6c8248ac7d88.png

  1. 下のステータスバーで Google Cloud プロジェクト名をクリックします。

f151759c156c124e.png

  1. オプション一覧が表示されます。下のリストで [New Application] をクリックします。

91ea9836f38b7f74.png

  1. [Cloud Run] アプリケーションを選択します。
  2. [Python (Flask): Cloud Run] アプリケーション テンプレートを選択します。
  3. 新しいアプリケーションを任意の場所に保存します。
  4. アプリケーションが作成されたことを確認する通知が表示され、下に示すように、アプリケーションが読み込まれた状態で新しいウィンドウが開きます。README.md ファイルが開きます。このビューは一旦閉じて構いません。

ed250f23b0e4fee8.png

  1. エクスプローラで app.py ファイルにアクセスし、次の内容に置き換えます。
from flask import Flask, jsonify, request

app = Flask(__name__)

inventory = [
    {
        'id': 1,
        'name': 'Item 1',
        'quantity': 10
    },
    {
        'id': 2,
        'name': 'Item 2',
        'quantity': 20
    },
    {
        'id': 3,
        'name': 'Item 3',
        'quantity': 30
    }
]

@app.route('/inventory', methods=['GET'])
def get_inventory():
    return jsonify(inventory)

@app.route('/inventory/<int:id>', methods=['GET'])
def get_inventory_item(id):
    for item in inventory:
        if item['id'] == id:
            return jsonify(item)
    return jsonify({'error': 'Item not found'}), 404

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)
  1. 在庫 API を Cloud Run にデプロイします。左上のメニュー アイコンから Cloud Shell IDE で新しい Terminal セッションを起動する必要があります。メニュー アイコンをクリックし、下に示すように [Terminal] → [New Terminal] を選択します。

289173c68f1addb5.png

  1. ターミナル セッションで、次のコマンドを入力します。
gcloud run deploy --source .
  1. 上記のコマンドを実行すると、デプロイする region について質問されます。us-central1 を選択してください。unauthenticated invocations の許可を求められるので、y と言って許可してください。
  2. サービスが正常にデプロイされると、サービス URL が提供されます。メモしておきます。

4. Inventory API をテストする

ブラウザを起動して次のエンドポイントにアクセスすると、Inventory API をテストできます。

SERVICE_URL/inventory

これにより、サービスのサンプルデータに従って 3 つの在庫アイテムが返されます。レスポンスの例を次に示します。

[
  {
    "id": 1,
    "name": "Item 1",
    "quantity": 10
  },
  {
    "id": 2,
    "name": "Item 2",
    "quantity": 20
  },
  {
    "id": 3,
    "name": "Item 3",
    "quantity": 30
  }
]

これで、以下の URL を介して特定のインベントリ アイテムを取得できるようになりました。これにより、id の値が 1 の在庫アイテムが返されます。

SERVICE_URL/inventory/1

レスポンスは次のようになります。

{
  "id": 1,
  "name": "Item 1",
  "quantity": 10
}

最後に、存在しない在庫アイテムを取得してみます。

SERVICE_URL/inventory/200

id の値が 200 の在庫アイテムがないため、エラー メッセージが返されます。レスポンスの例を以下に示します。

{
  "error": "Item not found"
}

これで、Gemini を使用して Cloud Monitoring で合成モニタリング テストを作成する準備が整いました。

5. Google Cloud の合成モニタリング

ドキュメントに記載されているように、合成モニターでは、テストする内容とテストのシーケンスを定義できます。たとえば、アプリケーションのログインページ、e コマースストアのチェックアウト プロセス、アプリケーションがサードパーティ サービスに対して行う API 呼び出しをテストできます。

合成モニターを作成するときに、Cloud Run 上に構築された第 2 世代の Cloud Functions をデプロイします。関数は Node.js で作成し、オープンソースの Synthetics SDK フレームワークに依存する必要があります。Cloud Monitoring は、このフレームワークを配布して管理します。

Cloud Monitoring は、次のタイプの合成モニターをサポートしています。

Cloud Monitoring は、これらの合成モニターの実行時に多くの処理を行います。以下の処理を行います。

  • Cloud Function の関数の定期的な実行。
  • 各実行の結果の収集と保存。
  • エラー メッセージ、エラータイプ、コード行などの成功と失敗の情報
  • 実行時間
  • ログ
  • 指標

Gemini、特に Help Me Write 機能を利用して、テストの初期コードを取得します。このコードを使用して、テストを実施したり、追加機能を構築したりできます。それでは始めましょう。

6. Inventory API テストケース用の合成モニターを作成する

次に、Cloud Console に移動して合成モニターを作成します。

Cloud Console の [合成モニタリング] ページに移動します。次のようなページが表示されます。

96bfce88f55442f3.png

上記のページの [合成モニターを作成] リンクをクリックします。次のような構成フォームが表示されます。

af4dde3e9e0a5a16.png

名前 s1 を指定しましたが、任意の名前を選択できます。上記の画面の [コーディング サポート] ボタンに注目してください。それをクリックします。

ポップアップが表示されるので、在庫 API が正常に動作していることを確認するために実行するテストケースを説明するプロンプトを入力します。

a13e78db15b37dd3.png

プロンプト編集ボックスで、次のようなプロンプトを使用します。

Help me write Node.js based synthetic test script with the assert module that performs the following tests:
1. A GET operation on SERVICE_URL/inventory. The http response code returned should be 200. 
2. A GET operation on SERVICE_URL/inventory/1. The http response code returned should be 200. The response data is JSON format. It should be a single object with attributes as follows: "id" value should be 1, "name" value should be "Item 1" and "quantity" value should be 10.
3. A GET operation on SERVICE_URL/inventory/200. The https response code returned should be 404. The response data is in JSON format. It should be a single object with attributes as follows: "error" value should be "Item not found". 

3 つのテストケースが用意されています。SERVICE_URL の値は、サービスの実際の Cloud Run サービス名に置き換えてください。

[生成] をクリックすると、Gemini はテストスイート コードと package.json ファイルも生成します(下図を参照)。生成されるコードは、以下のコードとは異なる場合があります。package.json ファイルのコードと依存関係ファイルを確認します。

d19340c357f620bd.png

[INSERT INTO CLOUD FUNCTION] をクリックします。これにより、必要な値が入力された Cloud Functions の作成フォームが表示されます。

d70e50624a09149a.png

[関数を適用]、[作成] の順にクリックします。この例ではアラート チャンネルの構成を選択していませんが、自由に選択できます。

これにより、Google Cloud Functions の作成プロセスがバックグラウンドで開始されます。この処理には数分かかることがあります。

1b07702ea5ac5bdb.png

Cloud Functions が正常にデプロイされると、Cloud Monitoring は合成モニターを呼び出すタスクを開始します。

最初は、次のように呼び出しがないことがわかります。

dac473269a289a3b.png

特定の実行が完了すると、さまざまな実行を表示できるようになります。次の画面は、テストが合格していることを示しています。

dc2d7dd98277fbcc.png

合成モニター名(s1 など)をクリックすると、次のようにさまざまな実行が表示されます。

8369a02b413d12cc.png

7. 完了

おめでとうございます。サンプル API を Google Cloud Run に正常にデプロイし、サービス機能を検証する合成モニタリング テストを作成しました。このプロセスでは、Gemini を使用してテストスイートのコードを生成しました。

8. リファレンス ドキュメント