Azure Developer CLI (azd) を使用すると、アプリを Azure App Service にデプロイできます。 このデプロイ モードでは、Linux Web App for Containers としてアプリが実行されます。 サービスが Docker ベースのビルドでhost: appserviceを使用する場合、azd deployはイメージをビルドし、Azure Container Registry (ACR) にプッシュし、既存の App Service サイトを新しいイメージにポイントします。
azd deployはイメージ参照のみを更新するため、展開する前にインフラストラクチャでサイト コンテナーの準備を行う必要があります。 この展開モードで想定される内容を把握すると、サイトを正しく設定し、デプロイの失敗を回避するのに役立ちます。
この記事では、その展開モードのしくみ、インフラストラクチャで既に構成する必要がある内容、 containerapp ホストとの違いについて説明します。
azd プロジェクト、azure.yaml、およびazdプロビジョニングとデプロイのコマンドについて理解していることを前提としています。
azd が App Service にコンテナーをデプロイする方法
サービスがコンテナー構成で host: appservice を設定すると、 azd deploy はターゲット サイトを Web App for Containers として扱い、次の処理を行います。
- Dockerfile からコンテナー イメージをビルドします。
- インフラストラクチャで定義されている ACR インスタンスにイメージをプッシュします。
- サイトがイメージを実行するように、サイトの
linuxFxVersion設定をDOCKER|<image>に更新します。
azd deploy は、既存のサイトのイメージ参照 のみを 更新します。 基になるインフラストラクチャは作成または構成されないため、デプロイする前にサイトがコンテナー対応になっている必要があります。
azure.yaml でのサービス構成
App Service へのコンテナーのデプロイでは、Docker ベースのビルドで host: appservice を使用します。
language: docker設定するか、Dockerfile を指すdocker構成を追加します。
services:
web:
project: ./src/web
host: appservice
language: docker
docker:
path: ./Dockerfile
この構成では、azd./src/web/Dockerfileからイメージをビルドし、レジストリにプッシュして、イメージを実行するように App Service サイトを更新します。
appservice ホストはサービス レベルのenv:設定を適用しないため、代わりにインフラストラクチャを使用してアプリ設定を構成します。
コンテナー対応 App Service サイトのインフラストラクチャ要件
azd deploy は appservice ホスト用のインフラストラクチャをプロビジョニングまたは変更しないため、デプロイする前に、既存の Bicep または Terraform でサイトを Linux コンテナー アプリとして構成しておく必要があります。 インフラストラクチャは、次のコントラクトを満たす必要があります。
| 要件 | 詳細情報 |
|---|---|
| Linux App Service プラン | このプランでは、Linux (reserved: trueでkind: linux) が実行されます。 App Service では、Windowsではなく Linux 上のコンテナーのみがサポートされます。 |
| コンテナー対応サイト | サイトの linuxFxVersion では、 DOCKER\| 値が使用されます。 プレースホルダーイメージで問題ありません。これは、azd deploy がそれをビルドしてプッシュするイメージで置き換えるためです。 |
| 単一コンテナー | サイトは 1 つのコンテナーを実行します。
appservice ホストは、マルチコンテナーまたは Docker Compose 構成をサポートしていません。 |
| マネージド ID による ACR へのアクセス | サイトは、acrUserManagedIdentityID と acrUseManagedIdentityCreds: true などのユーザー割り当てマネージド ID を介して ACR に認証します。
appservice ホストは、管理者の資格情報をサポートしていません。 |
azd deploy と provision および up の比較
App Service へのコンテナーのデプロイには、インフラストラクチャとアプリケーション コードという 2 つの懸念事項があり、これは異なる azd コマンドにマップされます。
| 命令 | それが何をするか | いつ使用するか |
|---|---|---|
azd provision |
コンテナー対応の App Service サイトや ACR など、Bicepまたは Terraform からAzureリソースを作成して構成します。 | インフラストラクチャが変更された場合、またはサイトがまだ存在しない場合に使用します。 |
azd deploy |
イメージをビルドし、それを ACR にプッシュし、サイトのイメージ参照を更新します。 インフラストラクチャには触れられません。 | これを使用して、アプリケーションの変更を既にプロビジョニング済みのサイトに配布します。 |
azd up |
azd provision を実行し、その後 azd deploy を1回のコマンドで実行します。 |
初回のデプロイ、または一緒にプロビジョニングしてデプロイする場合に使用します。 |
azd deployはイメージ参照のみを更新するため、appservice コンテナーのデプロイは常に、以前のazd provisionまたはazd upが作成されたインフラストラクチャに依存します。
展開の準備状況の検証
サイトを更新する前に、 azd deploy はターゲット サイトがコンテナー対応であることを検証します。 たとえば、サイトが Linux コンテナー アプリでない場合(たとえば、Windows プランを使用している場合、DOCKER|linuxFxVersion値が不足している場合、または ACR へのマネージド ID アクセスが不足している場合)、azd deployは停止し、不足している構成を識別するエラーを返します。 インフラストラクチャを修正し、再度デプロイする前に再プロビジョニングを行ってください。
App Service コンテナーと Container Apps の比較
appserviceホストとcontainerapp ホストの両方でコンテナー イメージがデプロイされますが、インフラストラクチャと構成は異なる方法で管理されます。
| Behavior |
appservice ホスト |
containerapp ホスト |
|---|---|---|
| インフラストラクチャの構成 |
azd deploy はイメージ参照のみを更新し、サイトが既にコンテナー対応であることを想定しています。 |
より多くのコンテナー ランタイムをプロビジョニングして構成します。 |
| 環境変数 | サービス レベルの env: 設定は適用されません。 代わりに、インフラストラクチャを使用してアプリ設定を構成します。 |
サービス レベルの env: 設定をコンテナーに適用します。 |
| 多言語サポート |
language: dockerを使用して任意の言語でアプリをコンテナー化します。これは、組み込みのazdサポートがないランタイムに役立ちます。 |
language: dockerを使用して任意の言語でアプリをコンテナー化します。これは、組み込みのazdサポートがないランタイムに役立ちます。 |