【Azure Arc Jumpstart】Jumpstart Agora / Contoso Supermarketの展開手順と注意点

この記事の内容

  • Azure Arc JumpstartのJumpstart Agoraシリーズにおける「Contoso Supermarket」シナリオの概要を解説します
  • IoT・AI・Azure Arcを活用したスマートスーパーマーケットのアーキテクチャを紹介します
  • BicepテンプレートとAzure CLIを使った環境デプロイの具体的な手順を説明します
  • 実際の展開時に遭遇したエラーとその対処方法を共有します
  • 展開に失敗した場合の再試行手順についても触れます

Jumpstart Agoraとは

Jumpstart Agoraは、Azure Arc Jumpstartシリーズが提供するIoTショーケースです。バージョン1となるContoso Supermarketシナリオでは、インダストリー・リテール分野における先進的な店舗運営を実際の環境に展開して体験できます。

Contoso Supermarketは、クラウドコンピューティングとエッジコンピューティングを組み合わせたハイブリッドクラウド戦略を採用した架空の小売業者です。IoTデバイス・センサー・AIを活用してパーソナライズされた顧客体験を実現し、在庫の最適化やマーケティングキャンペーンのパーソナライズも行っています。


シナリオの構成要素

Contoso Supermarketのシナリオは、以下の4つの主要コンポーネントで構成されています。

  • ポイント・オブ・セールス(POS): 販売取引・顧客とのやり取りを合理化するユーザーフレンドリーなシステム
  • マネージャーダッシュボード: 店舗運営をリアルタイムで監視し、最適なパフォーマンスと顧客満足度を実現
  • チェックアウト行列モニタリング: レジ待ち行列をリアルタイムで監視・管理し、待ち時間を最小化
  • フリーザーモニタリング(Food Safety): 冷蔵庫内の状態をモニタリングして食品安全を確保

アーキテクチャの概要

本シナリオのアーキテクチャはクラウド側とエッジ側の両方にAKS(Azure Kubernetes Service)クラスターを持つ構成が特徴です。

エッジ側:

  • Windows 11 IoT上で動作するAKS Essential

クラウド側(Azure):

  • AKS(Azure Kubernetes Service)
  • Cosmos DB
  • IoT Hub
  • Azure Automation
  • Azure Data Explorer
  • Azure Monitor
  • Azure Container Registry
  • Microsoft Defender for Cloud

オブザビリティ:

  • Prometheus + Grafanaによるオープンソースの監視スタックを採用

アプリケーション開発:

  • Inner/Outerループプロセス
  • Dev Container
  • VS Code・Git・GitOps
  • コスト管理ダッシュボード

デプロイの事前準備

1. リポジトリのフォーク

まず、Contoso SupermarketのアプリケーションリポジトリをGitHubでフォークします。フォーク時はすべてのブランチを含める(「Copy the main branch only」のチェックを外す)ことが重要です。メインブランチのみをフォークすると、後続のスクリプトが必要なブランチを見つけられずにエラーとなります。

2. GitHub Personal Access Token(PAT)の作成

GitHubの設定から、以下の手順でPATを作成します。

  1. GitHubの右上のアイコン → Settings
  2. 左メニューの Developer settings
  3. Personal access tokensFine-grained tokens
  4. Generate new token をクリック

トークンの設定例:

  • Token name: agora-token(任意)
  • Expiration: 30日
  • Repository access: Only selected repositories → フォークしたAgoraリポジトリを選択
  • Permissions(Repository):
    • Actions: Read & Write
    • Administration: Read & Write
    • Contents: Read & Write
    • Pull requests: Read & Write
    • Secrets: Read & Write
    • Workflows: Read & Write

生成されたトークンは後で使用するため、安全な場所に控えておきます。

3. Azure CLIのバージョン確認とログイン

# バージョン確認
az version

# Azureにログイン(テナントIDを指定)
az login --tenant <テナントID>

# サブスクリプションの確認
az account show

複数テナントを管理している場合は、--tenant オプションでテナントIDを明示的に指定しないと、意図しないサブスクリプションに接続される場合があります。

4. リージョンとクォータの確認

本シナリオはDSシリーズのvCPUが40コア必要です。デプロイ先リージョン(例: East US)でのクォータを事前に確認しておきます。

az vm list-usage --location eastus --query "[?name.value=='standardDSv2Family']"

5. サービスプリンシパルの作成

PowerShellの場合:

Connect-AzAccount -Tenant <テナントID>
New-AzADServicePrincipal -DisplayName "jumpstart-agora-spn" -Role "Contributor" -Scope "/subscriptions/<サブスクリプションID>"

作成後に表示されるクライアントIDとシークレットは後の手順で使用します。動画では公開後にシークレットをローテーションしており、動画内に表示されている値は無効化済みです。

6. SSHキーペアの作成

ssh-keygen -t rsa -b 4096
cat ~/.ssh/id_rsa.pub

生成した公開鍵はパラメータファイルに記載します。


デプロイ手順

1. Azure Arc Jumpstartリポジトリのクローン

git clone https://github.com/microsoft/azure_arc.git
cd azure_arc

クローンにはやや時間がかかります。

2. パラメータファイルの編集

jumpstart/agora/ 配下のBicepテンプレートに対応するパラメータファイル(main.parameters.json)を編集します。

設定が必要な主な項目:

パラメータ内容
spnClientIdサービスプリンシパルのクライアントID
spnClientSecretサービスプリンシパルのシークレット
spnTenantIdAzureテナントID
windowsAdminUsernameクライアントVMの管理者ユーザー名
windowsAdminPasswordクライアントVMの管理者パスワード
sshRSAPublicKey先ほど作成したSSH公開鍵
deployBastionBastionを使う場合は true、不要なら false
githubPat作成したGitHub PAT
githubUserフォーク先のGitHubユーザー名

3. リソースグループの作成とデプロイ

# リソースグループの作成
az group create --name agora --location eastus

# Bicepテンプレートのデプロイ
cd jumpstart/agora/
az deployment group create \
  --resource-group agora \
  --template-file main.bicep \
  --parameters main.parameters.json

Azure Developer CLIを使う場合は azd up コマンドでも展開できます。


デプロイメントオートメーションの実行

Bicepデプロイが完了すると、クライアントVM(Agora-Client-VM)が作成されます。このVMにRDPでログインすると、タスクスケジューラーに登録されたログオンスクリプトが自動実行され、AKSクラスターのプロビジョニングやアプリケーションのCI/CDが開始されます。

RDP接続の設定

クライアントVMへのRDPを許可するためにNSGの受信規則を追加します。

  1. Azureポータルでクライアントに関連するNSGを開く
  2. 受信セキュリティ規則の追加
    • ソース: My IP address
    • 宛先ポート: RDP(3389)
    • プロトコル: TCP
    • アクション: 許可

設定後、AzureポータルからRDPファイルをダウンロードして接続します。ログイン後、PowerShellウィンドウが自動で起動し17ステップのオートメーションが始まります。完了まで相当な時間がかかります。

展開が成功すると、デスクトップの背景が変わり、各種ツールのアイコンが並んだ状態になります。


展開時に遭遇したエラーと対処

実際の展開では複数のエラーが発生しました。3回目の試行で成功しており、同様の問題が発生した場合の参考としてください。

エラー1: Copy-VMFileの失敗

症状: ログオンスクリプト実行中に以下のようなエラーが発生する

CCooppyy-VtMaFrigleet:faCi:l\eWdi:ndTohwes\dSeyvsitceem3i2s\WniontdorwesaPdoywefroSrheulsle\v1.0\profile.ps1

原因: VMのゲストOSがまだ準備完了状態になる前にファイルコピーが実行されるタイミングの問題です。

対処: GitHubにIssueを登録したところ、エラーハンドリングとリトライロジックが追加され解決済みとなりました。最新のリポジトリを取得して再試行することで回避できます。

エラー2: kubeconfig関連の失敗

症状: AKSへの接続に使用するkubeconfigが正常に取得できず、スクリプトが途中で終了する。

対処: 現時点では根本原因が特定されておらずIssueはオープンのままです。リポジトリを最新化して再試行することで発生しない場合があります。

エラー3: TestNetConnectionが終わらない

症状: スクリプト内のネットワーク接続確認処理が返ってこず、20時間以上停止したままになる。

対処: こちらもIssueを登録済みです。リソースグループごと削除して再作成・再デプロイすることで回避できます。

再試行の手順

エラーが発生して復旧が難しい場合は、以下の手順で最初からやり直します。

# 既存のリソースグループを削除
az group delete --name agora --yes

# 最新のリポジトリを取得
git pull

# 新しいリソースグループ名で再デプロイ
az group create --name agora2 --location eastus
az deployment group create \
  --resource-group agora2 \
  --template-file main.bicep \
  --parameters main.parameters.json

リソースグループ名を変えながら複数回試行することで、最終的に成功する可能性があります。


まとめ

今回はAzure Arc JumpstartのContoso Supermarketシナリオのデプロイ手順を紹介しました。

IoT・AI・Azure Arcを活用したハイブリッドクラウド構成のショーケースとして非常に興味深い内容ですが、実際の展開時にはいくつかのバグに遭遇することがありました。主なポイントをまとめます。

  • GitHubリポジトリのフォーク時は全ブランチを含めること(メインブランチのみだとスクリプトが失敗します)
  • テナントが複数ある環境では、Azure CLIログイン時に --tenant オプションでテナントIDを明示的に指定する
  • デプロイ中にエラーが発生しても、最新のリポジトリを取得してリソースグループを作り直すことで解消する場合があります
  • 発見したバグはGitHubにIssueとして登録しており、コミュニティとともに改善が進んでいます

展開の成功率を上げるためにはいくつかの試行が必要な場合もありますが、成功すれば本格的なIoTシナリオを手軽に体験できる貴重な環境が手に入ります。次回はContoso Supermarketの各シナリオ(POS・行列モニタリング・フリーザーモニタリング)の実際の動作について紹介する予定です。