ほりひログ

所属組織の製品 (Azure とか) に関連する内容が多めだけど、個人の見解であって、所属組織を代表する公式情報ではないです。

Azure AI Foundry Agent ServiceのAzure Functionsツールを試すはずだったのに、気づいたらIaCしてた

Azure AI Foundry Agent ServiceでAzure Functionsツールを使ってみたかった。

手始めに、AzureポータルからAzure AI Foundry -> Foundryプロジェクト -> エージェントと作っていき、エージェントにアクションを追加してみると、

なんと、ポータルからは追加できない。。。

大丈夫。俺たちにはREST APIがある。

このドキュメントを頼りに、az restでリクエストしてみると、
Enterprise Standardじゃないとダメ(超意訳)、とな。。。

確かにこっちのドキュメントにも
と書いてある。

調べてみると、Azure AI Foundryのプロジェクトの構成には、いくつかパターンがあるらしい。
learn.microsoft.com

曰く、

  • 基本的なセットアップ: AzureポータルやAI Foundryのポータルから作れるプロジェクト。
    Azure AI Foundry Agent Serviceのエージェント管理用ストレージとして、Azureプラットフォームが準備したマネージドなストレージを使う。
  • 標準セットアップ: エージェント管理用ストレージ類を、ユーザが用意してBYOxするプロジェクト。
    プロジェクトレベルのデータ分離のコントロールができる。
    ただしAzureポータルやAI Foundryのポータルからは作れないし、エージェントが使えるツールの違いはAzure Functionsくらい。

最初に作ったプロジェクトはポータルから作ったので、「基本的なセットアップ」というものだったようだ。

Azure Functionsツールを使うには「基本的なセットアップ」のプロジェクトではダメなので「標準セットアップ」が必要だけど、AzureポータルやAI Foundryのポータルから作れないのでテンプレートを書いてみた。

github.com

くいっくすたーと

まず事前に以下のリソースを準備して、それぞれのリソースIDを控えておく。

  • Azure AI Foundry
  • Azure Cosmos DB
  • Azure AI Search
  • Azure Storage Account

あとはリポジトリ内の main.bicep を使って az deployment group create -f main.bicep -g ... の様にデプロイする。

ついでに作ったDeploy to Azureボタンからもデプロイできる。
# 久々過ぎて色々忘れてた

Deploy to Azure

すると、 👆の4つのリソースIDを聞いてくるので、コピーしておいたリソースIDを入れて数分待てばデプロイ完了。

デプロイの流れ

テンプレートでやっていることは、

  1. リソースIDで指定した以下のリソースがちゃんとあるかを確認する
    • Azure AI Foundry
    • Azure Cosmos DB
    • Azure AI Search
    • Azure Storage Account
  2. AI Foundryリソースの下にプロジェクトリソースとリソース接続を作成する
  3. プロジェクトリソースのマネージドIDに以下のロールを割り当てる
    • Cosmos DBのCosmos DB Operator
    • Storage AccountのStorage Blob Data Contributor
    • AI SearchのSearch Index Data ContributorとSearch Service Contributor
  4. AI Foundryリソースとその下のプロジェクトリソースのそれぞれに機能ホストを作成する
    この機能ホストを作ると、プロジェクトのマネージドIDがCosmosDBとStorage Accountの中に以下のコンテナを作る
    • Cosmos DB内のコンテナ
      • <projectWorkspaceId>-thread-message-store
      • <projectWorkspaceId>-system-thread-message-store
      • <projectWorkspaceId>-agent-entity-store
    • Storage AccountのBlobコンテナ
      • <projectWorkspaceId>-azureml-blobstore
      • <projectWorkspaceId>-<12文字のランダム?文字列>-azureml-agent
  5. プロジェクトリソースのマネージドIDに以下のロールを割り当てる
    • Cosmos DBのコンテナのCosmos DB Built-in Data Contributor
    • Storage AccountのStorage Blob Data Owner

という感じ。

<projectWorkspaceId>はUUIDの書式の文字列で、これはプロジェクトリソースにある internalIdという32文字のプロパティのところどころにハイフンを入れていけばできる。
一方で<12文字のランダム?文字列>の部分は謎。どこから来たのかわからない文字列が入っている。

ほぼ👇に書いてある通り(粒度が違うけど)なので、どうぞご参考に。
learn.microsoft.com

少し補足。 こっちのドキュメントには準備するリソースとしてKey Vaultも書いてある。
けど、準備の項目以降一度も出てこないので、何に使うのかさっぱりわからない。

今回のテンプレートには含めていない。

実は

似たような公式テンプレートは既にあった

この公式テンプレートの方で試してみた感じ、Azure AI Foundryのリソースやプロジェクトの名前など、いろんなところにランダム文字列を勝手に追加してしまうので、あまり使い勝手がよくない。

そこで今回、この公式テンプレートを参考にして、自分好みのリソース名でデプロイできる、よりお手軽なテンプレートを作ってみた。

環境を作るところで燃え尽きたので、メインのAzure Functionsとの連携はまた今度。