テックブログ

エルカミーの技術ブログです

🤖 Chatbot UI を Google Cloud Run で構築

はじめに


社内でChatGPTを活用する際に、Web上で公開されているChatGPTのUIを使用するのは、セキュリティ上、不安があります。APIを介してChatGPTを利用することで、会話の内容が学習に使用される心配がありません。そのため、Google Cloud Runを使用して、API経由でChatGPTを利用するChatbot UIを構築してみました。

そして、Cloud RunにデプロイしたChatbot UIをCloud Load BalancingIdentity-Aware Proxyを使ってログイン管理をできるようにしていきます。

Cloud Run上でChatbot UIを構築


gcloudを使用して、コマンドで構築していきます。Chatbot UIを構築の流れは以下の通りです。

💡
Chatbot UIを構築の流れ
  1. Chatbot UIのGitHub から OSSのプログラム をクローンする
  2. Artifact Registry にリポジトリを作成する
  3. クローンした リポジトリ内のDocker ファイルをイメージにビルドする
  4. Artifact Registry の認証をする
  5. Artifact Registry のリポジトリにイメージをプッシュする
  6. Cloud Run上で、Chatbot UIを作成する

  1. Chatbot UIのGitHub から OSSのプログラム をクローンする
    git clone https://github.com/mckaywrigley/chatbot-ui.git
  2. Artifact Registry にリポジトリを作成する
    • [REPOSITORY_NAME]: 適当な名前
    gcloud artifacts repositories create [REPOSITORY_NAME] --location=asia-northeast1 --repository-format=docker
  3. クローンした リポジトリ内のDocker ファイルをイメージにビルドする
    • [PROJECT_ID]: GCPのPROJECT_ID
    • [REPOSITORY_NAME]: 先ほど作成したリポジトリ名
    • [IMAGE_NAME]: 適当な名前
    docker build ./chatbot-ui -t asia-northeast1-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE_NAME]
  4. Artifact Registry の認証をする
    gcloud auth configure-docker asia-northeast1-docker.pkg.dev
  5. Artifact Registry のリポジトリにイメージをプッシュする
    • [PROJECT_ID]: GCPのPROJECT_ID
    • [REPOSITORY_NAME]: 先ほど作成したリポジトリ名
    • [IMAGE_NAME]: 先ほど作成したIMAGE_NAME
    docker push asia-northeast1-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE_NAME]
  6. Cloud Run上で、Chatbot UIを作成する
    • [my-chatgpt-ui]: 適当な名前
    gcloud run deploy [my-chatgpt-ui] \
      --ingress=internal-and-cloud-load-balancing \
      --image asia-northeast1-docker.pkg.dev/[PROJECT_ID]/[REPOSITORY_NAME]/[IMAGE_NAME] \
      --allow-unauthenticated \
      --region=asia-northeast1

ログイン管理をする必要のない場合は、--ingress=allに変更してください。

この変更を行えば、Chatbot UIをすぐに利用できます。

ログイン管理


次に、Cloud RunにデプロイしたChatbot UIをCloud Load BalancingとIdentity-Aware Proxyを使ってログイン管理をできるようにしていきます。ログイン管理実装の流れは以下の通りです。

💡
ログイン管理実装の流れ
  1. IPアドレスの確保
  2. DNS設定
  3. Cloud Load Balancingの作成・設定
  4. Identity-Aware Proxy (IAP) の設定
IPアドレスの確保

以下のコマンドを実行します

gcloud compute addresses create [IPADDRESS_NAME] --project=[PROJECT_ID] --global
DNSの設定

確保した IP アドレスを参照する A レコードを Cloud DNS に設定します

Cloud Load Balancingの作成・設定
  1. ロードバランサの作成画面でHTTP(S) ロードバランシングを選択
  2. 以下の選択欄にチェックを入れる
    • インターネットから VM またはサーバーレスサービスへ
    • グローバル HTTP(S) ロードバランサ
  3. フロントエンドを構成
    • プロトコル の項目でHTTPS(HTTP/2 を含む)を選択
    • 確保した IP アドレスを設定し、証明書を作成
  4. バックエンドを構成
    • バックエンド タイプ 項目でサーバーレス ネットワーク エンドポイント グループを選択
    • 新しいバックエンド 項目でサーバーレス ネットワーク エンドポイント グループを作成
    💡
    IAPを使う場合は、Cloud CDN オフにしましょう。
  5. 証明書の確認
    • 作成したロードバランサの詳細画面から、証明書のステータスを確認する
    • 証明書のステータスがACTIVEになっていれば成功
Identity-Aware Proxy (IAP) の設定

ロードバランサを介してCloud Runサービスに接続できましたが、現状ではインターネット上のユーザーがこのサービスにアクセスできてしまいます。そのため、ロードバランサにIAPを設定し、アクセス可能なユーザーを制限します。

手順は以下の通りです。

💡
Identity-Aware Proxy (IAP) の設定手順
  1. Identity-Aware Proxy にアクセスし、先ほど作成したロードバランサのIAPをオンにする
  2. IAPにアクセスを許可するアカウントをプリンシパルとして追加
    • アクセスさせたいアカウントにロールとして、IAP-secured Web App Userを与える

まとめ


Google Cloud Runを使用して、Chatbot UIを構築してみました。

そして、Cloud RunにデプロイしたChatbot UIをCloud Load BalancingとIdentity-Aware Proxyを使ってログイン管理をできるようにしました。

社内でChatGPTを安全に使いたい場合は参考にしてみてください。

参考