1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

エラーを潰しながら、FastAPI(Azure Web App)からAzure AI Agent Serviceへアクセスする

Last updated at Posted at 2025-03-17

問題点

以下のようにリソースを構築し、Azure Web AppにデプロイしたFastAPIのアプリから、Azure AI Agent Serviceへアクセスします。

image.png

FastAPIは以下なります。

import os
from dotenv import load_dotenv
import json
import base64
import uvicorn
from fastapi import FastAPI, Request, HTTPException
from fastapi.middleware.cors import CORSMiddleware
import timeout_decorator
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential

fast_app = FastAPI()

fast_app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    # allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

load_dotenv()

PROJECT_CONNECTION_STRING = os.environ["PROJECT_CONNECTION_STRING"]
AGENT_ID = os.environ["AGENT_ID"]

# プロジェクトクライアントの作成
project_client = AIProjectClient.from_connection_string(
    credential=DefaultAzureCredential(),
    conn_str=PROJECT_CONNECTION_STRING,
)


@fast_app.post("/ai")
async def route_ai_analysis(request: Request):
    # 省略:Azure AI Agent Serviceのほうで質問の回答を生成し返答する処理

if __name__ == "__main__":
    uvicorn.run(fast_app, host="0.0.0.0", port=8000)

ローカルでFastAPIを実行したときは問題なくて、Azureにデプロイするのも成功しましたが、

image.png

image.png

デプロイしたWebアプリにリクエストを投げてみたところ、ずっとエラーになります。。。

image.png

エラー①:認証エラー

AzureDeveloperCliCredential: Azure Developer CLI could not be found. Please visit https://aka.ms/azure-dev for installation instructions and then,once installed, authenticate to your Azure account using 'azd auth login'

「FastAPIのWebアプリ → AI Agent Service」(PythonソースコードのDefaultAzureCredential()のところ)で質問を渡すときは、azureの認証が必要となります。

ローカルでFastAPIやるときは、azure-cliのインストールやaz loginを事前に実施ずみなので、特に認証エラーがでていません。

FastAPIをAzureのWebアプリにデプロイした後、同じAzure環境内のリソースだからといって、認証が不要だと勘違いされがちですが、実は認証が必要です!!!

しかし、どうやら、Webアプリ内では azure-cli のインストールや az login の実行ができないようです。。。。

解消方法①:アプリ登録wし、アクセス情報をWebアプリの環境変数に設定

Webアプリ内にはazure-cliのインストールやaz loginを実施することができないため、別途「アプリ登録」を実施し、アプリとしての認証情報をFastAPIのWebアプリに教えてあげます。

Azureポータルで「Microsoft Entra ID」を検索
image.png

左ナビゲーションバーの「アプリの登録」をクリック

image.png

「新規登録」をクリック
image.png

デフォルトの設定で登録します。
image.png

登録完了後、この画面に遷移されます。「アプリケーション (クライアント) ID
」と「ディレクトリ (テナント) ID」が認証情報なので、メモしておきます。
image.png

もう一つ「クライアントシークレット」という認証情報が必要なので、管理>証明書とシークレットをクリックし、「新しいクライアントシークレット」をクリックします。作られたシークレットをメモしておきます。
image.png

FastAPIのWebアプリの環境変数に、さきほどの認証情報を設定します。

image.png

一つ注意点として、「クライアントシークレット」は作成直後でしか見れません。時間が経つと、「クライアントシークレット」のIDである「シークレットID」しか見れなくなります。

間違えて、「シークレットID」を環境変数に設定すると、以下のエラーができしまいます。。。

Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app

エラー②:アプリの権限が足りないエラー

認証情報を設定したあと、認証エラーを突破できましたが、以下の新しいエラーが発生しました。。。

Identity does not have permissions for Microsoft.MachineLearningServices/workspaces/agents/action actions. Please refer to https://aka.ms/azureml-auth-troubleshooting to fix the permissions issue.

解消方法②で登録したアプリとして、AI Agent Serviceを操作しようとすると、捜査権限がないと怒られています!!!

解消方法②:IAMの設定

アクセス対象の「Azure AI project」を開き、左ナビゲーションバーの「アクセス制御(IAM)」をクリックします。

image.png

「ロールの割り当ての追加」
image.png

「Azure AI Administrator」を選択して「次へ」

image.png

「メンバーを選択する」をクリックします。次に、解消方法②で登録したアプリ名を検索し、選択します。「次へ」をクリックし、「レビューと割り当て」をクリックします。

image.png

すると、すべてのエラーが解消され、無事回答が「AI Agent Service → FastAPI → フロント」で返されました!

image.png

終わりに

初めてAzureでAI系のアプリを構築するのでいろいろ苦戦しました。。。

Webアプリの環境変数や登録アプリのロールを変更した直後に、エラーがすぐに解消されないことがあります。その場合、コンテナを再起動したり、少し時間をおいて再度試すのがおすすめです!

参考サイト

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?