プライベート IP のピアリング接続のテスト

このガイドでは、トレーニング ジョブでネットワーク内のプライベート IP にアクセスできることをテストする方法について説明します。最初に、VPC ネットワークと AI Platform Training の間にプライベート接続を作成する必要があります。

概要

このテストの設定は、次の 2 つの部分で構成されています。

  • ネットワークにエンドポイントを設定する。
  • そのエンドポイントにアクセスするテスト トレーニング ジョブを送信する。

エンドポイントの設定

エンドポイントを設定するには、ネットワーク内の VM インスタンスにローカル サーバーを設定します。

  1. VPC ネットワーク内に Compute Engine インスタンスを作成します。
  2. ファイアウォール ルールを確認して、AI Platform Training ネットワークからの上り(内向き)が制限されていないことを確認します。制限されている場合、AI Platform Training ネットワークで AI Platform Training(と他のサービス プロデューサー)用に予約した IP 範囲にアクセスできるように、ルールを追加します。
  3. VM のプライベート IP アドレスを確認します。

    • [VM インスタンス] ページに移動
    • インスタンスの [VM インスタンスの詳細] ページに移動して、ページに記載されている内部 IP を確認します。
    • インスタンスの名前を設定し、次の gcloud コマンドを実行します。

      INSTANCE_NAME="your-instance-name"
      gcloud compute instances describe $INSTANCE_NAME \
        --format="value(networkInterfaces.networkIP)"
      
  4. VM に SSH 接続し、Node JS をインストールします。

  5. 次の Node JS のサンプルコードをコピーして、プライベート IP アドレスを入力します。

     const http = require('http');
     // Fill in the value of your vm's private IP
     const hostname = 'your_private_ip';
     const port = 3000;
     const server = http.createServer((req, res) => {
               res.statusCode = 200;
               res.setHeader('Content-Type', 'text/plain');
               res.end('Hello World ' + req.url + '\n');
     });
     server.listen(port, hostname, () => {
               console.log('Server running at http://${hostname}:${port}/');
     });
     ```
    
  6. サーバーを実行します。

    nodejs hw.js
    
  7. トレーニング ジョブを送信するために、VM の SSH から抜けます。

テスト トレーニング ジョブの送信

モデルをトレーニングする代わりに、このトレーニング ジョブはエンドポイントにアクセスして、AI Platform Training がネットワーク内のプライベート IP にアクセスできることを確認します。

  1. Python トレーニング サンプル アプリケーションをコピーして、AI Platform Training に送信します。
  2. プライベート IP アドレスを含むようにコードを更新します。

    import logging
    import os
    import sys
    def main():
      # Fill in the value of your vm's private IP
      hostname = "your_private_ip"
      response = os.system("curl http://" + hostname + ":3000/you_can_write_your_name_here")
      if response == 0:
        print(hostname, "is up!")
        logging.info("%s is up; Peering successful!", hostname)
        sys.exit(0)
      else:
        logging.error("%s is down; Peering failed!", hostname)
        sys.exit(1)
    if __name__ == "__main__":
      logging.getLogger().setLevel(logging.INFO)
      main()
    
  3. ネットワークを指定する config.yaml を作成します。共有 VPC を使用している場合は、VPC ホスト プロジェクト番号を使用します。

    ネットワーク名が正しくフォーマットされていることを確認します。

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    NETWORK=your-network-name
    
    cat << EOF > config.yaml
    trainingInput:
      scaleTier: BASIC
      network: projects/$PROJECT_NUMBER/global/networks/$NETWORK
    EOF
    
  4. AI Platform Training にジョブを送信します。

    BUCKET_NAME=your_bucket_name
    JOB_ID='test_vpc_peering_job'
    
    gcloud ai-platform jobs submit training $JOB_ID \
      --module-name trainingcode.test_peering \
      --stream-logs \
      --runtime-version 1.15 \
      --job-dir gs://$BUCKET_NAME/$JOB_ID \
      --region us-central1 \
      --package-path trainingcode/ \
      --config config.yaml
    

    ジョブが正常に完了すると、「Peering successful(ピアリングに成功しました)」と出力されます。これにより、AI Platform Training とのピアリング接続が確認されたことになります。