ARTICLE

閉域ネットワーク環境へのAIアプリデプロイ完全ガイド|Bastion経由VM操作・ACRイメージ管理・3フェーズダウンタイム最小化・5つの落とし穴と対策【2026年版】

2026/9/16 (更新: 2026/9/23)

SHARE

「閉域ネットワーク環境へのAIアプリデプロイ」について、基本的な仕組みから導入手順、実務での活用方法と注意点まで分かりやすく解説します。

閉域

閉域ネットワーク環境へのAIアプリデプロイ完全ガイド|Bastion経由VM操作・ACRイメージ管理・3フェーズダウンタイム最小化・5つの落とし穴と対策【2026年版】

ARTICLE株式会社renue
renue

株式会社renue

2026/9/16 公開2026/9/23 更新

renueについて

renueは、AIで業務を実装する会社です

AIコンサルティングから図面AI・広告運用エージェント・コールセンターAIまで、実際に動いているサービスをご覧いただけます。renueが何をしている会社か、まずはサービス一覧からご確認ください。

閉域ネットワーク環境へのAIアプリデプロイは「通常のデプロイとは別物」

金融機関、官公庁、製造業の基幹システム——これらの環境では、外部接続を制限した閉域ネットワークでのデプロイが求められる場合があります。外部のCI/CDから対象へ到達できない構成では、そのままデプロイできず、Docker Hubからの直接pullや外部API利用も許可された通信経路に左右されます。一方、対象のプライベートエンドポイントへ到達できるセルフホスト型エージェントなどを使えば、CI/CDを構成できます。

本記事では、Azure VM+Bastion+ACR構成での閉域環境デプロイを、一般的な構成例として解説します。例ではx64のLinux VM、Premium SKUのACRのプライベートエンドポイントとDNS設定、Standard以上でネイティブクライアント接続を有効にしたBastionを使用します。開発端末からのACRへのpushにも、VPNなどの到達経路と認証が必要です。Run Commandを使う場合は、VM Agentに必要なAzureへの送信通信も許可する前提です。

閉域環境デプロイのアーキテクチャ

開発者のローカルPC
  │
  │ docker build → docker push
  ↓
Azure Container Registry(ACR)
  │
  │ docker pull(VM→ACRのプライベートエンドポイント経由)
  ↓
Azure VM(閉域ネットワーク内)
  ├ フロントエンド(Webアプリ)
  ├ バックエンド(APIサーバー)
  ├ mysql(port 3306)
  ├ redis(port 6379)
  └ build-runner(ビルド用)
  │
  │ az network bastion tunnelでSSH接続 → SSHのローカルポート転送
  ↓
開発者のブラウザ(SSHで転送したlocalhostのポートへ接続)

デプロイの3フェーズ設計

フェーズ1:イメージ反映(ダウンタイムなし)

新しいイメージをビルドしてACR経由でVMに届けます。この間、旧コンテナは稼働中のままです。

ステップ実行場所操作
1ローカルイメージビルド(このx64 VM向けに--platform linux/amd64を指定)
2ローカルACR認証+push(latest + git SHAタグ。配備するdigestも記録)
3VMVM上の不要イメージ削除(ディスク空き容量10GB以上確保。復帰用イメージは保持)
4VM新イメージをpull(旧コンテナ稼働中のまま)

フェーズ2:コンテナ切替(ダウンタイム開始)

ステップ操作影響
5前半旧appコンテナを停止・削除FEダウンタイム開始
5後半新コンテナを起動検証可能な状態へ。利用者への公開はDB変更・疎通確認後

事前pullでイメージ取得を停止時間の外へ移せます。停止時間は、旧コンテナ停止から必要なDB変更・疎通確認を終えて公開を再開するまでを計測します。Composeは通常、コンテナの実行開始だけでは処理準備完了まで待たないため、起動ログだけで終了と判定しません。

フェーズ3:検証(公開再開前の確認と再開後の監視)

ステップ操作確認事項
6起動確認docker compose psの状態とReady in XXXms等のログを確認し、ヘルスチェックで処理準備完了を確かめる
7API疎通テストFE(200) / BE(healthy) / FE→BE(200)の3系統と必要なDB処理を確認。結果が正常なら公開再開し、その後も監視
8ブラウザ確認Bastion経由のSSH接続とローカルポート転送で画面表示

閉域環境特有の落とし穴と対策

落とし穴1:DNS解決の失敗

VMからAzure OpenAIエンドポイントへのDNS解決が失敗する場合があります。

原因:プライベートリンクが設定されているが、VMの名前解決でプライベートDNSゾーンを参照できていない(VNetリンク漏れやDNS転送設定など)

暫定対策:VMの/etc/hostsにIPを追記してテスト実施(テスト後に削除)

恒久対策:名前解決の構成に応じてプライベートDNSゾーンのVNetリンクやDNS転送設定を修正

落とし穴2:ディスク容量不足

VM上で過去にpullしたイメージやビルドキャッシュがディスク容量を圧迫すると、新イメージのpullが失敗します。Dockerの未使用オブジェクトは自動では削除されないため、VM側で確認します。ACR側のレジストリ容量とは別の問題です。

対策:pull前に不要イメージを削除し、空き容量10GB以上を確認してから実行

落とし穴3:Apple Silicon環境のビルド

Apple SiliconのMacでビルドする際は、対象VMとイメージのCPUアーキテクチャを合わせます。このx64 VMの例では--platform linux/amd64を指定します。AzureにはArm64のVMもあり、そちらには対応するArm64イメージが必要です。マルチプラットフォームのイメージも選択肢です。対応しない単一アーキテクチャのイメージを使うと、pullは成功しても起動できないという発見しにくい障害につながります。

落とし穴4:az vm run-commandの同時実行制限

az vm run-command invokeはAction Run Commandで、1台のVMでは同時に1つしか実行できないという制限があります。各ステップは完了と終了結果を確認してから順番に実行します。自動でキューに入る前提にはしません。Managed Run Commandは並列・順次実行を扱える別方式なので、混同しないようにします。

落とし穴5:環境変数ファイルの管理

環境変数ファイルはVM上で直接管理される構成が一般的です。イメージの差し替えでは変更されませんが、誤って削除すると接続設定が失われる場合があります。

Bastionトンネルの運用

基本操作

# ターミナル1:VMのSSHポートへ接続(Standard以上・Native Client Support有効)
az network bastion tunnel \
  --name bastion-name \
  --resource-group rg-name \
  --target-resource-id /subscriptions/.../vm-name \
  --resource-port 22 \
  --port 2222

# ターミナル2:VMへSSH認証し、FE/BEをローカルへ転送
# vm-userは実際のVMユーザー名。VMでSSH転送が許可されていること
ssh -N -o ExitOnForwardFailure=yes -p 2222 \
  -L 127.0.0.1:3000:127.0.0.1:3000 \
  -L 127.0.0.1:8000:127.0.0.1:8000 \
  vm-user@127.0.0.1

Bastionトンネルの注意事項

  • トンネルを開いたターミナルは閉じないこと。閉じると接続が切れる
  • FE(3000)とBE(8000)は、上の例ではBastion接続用とSSH転送用の2つのターミナルで確認する。VM側の認証・転送許可と、VMから両ポートへ到達できることが必要
  • Tunnel is ready, connect on port XXXXはBastion側の接続準備完了。さらにSSH認証とポート転送を確立し、上の例ではhttp://localhost:3000でFEを確認する(BEは8000)。Bastion単体はWebサーバーを中継しないため、SSHのローカル転送を使用する

コンテナイメージのタグ戦略

閉域環境では「どのコミットが今動いているか」の追跡性が特に重要です。

GIT_SHA=$(git rev-parse --short HEAD)
docker build --platform linux/amd64 \
  -t registry/app:latest \
  -t registry/app:${GIT_SHA} .

latestに加えてgit SHAタグを付与し、対応するイメージのdigestを記録します。タグ自体は付け替えられるため、復帰用イメージをACRに保持し、戻す内容をdigestで特定します。同じソースからの再ビルドでも、ベースイメージや依存物が変われば同じ成果物にはなりません。

マイグレーション実行のタイミング

本記事の手順では、DBマイグレーションをコンテナ起動とは分離して実行・結果確認します。手動か自動かは運用設計で決めます。状態を持つDBの変更と復帰方法を事前に検証し、新旧アプリと新旧スキーマの組み合わせごとに互換性を確認します。

  1. マイグレーション前に必ずDBバックアップを取得(mysqldump)
  2. DBの接続準備完了とスキーマ互換性を確認してマイグレーション実行。新アプリを先に起動する順序は、旧スキーマでも動作できる場合に限る。非互換な変更では利用者とバックグラウンド処理の書き込みを止め、移行を完了させてから新アプリを起動する
  3. マイグレーション結果を確認し、アプリのヘルスチェックと必要なDB操作の疎通確認後にサービス公開

ロールバック手順

問題発生時のロールバック手順を事前に文書化しておきます。

  1. 復帰先の既存イメージのdigestと取得可否、DB互換性を確認し、利用者とバックグラウンド処理の書き込みを止めて対象コンテナを停止
  2. DBは互換性に応じて復元の要否を判断。復元前に現状を保全し、バックアップ以降の更新を必要な時点まで回復する手順と許容されるデータ欠損範囲を確認する。バックアップを戻すだけでは、その後の書き込みは失われる
  3. 記録したdigestの既存イメージを選択。既存成果物が取得できない場合は、依存物を固定した再ビルドを代替案として検証し、同じcommit SHAだから同一内容とは扱わない
  4. 必要な場合はACRからdigest指定でpullし、コンテナを再作成。DBとの互換性・疎通を確認して公開と書き込みを再開

まとめ:閉域環境デプロイチェックリスト

フェーズチェック項目
ビルド--platform linux/amd64など、対象VMのCPUに合うイメージか
ビルドlatest + git SHAの二重タグを付与し、配備するdigestを記録したか
pushACR認証が有効か(docker login)
VM準備VM上の不要イメージ削除→空き容量10GB以上確認(復帰用イメージは保持)
pull旧コンテナ稼働中にpull実行(ダウンタイム最小化)
切替旧コンテナ停止→新コンテナ起動→検証。復帰用イメージを確保したうえで不要物だけ削除(prune -aは未使用のタグ付きイメージも対象)
DBバックアップ取得→マイグレーション→結果確認
検証FE/BE/FE→BEの3系統疎通テスト
検証Bastion経由のSSH接続・ローカル転送によるブラウザ確認
管理環境変数ファイルが保全されているか
管理ロールバック手順が文書化されているか

閉域環境では、CI/CDも含めて許可された通信経路と認証方法を確認し、デプロイ手順を設計する必要があります。3フェーズ設計、5つの落とし穴への対策、ロールバック手順の事前準備——この3つを押さえることで、閉域環境でも安全・確実なデプロイが可能になります。

あわせて読みたい

AI活用のご相談はrenueへ

renueは自社開発のAIツールを自社運用する「自社実証型」AIコンサルティングファームです。

→ AIコンサルティングの詳細を見る

関連記事

開発プロセスの改善はrenueにご相談ください。

SHARE

FAQ

よくある質問

外部との接続を制限した環境にAIアプリケーションをデプロイするプロセスです。必要な手順は隔離方式と許可された通信経路で変わります。本記事はAzureのx64 Linux VM、Bastion、ACRのプライベートエンドポイントを使う構成例です。対象へ到達できるセルフホスト型エージェント等でCI/CDを組むこともでき、Bastionやオフライン転送が必須とは限りません。参考:https://learn.microsoft.com/en-us/azure/container-registry/container-registry-private-endpoints

許可されない外部へのイメージpullやpip/npmの取得をどう代替するか、レジストリ・ミラーへの到達性、認証、DNS、監視・ログの経路を整えることが主な課題です。証明書も閉域だから必ず手動更新になるわけではなく、発行元との連携、更新済み証明書の配布、アプリへの反映を設計します。例えばAzure Key Vaultは対応CAとの自動更新を扱い、Linux VM拡張は証明書の変更を検知して取得・インストールします。いずれも対応条件、権限、必要な通信経路を確認します。出典:https://learn.microsoft.com/en-us/azure/key-vault/certificates/overview-renew-certificate / https://learn.microsoft.com/en-us/azure/virtual-machines/extensions/key-vault-linux

本文では、フェーズ1(イメージ反映:ビルド・ACRへのpush・旧コンテナを動かしたままVMへ事前pull)、フェーズ2(コンテナ切替:旧コンテナ停止と新コンテナ起動)、フェーズ3(検証:DB変更の結果・起動状態・API疎通・SSH転送経由の画面を確認し、公開再開後も監視)の3段階に分けています。コンテナの起動だけでダウンタイム終了とはせず、利用者へ公開を再開した時点まで計測します。参考:https://docs.docker.com/compose/how-tos/startup-order/ / https://learn.microsoft.com/en-us/azure/well-architected/operational-excellence/safe-deployments

本文で扱う5つは、①DNS解決の失敗(VNetリンクやDNS転送など)、②VMのディスク容量不足(不要イメージ等の蓄積)、③Apple Siliconでのビルドと対象VMのCPUアーキテクチャ不一致、④Action Run Commandの同時実行制限(1台のVMで同時に1つ)、⑤VM上の環境変数ファイルの管理、です。一般的な構成例の注意点であり、全ての閉域環境に同じ設定が必要なわけではありません。参考:https://learn.microsoft.com/en-us/azure/virtual-machines/linux/run-command / https://docs.docker.com/build/building/multi-platform/

主に、プライベートレジストリ/パッケージミラーの整備、依存関係の固定(requirements.lock等)、イメージ転送の自動化スクリプト、デプロイ手順のRunbook化、Bastion/Jump Host経由の操作ログ保存、監視・ログ基盤の閉域内構築、シークレット管理、SSL/CA証明書のライフサイクル管理、AIモデルのバージョン管理と再学習フロー、災害対策、です。閉域環境では利用できるクラウド機能と通信経路を確認したうえで、運用ルールと自動化の徹底度がそのまま信頼性に直結するため、設計と教育の両面で運用品質を担保する仕組みが、長期運用の鍵となります。

renueについて

renueは、AIで業務を実装する会社です

AIコンサルティングから図面AI・広告運用エージェント・コールセンターAIまで、実際に動いているサービスをご覧いただけます。renueが何をしている会社か、まずはサービス一覧からご確認ください。

関連記事

AI導入・DXの悩みをプロに相談してみませんか?

AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。

無料資料をダウンロード