az loginとaz account set -s YOUR_SUBSCRIPTION_ID後に、az ad user show --id your_account@your_tenant -o tsv --query id を実行して、操作をするユーザの AAD アカウントのオブジェクトID を取得します。
取得したオブジェクトID を環境変数AZURE_PRINCIPAL_IDにセットします。
- Windows 環境で実行している場合は、$Env:AZURE_PRINCIPAL_ID="Your Object ID"を実行します。
- Linux 環境で実行している場合は、export AZURE_PRINCIPAL_ID="Your Object ID"を実行します。
azd up を実行します。- このコマンドを実行すると、Azure上に必要なリソースをデプロイし、アプリケーションのビルドとデプロイが実行されます。また、./data配下の PDF を利用して Search Index を作成します。
- Linux 環境で実行している場合は、chmod +x scripts/prepdocs.sh
-
az login --tenant 942350ba-359b-49a6-b7c4-30a8f9243f9b
このコマンドで--tenantを指定することでログインが正常に完了する。
az account set -s YOUR_SUBSCRIPTION_ID を実行する。
サブスクリプションIDは下記
3.az ad user show --id your_account@your_tenant -o tsv --query id を実行して、操作をするユーザの AAD アカウントのオブジェクトID を取得する。
→ your_account@your_tenant は 下記のユーザープリンシパル名をセットする。
5.デプロイするファイルが入っているフォルダをカレントディレクトリに指定してからazd up を実行。このときは下記のようにサブスクリプションの選択(1個しかない場合が多い)、リージョンの選択を行う。リージョンはOpenAI Serviceが使えるリージョンを選択するJapan Eastを選ぶ。
実行するとデプロイがはじまる
その後「? Enter a value for the 'vmLoginPassword' infrastructure parameter:」とvmへのログインパスワードの入力を求められる(以前に設定しているパスワードを入力するということではなく、新しく設定するという意味での入力)。
入力すると今後も使うか確認されるのでy
Ensuring search index gptkbindex exists
Traceback (most recent call last):
File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts\prepdocs.py", line 305, in
create_search_index()
File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts\prepdocs.py", line 243, in create_search_index
if args.index not in index_client.list_index_names():
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts.venv\Lib\site-packages\azure\core\paging.py", line 123, in next
return next(self._page_iterator)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts.venv\Lib\site-packages\azure\core\paging.py", line 75, in next
self._response = self._get_next(self.continuation_token)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts.venv\Lib\site-packages\azure\search\documents\indexes_generated\operations_indexes_operations.py", line 512, in get_next
raise HttpResponseError(response=response, model=error)
azure.core.exceptions.HttpResponseError: () Authorization failed.
Code:
Message: Authorization failed.
元手順 スクラッチでの開始
新規に環境をデプロイする場合は、以下のコマンドを実行してください。
az loginとaz account set -s YOUR_SUBSCRIPTION_ID後に、az ad user show --id your_account@your_tenant -o tsv --query id を実行して、操作をするユーザの AAD アカウントのオブジェクトID を取得します。
取得したオブジェクトID を環境変数AZURE_PRINCIPAL_IDにセットします。 - Windows 環境で実行している場合は、$Env:AZURE_PRINCIPAL_ID="Your Object ID"を実行します。 - Linux 環境で実行している場合は、export AZURE_PRINCIPAL_ID="Your Object ID"を実行します。
azd up を実行します。- このコマンドを実行すると、Azure上に必要なリソースをデプロイし、アプリケーションのビルドとデプロイが実行されます。また、./data配下の PDF を利用して Search Index を作成します。 - Linux 環境で実行している場合は、chmod +x scripts/prepdocs.sh -
コマンドの実行が終了すると、アプリケーションにアクセスする為の URL が表示されます。この URL をブラウザで開き、サンプルアプリケーションの利用を開始してください。
細かく手順の記載がないため、解説。 全てpwsh.exeでの実行。(最初にインストールした通常のWindows Powershellと違うPowerShell 7による実行)
1.az loginコマンドを実行する。(前に行ったazd loginとは異なるコマンドのため必要。飛ばさないように)
→ az login した後、正常であれば下記情報がシェル上に表示される
→ 問題がある場合下記のエラーが表示されることがある。
以下、ChatGPT回答------ エラーメッセージには、既定のディレクトリ というテナントがMFA(多要素認証)を要求していることが示されています。このテナントにログインするには、以下のコマンドを使用します。
az login --tenant 942350ba-359b-49a6-b7c4-30a8f9243f9b
このコマンドで--tenantを指定することでログインが正常に完了する。
3.az ad user show --id your_account@your_tenant -o tsv --query id を実行して、操作をするユーザの AAD アカウントのオブジェクトID を取得する。 → your_account@your_tenant は 下記のユーザープリンシパル名をセットする。
4.取得したオブジェクトID を環境変数AZURE_PRINCIPAL_IDにセットする。 環境変数設定は$Env:AZURE_PRINCIPAL_ID="Your Object ID"。
オブジェクトIDは3.のコマンド実行後に表示される文字列
環境変数設定のコマンド実行後、環境変数の設定がうまくいったか確認するには$Env:AZURE_PRINCIPAL_IDを実行すると良い。
5.デプロイするファイルが入っているフォルダをカレントディレクトリに指定してからazd up を実行。このときは下記のようにサブスクリプションの選択(1個しかない場合が多い)、リージョンの選択を行う。リージョンはOpenAI Serviceが使えるリージョンを選択するJapan Eastを選ぶ。
実行するとデプロイがはじまる
その後「? Enter a value for the 'vmLoginPassword' infrastructure parameter:」とvmへのログインパスワードの入力を求められる(以前に設定しているパスワードを入力するということではなく、新しく設定するという意味での入力)。 入力すると今後も使うか確認されるのでy
デプロイが継続される
-追記:下に書いてある色々を試した後に下記リンクをみて、大元の管理者ユーザーでデプロイしようとするとこのエラーが起きてしまうため、ユーザーを別に作る必要があることをしる。ユーザーをたてて、ユーザーアクセス管理者に指定、サブスクリプションへのIAM権限を与えて再度デプロイ手順を1から行うとうまくデプロイできた。 Azure-Samples/azure-search-openai-demo#4 (comment)
デプロイ後のエラー解消メモ 下記エラーが出る。 Azure Cognitive Searchのリソースは作れているがIndexの作成で失敗している。
-RDBに置き換えるとDBのセットアップはできているが、テーブル作成ができていないということ。
Ensuring search index gptkbindex exists Traceback (most recent call last): File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts\prepdocs.py", line 305, in create_search_index() File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts\prepdocs.py", line 243, in create_search_index if args.index not in index_client.list_index_names(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts.venv\Lib\site-packages\azure\core\paging.py", line 123, in next return next(self._page_iterator) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts.venv\Lib\site-packages\azure\core\paging.py", line 75, in next self._response = self._get_next(self.continuation_token) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts.venv\Lib\site-packages\azure\search\documents\indexes_generated\operations_indexes_operations.py", line 512, in get_next raise HttpResponseError(response=response, model=error) azure.core.exceptions.HttpResponseError: () Authorization failed. Code: Message: Authorization failed.
このエラーが出ていてもそのほかのサービスはデプロイできているため、アプリは立ち上がるが、社内文書検索をしようとすると下記エラーがでる。ここでnot foundになっているのが本来あるはずのindex(テーブル)
image
ストレージアカウントのアクセスキーをprepdocs.ps1でprepdocs.pyをたたいているときの引数に追加する。 image
CLIで $Env:AZURE_STORAGEKEY = "アクセスキー名" で環境変数を設定。
image image
ソース: Azure-Samples/azure-search-openai-demo#17 (comment) 英語版のリポジトリなので微妙にソースコードが違う&半年前なのでソースコードが今はかわっていることもあり、このソースで指摘しているように他の引数も設定する必要はなかった(すでに今のps1には設定されてた)
C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts\prepdocs.py:26: SyntaxWarning: invalid escape sequence '\d' epilog="Example: prepdocs.py '..\data*' --storageaccount myaccount --container mycontainer --searchservice mysearch --index myindex -v" C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts\prepdocs.py:105: SyntaxWarning: invalid escape sequence '\d' blobs = filter(lambda b: re.match(f"{prefix}-\d+.pdf", b), blob_container.list_blob_names(name_starts_with=os.path.splitext(os.path.basename(prefix))[0]))
エスケープの警告も出てくるので、下記のようにバックスラッシュを重ねるように2か所修正
epilog="Example: prepdocs.py '..\data*' --storageaccount myaccount --container mycontainer --searchservice mysearch --index myindex -v"