0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure 環境の RAG システム構築 ローカル開発手順~デプロイ②

Last updated at Posted at 2024-12-15

ローカルでの開発手順(前記事)はこちら
(この記事の解説は、前記事でサービス等作成済みな事を前提としています)

Azure 環境の RAG システム構築 ローカル開発手順~デプロイ①
https://qiita.com/KUROMAGOORO/items/f79b6f4c43756f97f02d

概要

  • Azure 環境でのアプリ開発~デプロイの流れをまとめました(②ではウェブアプリのデプロイについて)
  • 各サービスと接続する事を優先したので「①情報取得」でデータをいろいろな所から集めたり、「③生成結果保存」が複数発生します
  • 実施には偉い権限(所有者以上)が必要です
  • Azure環境での接続例
    • AISearch, AzureDatabaseMySQLServer は(多分)仮想ネットワークに属させる事が出来ないので、AppService(Webアプリ)と接続するために PrivateEndpoint を作成してあげる必要があります
      image.png

追加サービスのデプロイ(Webアプリ関連)

  • ①から追加で以下のサービスをデプロイします

AppServiceプラン

  • B1 プランを選択します
  • 現在 Japan East が人気でエラーが出たため、Japan West にしました
    image.png

仮想ネットワーク

  • Japan West で追加します

AppServiceプランが Japan East に作成出来なかったので追加で作成しましたが、既に「AppService プラン」と「仮想ネットワーク」のリージョンが揃っていたら不要です

image.png

  • 「Azure OpenAI」「ストレージアカウント」の各ネットワーク設定から、Japan West の仮想ネットワークに属させます
    image.png

  • 「委任先」があるサブネットにはプライベートエンドを作成出来ないため、プライベートエンド用に新しくサブネットを作成します
    名前だけ入力して他はデフォルトです
    image.png
    image.png

Webアプリ

  • タグを追加します
  • 「基本認証」を有効にします
    image.png

ネットワーク設定

  • 仮想ネットワーク統合で仮想ネットワークを選択します

    • 同じリージョンでないと駄目だったので、Japan West にしています
    • 作成する際は AppServiceプラン を最初に作成してエラーが出ないか確認しておくと、後々リージョン揃える必要無くて良いかもしれません
      image.png
  • 自身の IP アドレスを許可します
    image.png

ローカル git 設定

  • ローカル git を選択します
    image.png

  • ユーザ情報を入力します

  • この情報は開発者が各々設定しておく必要があります(他人のものが上書きはされない)
    image.png

システムマネージド ID 設定

  • 今回 DefaultAzureCredential() を使用しているので、Web アプリサービスに権限を付与しておく必要があります
  • この認証方法を使用した場合「キー」を必要とせず、IAM の認証によってアクセス出来る事が利点かと思います
  • ローカル確認時には動作確認前に az login をして、実行ユーザのアカウントで認証を行っていました
    https://qiita.com/KUROMAGOORO/items/f79b6f4c43756f97f02d#%E3%82%A2%E3%83%97%E3%83%AA%E6%A7%8B%E7%AF%89
    image.png
  • 「ストレージBLOBデータ共同作成者」「Cognitive Services OpenAI User」を付与します
    image.png
  • それぞれのサービスで web アプリにロールが付与されている事を確認します
    image.png

プライベートエンドポイントの作成

  • 仮想ネットワーク内に「プライベートエンドポイント」を作成して、仮想ネットワークに属す事が出来ないサービスへの接続を可能な状態にします

AISerach

  • プライベートエンドポイントを作成します
    image.png

Azure Database for MySQL Flexible Server

  • プライベートエンドポイントを作成します
    image.png

資材の作成

ローカル git から clone

  • 作成された git URL をコピーして clone します

  • clone する際に先ほど作成したユーザ情報を聞かれるので、入力します
    image.png

  • 空のフォルダが作成されるので、「webapp」フォルダを作成します

  • ローカルで動かしていたアプリを上記フォルダにコピーします
    image.png
    image.png

azd init による初期化

  • azd init で初期化をします

    • 「Use code in the current directory」を選択します
    • 「Confirm and continue initializing my app」を選択します
    • 任意の「environment name」を入力します
      image.png
  • 新規ファイルが作成されています
    image.png

azd init のテンプレートファイルを更新

  • azure.yaml を編集します
    • webアプリ作成時の「タグ」名に合わせて「webapp-rrr3」にします
    • コンテナアプリではないので「appservice」にします
azure.yaml
# yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json

name: webapp-rrr3
metadata:
    template: azd-init@1.9.3
services:
-   webapp:
+   webapp-rrr3:
        project: webapp
-       host: containerapp
+       host: appservice
        language: python
  • インフラは新規構築しないので infra/main.bicep は全てコメントアウトします
    image.png

  • 任意の実施で大丈夫ですが .gitignore は既存のものはコメントアウトして、ルートフォルダの方に venv pycache を追加しています
    image.png

アプリをwebアプリ向けに更新

  • webapp/start.sh の作成

image.png

start.sh
#!/bin/sh
# TZ の変更
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtaime
echo '仮想環境の作成'
python -m venv venv
echo 'ライブラリのインストール'
./venv/bin/python -m pip install -r requirements.txt
echo 'アプリの実行'
./venv/bin/python app.py
  • webapp/app.py を更新
    • demo.launch(server_port=8000, server_name='0.0.0.0') に更新する

image.png

webアプリサービス の更新

  • 「構成」→「全般設定」の「スタートアップコマンド」に以下のコマンドを登録する
    start.sh

image.png

デプロイ

  • azd auth login を実行します

  • azd provision を実行します

    • provision はインフラ構築用ですが実行すると .azure 内の .env を更新してくれます
    • main.bicep をコメントアウトしているので、インフラの変更はありません
      image.png
      image.png
  • azd deploy を実行します

    • 完了まで時間がかかります

アプリの起動

  • 既定のドメインからアクセスしてアプリを確認します
    • アプリの立ち上げは時間かかる場合があります(初回は30分~1時間ぐらいかかることもあるかも)
      image.png
    • ログを見ながら気長に待ちます
      (ログでエラーが出ても、時間が経過すると動き出したりという事もあるので油断出来ないですが)
      image.png
  • しばらくすると確認出来ました
    image.png

アプリの動作確認

  • メッセージを送信してレスポンスを確認出来ます
    image.png
  • Blob, MySQL にデータが登録されている事を確認出来ます
    image.png
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?