デプロイを実行するようにコンテナー イメージを構成する
この記事では、カスタム Bicep コンテナー イメージをビルドして、Azure Deployment Environments (ADE) に環境定義をデプロイする方法を説明します。
この記事では、自分の環境定義を Azure Deployment Environments (ADE) 内にデプロイするためのカスタム Terraform コンテナー イメージを構築する方法を説明します。 Terraform のコードとしてのインフラストラクチャ (IaC) フレームワークを使ってインフラストラクチャをプロビジョニングするようにカスタム イメージを構成する方法について説明します。
この記事では、Azure Deployment Environments (ADE) でのデプロイに Pulumi を利用する方法について説明します。 Pulumi によって提供されるサンプル イメージを使用する方法、または Pulumi のコードとしてのインフラストラクチャ (IaC) フレームワークを使用してインフラストラクチャをプロビジョニングするようにカスタム イメージを構成する方法を説明します。
ADE は、拡張性モデルを使って、ユーザーが環境定義で使用できるカスタム イメージを作成できるように支援します。 機能拡張モデルを使用するには、独自のカスタム イメージを作成し、Azure Container Registry (ACR) や Docker Hub などのコンテナー レジストリに格納します。 その後、環境定義でこれらのイメージを参照して、環境をデプロイできます。
環境定義は、少なくとも 2 つのファイル、つまり、テンプレート ファイル (azuredeploy.json、main.bicep など) と、environment.yaml という名前のマニフェスト ファイルで構成されます。 ADE では、コンテナーを使用して環境定義をデプロイします。
コア イメージなどの作業を開始するために選択されたイメージと Azure Resource Manager (ARM)-Bicep イメージは、ADE チームによって提供されます。 これらのサンプル イメージには、Runner-Images フォルダーでアクセスできます。
環境定義は、少なくとも 2 つのファイル、つまり、テンプレート ファイル (main.tf など) と、environment.yaml という名前のマニフェスト ファイルで構成されます。 Terraform を使用する環境定義のデプロイは、コンテナーによって行います。
環境定義は、少なくとも 2 つのファイル (Pulumi.yamlという名前の Pulumi プロジェクト ファイルと environment.yaml という名前のマニフェスト ファイル) で構成されます。 また、任意のプログラミング言語 (C#、TypeScript、Python など) で記述されたユーザー プログラムが含まれる場合もあります。ADE では、コンテナーを使用して環境定義をデプロイします。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- Azure サブスクリプション内にセットアップされた Azure Deployment Environments。
- ADE を設定するには、「クイックスタート: Azure Deployment Environments を構成する」に従います。
ADE でコンテナー イメージを使用する
ADE でコンテナー イメージを使用するには、次のいずれかの方法を使用できます。
- サンプル コンテナー イメージを使用する 単純なシナリオの場合、ADE によって提供されるサンプルの ARM-Bicep コンテナー イメージを使用します。
- カスタム コンテナー イメージを作成する より複雑なシナリオの場合、特定の要件を満たすカスタム コンテナー イメージを作成します。
コンテナー イメージを使用する場合に従う主な手順は、次のとおりです。
- 使用するイメージの種類 (サンプル イメージまたはカスタム イメージ) を選びます。
- カスタム イメージを使用する場合は、サンプル イメージから開始し、要件に合わせてカスタマイズします。
- イメージをビルドします。
- イメージをプライベート レジストリまたはパブリック レジストリにアップロードします。
- レジストリへのアクセスを構成します。
- パブリック レジストリの場合は、匿名プルを構成します。
- プライベート レジストリの場合は、DevCenter ACR アクセス許可を付与します。
- イメージの場所を環境定義の
runner
パラメーターに追加します。 - カスタム イメージを使用する環境をデプロイします。
このプロセスの最初の手順は、使用するイメージの種類を選択することです。 対応するタブを選択してプロセスを表示します。
サンプル コンテナー イメージを使用する
ADE では、追加の構成を必要とせずに ARM と Bicep がサポートされます。 テンプレート ファイル (azuredeploy.json、environment.yaml など) をカタログに追加すると、デプロイ環境用の Azure リソースをデプロイする環境定義を作成できます。 その後、ADE ではサンプルの ARM-Bicep コンテナー イメージを使用してデプロイ環境を作成します。
environment.yaml ファイルの runner
プロパティでは、使用するコンテナー イメージの場所を指定します。 Microsoft アーティファクト レジストリで公開されているサンプル イメージを使用するには、それぞれの識別子 (runner
) を使用します。
次の例は、サンプルの ARM-Bicep コンテナー イメージを参照する runner
を示しています。
name: WebApp
version: 1.0.0
summary: Azure Web App Environment
description: Deploys a web app in Azure without a datastore
runner: Bicep
templatePath: azuredeploy.json
サンプルの Bicep コンテナー イメージは、ARM-Bicep イメージの Runner-Images フォルダーの下にある ADE サンプル リポジトリで確認できます。
ADE コンテナー イメージを使用して Azure リソースをデプロイする環境定義を作成する方法の詳細については、「環境定義を構成して追加する」を参照してください。
カスタム イメージを使用して Terraform イメージを構成します。
Pulumi によって提供されるサンプル コンテナー イメージを使用する
Pulumi チームは、作業を開始するための事前構築済みイメージを提供しています。これは、Runner-Image フォルダー内にあります。 このイメージは、Pulumi Docker Hub で pulumi/azure-deployment-environments
として一般提供されているため、ADE 環境定義から直接使用できます。
事前構築済みイメージを利用するサンプルの environment.yaml ファイルを次に示します。
name: SampleDefinition
version: 1.0.0
summary: First Pulumi-Enabled Environment
description: Deploys a Storage Account with Pulumi
runner: pulumi/azure-deployment-environments:0.1.0
templatePath: Pulumi.yaml
Environments フォルダーには、いくつかのサンプル環境定義があります。
イメージをビルドする
イメージをビルドするには、Docker CLI を使用することができます。 お使いのコンピューターに Docker エンジンがインストールされていることを確認します。 その後、Dockerfile のディレクトリに移動して、次のコマンドを実行します。
docker build . -t {YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}
たとえば、customImage
という名前のレジストリ内のリポジトリにイメージを保存し、1.0.0
のタグ バージョンを使ってアップロードする場合は、次のように実行します。
docker build . -t {YOUR_REGISTRY}.azurecr.io/customImage:1.0.0
カスタム イメージを ADE で利用できるようにする
カスタム イメージを使用するには、それらをコンテナー レジストリに格納する必要があります。 パブリック コンテナー レジストリまたはプライベート コンテナー レジストリを使用できます。 Azure Container Registry (ACR) は ADE と緊密に統合されており、パブリック匿名プル アクセスを許可することなくイメージを公開できるため、ACR を強くお勧めします。 カスタム コンテナー イメージをビルドし、それをコンテナー レジストリにプッシュして、ADE で使用できるようにする必要があります。
イメージを別のコンテナー レジストリ (たとえば Docker Hub) に格納することもできますが、その場合はパブリック アクセスできることが必要になります。
注意事項
匿名 (認証されていない) プル アクセスが可能なレジストリにコンテナー イメージを格納すると、パブリック アクセス可能になります。 イメージに機密情報が含まれている場合は、このようにしないでください。 代わりに、匿名プル アクセスを無効化した Azure Container Registry (ACR) に格納します。
ACR に格納されているカスタム イメージを使用するには、そのイメージにアクセスするための適切なアクセス許可が ADE に付与されていることを確認する必要があります。 ACR インスタンスを作成すると、既定でセキュリティで保護され、認証されたユーザーのみがアクセスできます。
Pulumi を使用して、Azure Container Registry を作成し、それにイメージを発行できます。 必要なすべてのリソースを Azure アカウントに作成する自己完結型の Pulumi プロジェクトについては、Provisioning/custom-image の例を参照してください。
適切なタブを選択し、各アプローチの詳細を確認します。
セキュリティで保護されたアクセスでプライベート レジストリを使用する
既定では、Azure Container Registry からコンテンツをプルまたはプッシュするためのアクセスは、認証済みユーザーのみが使用できます。 特定のネットワークからのアクセスを制限し、特定のロールを割り当てることで、ACR へのアクセスのセキュリティをさらに強化できます。
Azure CLI、Azure portal、PowerShell コマンドなどを使って ACR のインスタンスを作成するには、いずれかのクイックスタートのようにします。
ネットワーク アクセスを制限する
ACR へのネットワーク アクセスをセキュリティで保護するために、自身のネットワークへのアクセスを制限することで、パブリック ネットワーク アクセスを完全に無効化できます。 ネットワーク アクセスを制限する場合は、ファイアウォールの例外 "信頼された Microsoft サービスによるこのコンテナー レジストリへのアクセスを許可" を有効化する必要があります。
パブリック ネットワークからのアクセスを無効にするには:
ACR インスタンスを作成するか、既存のインスタンスを使用します。
Azure portal で、構成する ACR に移動します。
左側のメニューの [設定] で、[ネットワーク] を選択します。
[ネットワーク] ページの [パブリック アクセス] タブの [パブリック ネットワーク アクセス] で、[無効] を選択します。
[ファイアウォールの例外] で、[信頼された Microsoft サービスによるこのコンテナー レジストリへのアクセスを許可] が選択されていることを確認してから [保存] を選択します。
AcrPull ロールを割り当てる
コンテナー イメージを使用して環境を作成するには、ADE インフラストラクチャを使用しますが、これにはプロジェクトと環境の種類も含まれます。 各プロジェクトには 1 つ以上のプロジェクト環境の種類があり、デプロイされる環境を定義するコンテナー イメージへの読み取りアクセスがこれらのプロジェクト環境の種類に付与されている必要があります。 ACR 内のイメージに安全にアクセスできるように、AcrPull ロールをプロジェクト環境の種類のそれぞれに割り当てます。
プロジェクト環境の種類に AcrPull ロールを割り当てるには:
Azure portal で、構成する ACR に移動します。
左側のメニューで、[アクセス制御 (IAM)] を選択します。
[追加]>[ロール割り当ての追加] の順に選択します。
次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
設定 値 Role [AcrPull] を選択します。 アクセスの割り当て先 ユーザー、グループ、またはサービス プリンシパル を選択します。 メンバー コンテナー内のイメージにアクセスする必要があるプロジェクト環境の種類の名前を入力します。 プロジェクト環境の種類は、次の例のように表示されます。
この構成では、ADE はプロジェクト環境の種類のマネージド ID を使用します。これはシステム割り当てのことも、ユーザー割り当てのこともあります。
ヒント
このロールの割り当ては、すべてのプロジェクト環境の種類について行う必要があります。 これは、Azure CLI を使用して自動化できます。
イメージをレジストリにプッシュする準備ができたら、次のコマンドを実行します。
docker push {YOUR_REGISTRY}.azurecr.io/{YOUR_IMAGE_LOCATION}:{YOUR_TAG}
スクリプトを使用してコンテナー イメージをビルドする
カスタム イメージを自分でビルドしてコンテナー レジストリにプッシュするのではなく、スクリプトを使用してビルドし、指定されたコンテナー レジストリにプッシュすることができます。
Microsoft では、カスタム イメージをビルドしてレジストリにプッシュするのに役立つクイックスタート スクリプトを提供しています。 このスクリプトは、イメージをビルドし、リポジトリ ade
とタグ latest
を使用して指定された Azure Container Registry (ACR) にプッシュします。
スクリプトを使うには、次のことが必要です。
- ADE 拡張性モデルをサポートするように Dockerfile と scripts フォルダーを作成します。
- カスタム イメージのレジストリ名とディレクトリを指定します。
- Azure CLI と Docker Desktop をインストールし、PATH 変数に含めます。
- Docker Desktop を実行している。
- 指定したレジストリにプッシュするアクセス許可を持っています。
こちらのスクリプトを表示できます。
PowerShell で次のコマンドを使って、スクリプトを呼び出すことができます。
.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'
さらに、特定のリポジトリとタグ名にプッシュする場合は、次を実行できます。
.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'
環境定義にイメージを接続する
デプロイ内のカスタム イメージを使用する環境定義を作成するときは、マニフェスト ファイル (environment.yaml または manifest.yaml) で runner
プロパティを編集します。
runner: "{YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}"
ADE コンテナー イメージを使用して環境定義を作成して Azure リソースをデプロイする方法の詳細については、「環境定義の追加と構成」を参照してください。