オンプレミス環境での Azure リソースの作成
このトピックは Windchill オンプレミスのシステム管理者を対象としています。
概要
Windchill AI Assistant プラグインは、オンプレミス環境の Windchill ユーザーに AI を活用した機能を提供するために、複数の Microsoft Azure サービスを必要とします。
このプラグインでは、次の Azure サービスが使用されます。
Azure AI 検索 - ドキュメントのインデックシングおよびサーチに使用
Azure AI Foundry - チャット補完およびドキュメントのベクトル化に使用
Azure Storage - ドキュメントの一時的な取り込みに使用
Azure Entra ID - サービスプリンシパルの管理および役割ベースのアクセス制御 (RBAC) に使用
Azure 展開スクリプト - インフラストラクチャの自動プロビジョニングに使用
必要なすべての Azure サービスは、Azure Resource Manager (ARM) テンプレートによる Infrastructure as Code (IaC) を使用して定義および展開されます。
このプラグインは、Azure Entra ID サービスプリンシパルを使用して、Azure AI 検索、Azure AI Foundry、および Azure Storage の各エンドポイントに対して認証を行います。承認は、役割ベースのアクセス制御 (RBAC) を介して実施されます。
Azure AI 検索、Azure AI Foundry、Azure Storage のアカウントは、パブリックエンドポイントで展開され、コンフィギュレーション可能な IP ベースのファイアウォール規則によって保護されます。ネットワークアクセスは、承認されたクライアント IP 範囲に制限できます。
これらのネットワークアクセス制御を組織のセキュリティとコンプライアンスの要件に従ってレビューおよび設定することは、展開オーナーの責任です。
必要条件
Windchill AI Assistant プラグイン用の Azure リソースを展開する前に、次の必要条件が満たされていることを確認してください。
展開に使用するシステムに Python 3.10.0 以降がインストールされている。
「Windchill AI Assistant コンフィギュレーション」ウィンドウの下部で提供されている AI_Assistant_Plugin_Azure_IaC.zip ファイルをダウンロード済みである。
プラグインマネージャで、「Windchill AI Assistant」を右クリックして「プラグインを設定」を選択します。
* 
この手順で作成した Azure リソースは、Windchill AI Assistant プラグイン専用に使用する必要があります。
手順
必要な Azure リソースを作成するには、次の手順を実行します。
手順 1: Azure CLI のインストールと Python の確認
Azure コマンドラインインタフェース (CLI) をインストールし、展開システム上で Python 3.10 以降を使用できることを確認します。
展開時に Azure と通信するには、az コマンドを使用します。
展開ヘルパースクリプトを実行するには、python3 コマンドを使用します。
オペレーティングシステムに固有のインストール手順については、公式の Azure コマンドラインインタフェース (CLI) ドキュメントを参照してください。
手順 2: Azure リソースグループの作成
Windchill AI Assistant リソースをホストするための新しい Azure リソースグループを作成します。詳細については、「リソースグループの管理」を参照してください。
* 
Azure Resource Manager (ARM) テンプレートは、このリソースグループに展開されます。
手順 3: サービスプリンシパルの作成
Azure リソースに対するプラグインの認証用に、Azure Entra ID サービスプリンシパルを作成します。
1. Azure CLI がインストールされているシステム上でターミナルまたはコマンドプロンプトを開きます。
2. Entra ID サービスプリンシパルを作成できる ID を使用してログインします。
3. 次のコマンドを実行して、新しいサービスプリンシパルを作成します。
az ad sp create-for-rbac \
--display-name "<Display name>"
<Display name> で、必要な表示名を指定します。たとえば、wcaiassistant-onprem-sp などです。
このコマンドは、次のような値を出力します。
{
.."appId": "<client-id>",
.."password": "<client-secret>",
.."tenant": "<tenant-id>"
}
client IDclient secret、および tenant ID を安全に保存します。
これらの値は、後でプラグインを設定する際に必要になります。
サービスプリンシパルのオブジェクト ID を取得するには、次のコマンドを実行します。
az ad sp show --id <client-id> --query id -o tsv
オブジェクト ID は、後で IaC コンフィギュレーションを行う際に必要になります。
手順 4: Azure CLI を使用したサインインおよび必要な役割の確認
1. Azure CLI がインストールされているターミナルまたはコマンドプロンプトを開きます。
2. az login コマンドを使用して、(ユーザーまたはサービスプリンシパルとして) サインインします。
3. サインインするユーザーまたはサービスプリンシパルに「共同作成者」役割があること、またはリソースグループ内で少なくとも次の役割が割り当てられていることを確認します。
Cognitive Services 共同作成者
Cognitive Services OpenAI ユーザー
Search Service 共同作成者
ストレージアカウント共同作成者
次の操作を実行できるカスタム役割:
Microsoft.Resources/deploymentScripts/read
Microsoft.Resources/deploymentScripts/write
4. サインインしているユーザーまたはサービスプリンシパルに、リソースグループに対する役割ベースのアクセス制御の管理者役割が割り当てられていることを確認します。
手順 5: ARM テンプレートとパラメータファイルの準備
1. 次のファイルをローカルワーキングディレクトリにコピーします。
wcaia.json (ARM テンプレートファイル)
wcaia.parameters.json (パラメータファイル)
deploy-wcaia.py (展開ヘルパースクリプト)
2. wcaia.parameters.json ファイルを編集して、必要なパラメータの値を指定します。
* 
トークン関連のパラメータ (management_tokenmanagement_token_expires_onsearch_tokensearch_token_expires_on など) は設定しないでください。これらの値は、展開ヘルパースクリプトによって自動的に設定されます。
a. location に、以下のサポートされている Azure リージョンのいずれかを指定します。
australiaeast
brazilsouth
canadaeast
eastus
eastus2
francecentral
germanywestcentral
italynorth
japaneast
koreacentral
northcentralus
polandcentral
southafricanorth
southcentralus
spaincentral
swedencentral
switzerlandnorth
uaenorth
uksouth
westus
westus3
* 
リージョン固有の制限については、Microsoft の Azure AI 検索がサポートされているリージョンに関するドキュメントを参照してください。制限には、次のようなものがあります。
容量の制約。これにより、展開が失敗する可能性があります。
ストレージ上限の低減 (たとえば、160 GB から 25 GB)。これにより、一部のデータをインデックシングできない可能性があります。
可用性ゾーンの欠如。これにより、可用性の保証が低下する可能性があります。
b. (オプション) common_tags でリソースタグを指定します。
組織でタグ付けポリシーが適用されている場合、必須のタグが欠落していると、リソースの作成時に RequestDisallowedByPolicy エラーが発生する可能性があります。
c. service_principal_id を、手順 3: サービスプリンシパルの作成で作成したサービスプリンシパルのオブジェクト ID (プリンシパル ID とも呼ばれます) に設定します。
* 
この値は、サービスプリンシパルのクライアント ID ではありません。クライアント ID からオブジェクト ID を取得するには、次のコマンドを実行します。
az ad sp show --id <client-id> --query id -o tsv
d. allowed_ips に、Azure リソースにアクセスできる IPv4 アドレスまたは CIDR 範囲のリストを設定します。
プラグインを実行するすべてのホストの IP アドレスを追加します。
このリストを空 ([]) のままにすると、ファイアウォールは無効になります。
* 
Azure リソースは、パブリックインターネットのアドレス範囲で公開されます。内部ネットワーク (NAT の背後) に存在するホストの場合は、パブリックエグレス (NAT ゲートウェイ) の IP アドレスまたは CIDR 範囲を指定します。
e. ai_search_partition_count を、必要な Azure AI 検索の Standard S1 パーティションの数に設定します。詳細については、AI 検索パーティション数の推定を参照してください。
f. (オプション) 展開された AI Foundry リージョンでテキスト埋め込みモデルに十分な容量を使用できない場合にのみ、text_embedding_capacity パラメータをデフォルト値の 4000 容量単位 (1 分あたり 400 万トークン) より小さい値に設定します。
* 
インデックシングの速度は、使用可能なテキスト埋め込み容量によって異なります。設定された値が使用可能な制限を超えている場合、展開ヘルパースクリプトは使用可能な実際の容量を報告します。
g. (オプション) デフォルトでは、Azure Storage アカウントの冗長性コンフィギュレーション storage_sku_name は、Standard_LRS (ローカル冗長ストレージ) に設定されています。追加オプションがサポートされているリージョンでは、この値を別の冗長性レベルに変更できます。
* 
すべての資格証明を会社のセキュリティボルトに安全に保存し、必要なときに確実にアクセスできるようにします。
パラメータファイルの例:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"management_token": {
"value": "SET_BY_PYTHON_SCRIPT"
},
"management_token_expires_on": {
"value": "SET_BY_PYTHON_SCRIPT"
},
"search_token": {
"value": "SET_BY_PYTHON_SCRIPT"
},
"search_token_expires_on": {
"value": "SET_BY_PYTHON_SCRIPT"
},
"location": {
"value": "swedencentral"
},
"common_tags": {
"value": {
"environment": "QA",
"purpose": "Windchill AI Assistant"
}
},
"service_principal_id": {
"value": "00000000-0000-0000-0000-000000000000"
},
"allowed_ips": {
"value": []
},
"ai_search_partition_count": {
"value": 1
},
"text_embedding_capacity": {
"value": 4000
},
"storage_sku_name": {
"value": “Standard_LRS”
} }
}
手順 6: 一意の展開名の定義
グローバルに一意の展開名を定義します。展開名は、Azure リソース名のプレフィックスとして使用されます。
展開名は、次の要件を満たしている必要があります。
小文字と数字のみが含まれる。
20 文字以内である。
acmeaidev
companywcaiprod
ai2025subscracme
手順 7: Azure リソースの作成
ARM テンプレートファイルと展開ヘルパースクリプトが含まれているディレクトリから次のコマンドを実行して、必要な Azure リソースを作成します。
python3 deploy-wcaia.py
--resource-group ${RESOURCE_GROUP}
--deployment-name ${DEPLOYMENT_NAME}
ここで、
${RESOURCE_GROUP} は Azure リソースグループの名前です。
${DEPLOYMENT_NAME} は一意のテンプレート展開名です。
展開ヘルパースクリプトからのコンフィギュレーション出力
展開が正常に完了した後、Windchill AI Assistant プラグインをその Azure サービスに接続するために必要なコンフィギュレーション値が、展開ヘルパースクリプトによって生成されます。これらの値は、プラグインのコンフィギュレーション中に入力する必要があります。
展開ヘルパースクリプトは、Windchill AI Assistant で使用される次の Azure サービス用のコンフィギュレーション値を提供します。
Azure AI 検索
Azure OpenAI
Azure Storage
プラグインを設定する際には、スクリプトによって生成された値を使用します。設定手順については、Windchill AI Assistant プラグインの設定を参照してください。
展開ヘルパースクリプトを使用して、以前に完了した展開からコンフィギュレーション値を取得することもできます。これを行うには、--skip-deployment コマンドラインオプションを指定してスクリプトを実行します。
* 
Azure サービスプリンシパルのクライアントシークレットは、作成時にのみ取得できます。クライアントシークレットを取得できなくなった場合は、プラグインのコンフィギュレーションを続行する前に、Azure portal で新しいクライアントシークレットを作成する必要があります。
まれに、Azure 展開プロセス内部の一時的な競合状態により、スクリプトが停止し、エラーが報告されることがあります。この問題が発生した場合は、部分的なインストールをすべてクリーンアップしてから、展開スクリプトを再実行します。
次の例は、展開ヘルパースクリプトによって生成される標準的なコンフィギュレーション出力を示しています。実際の値は、ご使用の環境によって異なります。
====================================

Windchill AI Assistant Configuration

Azure AI Search

Endpoint
https://acmedev-ai-search.search.windows.net

Index Name -- choose one of
default
another

Authentication Mode -- take from shared authentication configuration below


Azure OpenAI

Endpoint
https://acmedev-ai-foundry.cognitiveservices.azure.com/

Deployment
gpt-5-mini

Authentication Mode -- take from shared authentication configuration below

Azure Storage

Account Name
acmedevdti

Container Name -- choose the one matching the index name
default
another

Authentication Mode -- take from shared authentication configuration below


-------------------------------------
(shared authentication configuration)
Authentication Mode
Service Principal

Tenant ID
31c9c31c-7621-4f8f-ae11-4e462f1be7ed

Client ID
29e5ec38-166e-11f1-1322-af400926661b

Client Secret -- Only accessible after creation. Create new secret if needed.
-- Service Principal (App Registration) name: aiassistant-testapp
-- Service Principal (App Registration) ID: da8e89d4-1fbb-4c37-9f28-a88fa598ea40
-- Azure Portal: https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Credentials/appId/29e5ec38-166e-11f1-1322-af400926661b
これは役に立ちましたか?