※本記事は個人の技術検証に基づくものであり、所属組織の公式見解ではありません。
📚 この記事で分かること
- Azure AI FoundryでClaude 4.5をBicep(IaC)でデプロイする方法
- 初回デプロイ時に必要な「手動契約」のワークアラウンド
- 公式ドキュメントに載っていない
modelProviderDataパラメータの使い方
対象読者: Azure経験者、Bicep利用者、IaCでのインフラ管理に興味がある方
はじめに
こんにちは!Dirbatoの社内技術横断支援組織Backbeatに所属している田島です!
我々の組織では、社内向け生成AIツールを開発・提供しており、これまではAzure OpenAI Serviceを主戦場として戦ってきました。
そして、ついに……ついにヤツが来ました。
Anthropicの「Claude」がAzure AI Foundryに降臨!!
これまで他のクラウドプラットフォームでのClaude利用も検討していましたが、契約調整プロセスが必要だった私にとって、AzureでのClaude解禁はまさに「渡りに船」、いや「砂漠で見つけたオアシス」状態でした。
今回は、このClaude 4.5という強力な英霊を、 Bicepという魔導書(Infrastructure as Code)でスマートに召喚するための儀式 を紹介します。
ただし、現時点では少し「癖」のあるワークアラウンドが必要だったので、その秘術を共有します。
⚠️ 2025-12-29 現在のステータス
現在、「選択したオプションのクォーターが不足しています」という非情な宣告を受けるケースが多いようです。儀式の前に、まずはAzureポータルという名の「ギルド」で クォーター申請 を済ませておきましょう。
召喚の儀式(デプロイの流れ)
今回のミッションは以下の5ステップで進行していきます!
- 魔導書(bicepテンプレート)の執筆
- 拠点の構築(AI Foundryの初回デプロイ)
- 血の契約(画面から手動でClaudeをデプロイ&同意)
- 一度別れる(手動デプロイの削除)
- 真の召喚(bicepでの再デプロイ)
1. 魔導書(bicepテンプレート)の準備
まずは、ベースとなるBicepファイルを準備します。この魔導書には、召喚に必要な 魔法陣の構成 が記されています。
AI Foundry Hub & Project(召喚の拠点を築く)
AI Foundryの拠点となる「ハブ」と「プロジェクト」を定義します。これは英霊を召喚するための 聖地の設立 に相当します。
// AI Foundry Hub and Project
module aiFoundryHub 'core/ai/ai-foundry-hub.bicep' = {
name: 'aiFoundryHub'
scope: aiFoundryResourceGroup
params: {
hubName: 'AIFoundryHub-${resourceToken}'
projectName: 'AIFoundryProject-${resourceToken}'
location: '${location}'
storageAccountId: storage.outputs.id
keyVaultId: keyVault.outputs.keyVaultId
}
}
ハブとプロジェクトの定義詳細(魔法陣の詳細設計図)
param hubName string
param projectName string
param location string = resourceGroup().location
param tags object = {}
param storageAccountId string
param keyVaultId string
param applicationInsightsId string = ''
@allowed([ 'Enabled', 'Disabled' ])
param publicNetworkAccess string = 'Enabled'
// AI Hub (workspace with kind 'Hub')
resource hub 'Microsoft.MachineLearningServices/workspaces@2024-04-01' = {
name: hubName
location: location
tags: tags
kind: 'Hub'
identity: {
type: 'SystemAssigned'
}
properties: {
friendlyName: hubName
storageAccount: storageAccountId
keyVault: keyVaultId
applicationInsights: !empty(applicationInsightsId) ? applicationInsightsId : null
publicNetworkAccess: publicNetworkAccess
}
sku: {
name: 'Basic'
tier: 'Basic'
}
}
// AI Project (workspace with kind 'Project')
resource project 'Microsoft.MachineLearningServices/workspaces@2024-04-01' = {
name: projectName
location: location
tags: tags
kind: 'Project'
identity: {
type: 'SystemAssigned'
}
properties: {
friendlyName: projectName
hubResourceId: hub.id
publicNetworkAccess: publicNetworkAccess
}
sku: {
name: 'Basic'
tier: 'Basic'
}
}
output hubId string = hub.id
output hubName string = hub.name
output projectId string = project.id
output projectName string = project.name
Claudeモデルのデプロイ定義(契約の刻印を記す)
ここで、Claudeをデプロイするための設定を書きます。この部分が 秘伝のタレ になります!
// AI Foundry Services with Claude models
module aiFoundryServices 'core/ai/ai-foundry-services.bicep' = {
name: 'aiFoundryServices'
scope: aiFoundryResourceGroup
params: {
name: 'AIFoundryServices-${resourceToken}'
location: '${location}'
tags: tags
sku: {
name: 'S0'
}
deployments: [
{
name: 'claude-sonnet-4-5'
model: {
format: 'Anthropic'
name: 'claude-sonnet-4-5'
version: '20250929'
}
// ここが味噌!隠しパラメータ「modelProviderData」
// これは契約の刻印に相当する重要な呪文です
modelProviderData: {
countryCode: 'JP'
industry: 'technology'
}
sku: {
name: 'GlobalStandard'
capacity: 450
}
}
:
(snip)
:
]
publicNetworkAccess: isPrivateNetworkEnabled ? 'Disabled' : 'Enabled'
}
}
// (中略)
@batchSize(1)
resource deployment 'Microsoft.CognitiveServices/accounts/deployments@2023-05-01' = [for deployment in deployments: {
parent: account
name: deployment.name
properties: {
model: deployment.model
raiPolicyName: deployment.?raiPolicyName ?? null
// 公式ドキュメントには載っていないが、Claude召喚には必須の呪文!
// この「契約の刻印」がないと、召喚は失敗に終わります
modelProviderData: deployment.?modelProviderData ?? null
}
sku: deployment.?sku ?? {
name: 'Standard'
capacity: 20
}
}]
ポイント:modelProviderData の存在(隠された契約書)
公式のBicepテンプレートリファレンスには現時点で記載がありません。しかし、Azure Portalの裏側で行われているAPI通信を覗き見(プロトコル解析)したところ、業界情報などを送っていることが判明しました。これを含めないと、Bicep経由のデプロイは失敗します。
2. 拠点(AI Foundry)の構築
まずは一度、召喚の呪文(コマンド)を唱えます。
azd deploy
この時点では、AI Foundryのリソース自体は正常に作成されます。しかし、 Claudeモデルのデプロイだけは無惨にも失敗します。
まだ「契約」が済んでいないからです。英霊は、契約なき召喚には応じてくれません。
3. 血の契約(AI Foundry画面から手動デプロイ)
エンジニアたるもの、手動操作は極力避けたい……。しかし、Claudeという高貴な英霊は、一度 「対面での挨拶」 を求めてきます。これは避けられない儀式です。
- Azure AI Foundry に移動します。
- モデルカタログから Claude 3.5 もしくは 4.5 を選択します。
- 「このモデルを使用する」を選択。ここで「業界(Industry)」が聞かれます。これがいわゆる 利用規約への同意プロセス(血の契約) です。
- 適当なクォーターを割り当てて、一旦デプロイを完了させます。
これで、あなたのAzure環境に 「Claudeを利用する許可」という契約の刻印 が刻まれました。
4. 一度別れる(手動デプロイの削除)
「えっ、今デプロイしたのに!?」と思うかもしれませんが、我々の目的はあくまで 「Bicep(コード)による完全統制」 です。
これで、環境は「契約済みだが、デプロイはされていない」という、Bicepにとって理想的な 更地(魔法陣を描く準備が整った状態) になりました。
5. 真の召喚(bicepでの再デプロイ)
さあ、仕上げです。もう一度あの召喚の呪文を唱えましょう。
azd deploy
……。
成功です! 今度はエラーを吐くことなく、BicepによってClaudeがデプロイされました!
これにて、 魔導書による完全自動召喚 が完成しました。Infrastructure as Codeの真髄、ここに極まれり!
おわりに
召喚成功後の感想
今回の手法は、正直に言えば 「ワークアラウンド」 です。
おそらく、初回デプロイ時のマーケットプレイスへの同意プロセスがBicep単体では完結できない(または modelProviderData の仕様が固まっていない)ことが原因だと思われます。
しかし、一度この儀式を完了させれば、以降は 完全にコード化されたインフラ管理 が可能になります。これぞIaCの醍醐味!
次なる英霊(モデル)への期待
Claude 4.5の召喚に成功した今、次はどんな英霊が降臨するのでしょうか?
Azure AI Foundryのモデルカタログが充実していく未来に、大いに期待しています!
いつの日か、手動操作なしでシュッとデプロイできる日が来ることを願っていますが、それまではこの 「一度手動でデプロイして消す」という古の儀式 で乗り切りましょう!
Happy Hacking with Claude! 🐦⬛✨
参照元:
- Markdown記法 チートシート - Qiita
- Azure Bicep テンプレートリファレンス
- Azure AI Foundry Portal
ちなみに
今回の記事は、元ネタを作ったあとgemini-3-flash-previewにFinalizeさせています。
そのプロンプトはこちらです。
Qiita記事作成プロンプト
Qiitaの記事を書くのを手伝ってほしい!
ユーザーが書きたい内容を投稿するので、それをQiita向けの記事に変換してね。
エンジニア向けなので面白おかしくウィットに富んだ内容にしてね!
アニメとかゲームとかの比喩やネタを入れると良いかも!
以下には、Qiita独自のMarkdown記法のガイドラインを示すね!
これを参考にして、Qiita向けの記事を生成してください!
# AIエージェント向け:Qiita 独自の Markdown 記法ガイド
Qiita は GitHub Flavored Markdown (GFM) をベースにしていますが、以下の独自拡張機能を備えています。これらを利用することで、より見やすく構造化された記事を生成できます。
## 1. コードブロックの拡張(ファイル名指定と Diff)
### ファイル名の表示
言語名の後に `:` に続けてファイル名を記述すると、コードブロックの上部にファイル名が表示されます。
* **書き方:**
```markdown
```ruby:hello.rb
puts 'Hello Qiita'
```
```
### Diff とシンタックスハイライトの併用
`diff_` を言語名の前に付けることで、シンタックスハイライトを維持したまま変更箇所(`+` や `-`)を表示できます。
* **書き方:**
```markdown
```diff_ruby:hello.rb
puts 'Hello'
+ puts 'Qiita'
```
```
## 2. 補足説明(ノート記法)
情報を強調したり、警告を表示したりするための専用の囲み枠です。
* **インフォメーション:** `:::note info` 〜 `:::`
* **注意(警告):** `:::note warn` 〜 `:::`
* **強い警告:** `:::note alert` 〜 `:::`
* **書き方:**
```markdown
:::note info
ここに補足情報を記述します。
:::
```
## 3. 数式の記述(LaTeX形式)
MathJax/KaTeX 形式の数式が利用可能です。エスケープの衝突を避けるため、以下の書き方が推奨されています。
* **インライン:** `$ ` ` 数式 ` `$ (バッククォートで囲む)
* **ブロック:**
```markdown
```math
e^{i\\pi} + 1 = 0
```
```
## 4. ダイアグラム(図解)
文章内で直接図を描画できます。
* **Mermaid:** ` ```mermaid ` で開始。フローチャートやシーケンス図が可能。
* **PlantUML:** ` ```plantuml ` で開始。UML図全般に対応。
## 5. リンクとビジュアル要素
* **リンクカード:** URL の前後に空行を置くと、自動的にカード形式で展開されます。
* **色の表示:** コードスパン(` ` `)の中に CSS のカラー型(例: `#ff0000`)を書くと、横にその色のプレビューが表示されます。
* **脚注:** 本文中に `[^1]`、末尾などに `[^1]: 説明文` と書くことで脚注を挿入できます。
## 6. コンテンツの折りたたみ(Details)
長いソースコードや補足などは HTML の `<details>` タグで折りたたむことができます。
* **書き方:**
```html
<details><summary>クリックで展開</summary>
ここに中身(Markdownも可、ただし上に空行が必要)
</details>
```
## 7. その他の重要な仕様
* **目次 (TOC):** 見出し(`#`)を元に、記事の右側に自動で目次が生成されます。
* **絵文字:** `:emoji_name:` の形式で絵文字を挿入できます。
* **画像のサイズ調整:** `` ではなく、HTMLの `img` タグ(`<img width=\"300\" src=\"...\">`)を使うことでサイズ指定が可能です。
* 強調表示(`**aaa**`)のアスタリスクの前後には**半角スペースを必ず入れてください**!強調になりません!
---
**参照元:** [Markdown記法 チートシート - Qiita](https://qiita.com/Qiita/items/c686397e4a0f4f11683d)

