次の方法で共有


デプロイを実行するようにコンテナー イメージを構成する

Azure Deployment Environments (ADE) は、任意の IaC テンプレート フレームワークを使用して環境定義を構成できる機能拡張モデルをサポートしています。 カスタム イメージを Azure Container Registry (ACR) や Docker Hub などのコンテナー レジストリに格納し、環境定義で参照して環境をデプロイできます。

この記事では、カスタム Bicep コンテナー イメージをビルドして ADE に環境定義をデプロイする方法について説明します。 Microsoft によって提供される標準イメージを使用する方法、または Bicep のコードとしてのインフラストラクチャ (IaC) フレームワークを使用してインフラストラクチャをプロビジョニングするようにカスタム イメージを構成する方法について説明します。

この記事では、Azure Deployment Environments (ADE) を使用してデプロイ環境を作成するためのカスタム Terraform コンテナー イメージをビルドする方法について説明します。 Terraform のコードとしてのインフラストラクチャ (IaC) フレームワークを使ってインフラストラクチャをプロビジョニングするようにカスタム イメージを構成する方法について説明します。

この記事では、ADE でのデプロイに Pulumi を利用する方法について説明します。 Pulumi によって提供される標準のイメージを使用する方法、または Pulumi のコードとしてのインフラストラクチャ (IaC) フレームワークを使用してインフラストラクチャをプロビジョニングするようにカスタム イメージを構成する方法について説明します。

前提条件

ADE でコンテナー イメージを使用する

ADE でコンテナー イメージを使用するには、次のいずれかの方法を使用できます。

  • 標準コンテナー イメージを使用する 単純なシナリオでは、ADE が提供する標準 ARM-Bicep コンテナー イメージを使用します。
  • カスタム コンテナー イメージを作成する より複雑なシナリオの場合、特定の要件を満たすカスタム コンテナー イメージを作成します。

標準コンテナー イメージを使用する

ADE では、追加の構成を必要とせずに、Azure Resource Manager (ARM) と Bicep をサポートします。 テンプレート ファイル (azuredeploy.jsonenvironment.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 コンテナー イメージは、ADE 標準リポジトリの Runner-Images フォルダーにある ARM-Bicep イメージで確認できます。

ADE コンテナー イメージを使用して Azure リソースをデプロイする環境定義を作成する方法の詳細については、「環境定義を構成して追加する」を参照してください。

カスタム コンテナー イメージを作成する

スクリプトを使用してカスタム コンテナー イメージを作成する

カスタム コンテナー イメージを作成すると、要件に合わせてデプロイをカスタマイズできます。 Microsoft が提供するクイック スタート スクリプトを使用して、ADE 標準イメージに基づいてイメージを作成およびビルドし、コンテナー レジストリにプッシュできます。 このスクリプトは、Deployment Environments リポジトリにあります。 このクイック スタート スクリプトを使用するには、リポジトリをフォークし、ローカルでスクリプトを実行します。

このスクリプトは、イメージをビルドし、リポジトリ 'ade' とタグ 'latest' の下にある指定された Azure Container Registry (ACR) にプッシュします。 このスクリプトには、カスタム イメージのレジストリ名とディレクトリが必要です。また、Azure CLI と Docker Desktop がインストールされており、PATH 変数に含まれている必要があり、指定されたレジストリにプッシュするためのアクセス許可を持っている必要があります。

このクイックスタート スクリプトを使用して、このサンプル イメージをすばやくビルドして Azure Container Registry にプッシュするには、次のことを行う必要があります。

  • このリポジトリを個人用アカウントにフォークします。
  • Azure CLI と Docker Desktop アプリケーションがコンピューターにインストールされ、PATH 変数に含まれていることを確認します。
  • 選択した Azure Container Registry にイメージをプッシュするためのアクセス許可があること確認します。

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}'

環境のデプロイでイメージを使用するには、イメージの場所をマニフェスト ファイルに追加する必要があります (「イメージを環境定義に接続する」)。また、カスタム イメージを ADE で使用できるようにするために、ACR のアクセス許可を構成することが必要になる場合があります。

ADE でコンテナー イメージを使用する

ADE でコンテナー イメージを使用するには、次のいずれかの方法を使用できます。

  • スクリプトを使用してカスタム コンテナー イメージを作成する: 公開済みスクリプトを使用して Terraform 固有のイメージを作成します。
  • GitHub ワークフローを利用してカスタム コンテナー イメージを作成する: Leveraging ADE の Extensibility Model With Terraform リポジトリにある公開済みの GitHub ワークフローを使用します。
  • カスタム コンテナー イメージを手動で作成する: カスタマイズされた Terraform 固有のイメージを手動で作成します

カスタム コンテナー イメージを作成する

スクリプトを使用してカスタム コンテナー イメージを作成する

カスタム コンテナー イメージを作成すると、要件に合わせてデプロイをカスタマイズできます。 Microsoft が提供するクイック スタート スクリプトを使用して、ADE 標準イメージに基づいてイメージをビルドし、コンテナー レジストリにプッシュできます。 このスクリプトは、Deployment Environments with Terraform リポジトリにあります。 このクイック スタート スクリプトを使用するには、リポジトリをフォークし、ローカルでスクリプトを実行します。

このクイックスタート スクリプトを使用して、このサンプル イメージをすばやくビルドして Azure Container Registry にプッシュするには、次のことを行う必要があります。

  • このリポジトリを個人用アカウントにフォークします。
  • Azure CLI と Docker Desktop アプリケーションがコンピューターにインストールされ、PATH 変数に含まれていることを確認します。
  • 選択した Azure Container Registry にイメージをプッシュするためのアクセス許可があること確認します。

このスクリプトは、イメージをビルドし、リポジトリ 'ade' とタグ 'latest' の下にある指定された Azure Container Registry (ACR) にプッシュします。 このスクリプトには、カスタム イメージのレジストリ名とディレクトリが必要です。また、Azure CLI と Docker Desktop がインストールされており、PATH 変数に含まれている必要があり、指定されたレジストリにプッシュするためのアクセス許可を持っている必要があります。 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}'

環境のデプロイでイメージを使用するには、イメージの場所をマニフェスト ファイルに追加する必要があります (「イメージを環境定義に接続する」)。また、カスタム イメージを ADE で使用できるようにするために、ACR のアクセス許可を構成することが必要になる場合があります。

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 フォルダーには、いくつかのサンプル環境定義があります。

カスタム イメージを作成する

カスタム コンテナー イメージを作成すると、要件に合わせてデプロイをカスタマイズできます。 Pulumi 標準イメージを基にカスタム イメージを作成し、要件に合わせてカスタマイズできます。 イメージのカスタマイズが完了したら、イメージをビルドし、それをコンテナー レジストリにプッシュする必要があります。

ADE 用に構成されたイメージの作成は、次の手順に従って行います。

  1. 標準イメージを基にカスタム イメージを作成します。
  2. 必要なパッケージをインストールします。
  3. 操作シェル スクリプトを構成します。
  4. Pulumi CLI を使用する操作シェル スクリプトを作成します。

1.標準イメージを基にカスタム イメージを作成する

Microsoft アーティファクト レジストリでホストされている標準イメージを指す FROM ステートメントが含まれている DockerFile を作成します。

標準コア イメージを参照する FROM ステートメントの例を次に示します。

FROM mcr.microsoft.com/deployment-environments/runners/core:latest

このステートメントは、最も新しく公開されたコア イメージをプルして、それをカスタム イメージの基礎にします。

2. 必要なパッケージをインストールする

Pulumi CLI を実行可能ファイルの場所にインストールすると、デプロイおよび削除シナリオで使用することができます。

このプロセスの例を次に示します。この例では、最新版の Pulumi CLI をインストールします。

RUN apk add curl
RUN curl -fsSL https://get.pulumi.com | sh
ENV PATH="${PATH}:/root/.pulumi/bin"

Pulumi プログラムに使用するプログラミング言語によっては、1 つ以上の対応するランタイムをインストールすることが必要な場合があります。 Python ランタイムは、基本イメージで既に使用できます。

Node.js と TypeScript をインストールする例を次に示します。

# install node.js, npm, and typescript
RUN apk add nodejs npm
RUN npm install typescript -g

ADE 標準イメージは Azure CLI イメージに基づいており、ADE CLI と JQ のパッケージがプレインストールされています。 詳しくは、Azure CLIJQ パッケージに関するページをご覧ください。

イメージ内で必要なパッケージをさらにインストールするには、RUN ステートメントを使います。

Pulumi を使用してインフラストラクチャをデプロイするには、次の 4 つのステップがあります。

  1. pulumi login - ローカル ファイル システムまたは Pulumi Cloud 内の状態ストレージに接続する
  2. pulumi stack select - 特定の環境に使用するスタックを作成または選択する
  3. pulumi config set - デプロイ パラメーターを Pulumi 構成値として渡す
  4. pulumi up - デプロイを実行して、Azure で新しいインフラストラクチャを作成するか、既存のインフラストラクチャを更新する

コア イメージのエントリポイントでは、既存のローカル状態ファイルが、コンテナーと、環境変数 $ADE_STORAGE に保存されているディレクトリにプルされます。 既存の状態ファイルにアクセスするには、次のコマンドを実行します。

mkdir -p $ADE_STORAGE
export PULUMI_CONFIG_PASSPHRASE=
pulumi login file://$ADE_STORAGE

代わりに Pulumi Cloud にサインインするには、Pulumi アクセス トークンを環境変数として設定し、次のコマンドを実行します。

export PULUMI_ACCESS_TOKEN=YOUR_PULUMI_ACCESS_TOKEN
pulumi login

現在の環境に設定されているすべてのパラメーターは、変数 $ADE_OPERATION_PARAMETERS に格納されます。 さらに、選択した Azure リージョンとリソース グループ名がそれぞれ、ADE_ENVIRONMENT_LOCATIONADE_RESOURCE_GROUP_NAME に渡されます。 Pulumi スタック構成を設定するには、次のコマンドを実行します。

# Create or select the stack for the current environment
pulumi stack select $ADE_ENVIRONMENT_NAME --create

# Store configuration values in durable storage
export PULUMI_CONFIG_FILE=$ADE_STORAGE/Pulumi.$ADE_ENVIRONMENT_NAME.yaml

# Set the Pulumi stack config
pulumi config set azure-native:location $ADE_ENVIRONMENT_LOCATION --config-file $PULUMI_CONFIG_FILE
pulumi config set resource-group-name $ADE_RESOURCE_GROUP_NAME --config-file $PULUMI_CONFIG_FILE
echo "$ADE_OPERATION_PARAMETERS" | jq -r 'to_entries|.[]|[.key, .value] | @tsv' |
  while IFS=$'\t' read -r key value; do
    pulumi config set $key $value --config-file $PULUMI_CONFIG_FILE
  done

さらに、ADE の特権を利用してサブスクリプション内にインフラストラクチャをデプロイするには、Pulumi Azure Native または Azure Classic プロバイダーを使用してインフラストラクチャをプロビジョニングするときに、スクリプトで ADE マネージド サービス ID (MSI) を使用する必要があります。 特定のロールなど、デプロイを完了するためにデプロイで特別なアクセス許可が必要な場合は、環境のデプロイに使われているプロジェクト環境の種類の ID に、それらのアクセス許可を割り当てます。 ADE により、コア イメージのエントリポイント内のクライアント、テナント、サブスクリプションの ID など、関連する環境変数が設定されるため、次のコマンドを実行して、プロバイダーで ADE の MSI が使用されていることを確認します。

export ARM_USE_MSI=true
export ARM_CLIENT_ID=$ADE_CLIENT_ID
export ARM_TENANT_ID=$ADE_TENANT_ID
export ARM_SUBSCRIPTION_ID=$ADE_SUBSCRIPTION_ID

これで、pulumi up コマンドを使用して、デプロイを実行できるようになりました。

pulumi up --refresh --yes --config-file $PULUMI_CONFIG_FILE

削除スクリプトでは、次の例に示すように、代わりに destroy コマンドを実行できます。

pulumi destroy --refresh --yes --config-file $PULUMI_CONFIG_FILE

最後に、デプロイの出力をアップロードして、Azure CLI で環境にアクセスするときにアクセスできるようにするには、JQ パッケージを使用して、出力オブジェクトを Pulumi から、ADE で指定されている形式に変換します。 次の例で示すように、$ADE_OUTPUTS 環境変数に値を設定します。

stackout=$(pulumi stack output --json | jq -r 'to_entries|.[]|{(.key): {type: "string", value: (.value)}}')
echo "{\"outputs\": ${stackout:-{\}}}" > $ADE_OUTPUTS

カスタム イメージをビルドする

イメージをビルドするには、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 サービスによるこのコンテナー レジストリへのアクセスを許可" を有効化する必要があります。

パブリック ネットワークからのアクセスを無効にするには:

  1. ACR インスタンスを作成するか、既存のインスタンスを使用します。

  2. Azure portal で、構成する ACR に移動します。

  3. 左側のメニューの [設定] で、[ネットワーク] を選択します。

  4. [ネットワーク] ページの [パブリック アクセス] タブの [パブリック ネットワーク アクセス] で、[無効] を選択します。

    ACR のネットワーク設定を示す Azure portal のスクリーンショット。[パブリック アクセス] と [無効] が強調表示されています。

  5. [ファイアウォールの例外] で、[信頼された Microsoft サービスによるこのコンテナー レジストリへのアクセスを許可] が選択されていることを確認してから [保存] を選択します。

    ACR のネットワーク設定のスクリーンショット。[信頼された Microsoft サービスによるこのコンテナー レジストリへのアクセスを許可] と [保存] が強調表示されています。

AcrPull ロールを割り当てる

コンテナー イメージを使用して環境を作成するには、ADE インフラストラクチャを使用しますが、これにはプロジェクトと環境の種類も含まれます。 各プロジェクトには 1 つ以上のプロジェクト環境の種類があり、デプロイされる環境を定義するコンテナー イメージへの読み取りアクセスがこれらのプロジェクト環境の種類に付与されている必要があります。 ACR 内のイメージに安全にアクセスできるように、AcrPull ロールをプロジェクト環境の種類のそれぞれに割り当てます。

プロジェクト環境の種類に AcrPull ロールを割り当てるには:

  1. Azure portal で、構成する ACR に移動します。

  2. 左側のメニューで、[アクセス制御 (IAM)] を選択します。

  3. [追加]>[ロール割り当ての追加] の順に選択します。

  4. 次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

    設定
    Role [AcrPull] を選択します。
    アクセスの割り当て先 ユーザー、グループ、またはサービス プリンシパル を選択します。
    メンバー コンテナー内のイメージにアクセスする必要があるプロジェクト環境の種類の名前を入力します。

    プロジェクト環境の種類は、次の例のように表示されます。

    [メンバーの選択] ペインのスクリーンショット。プロジェクト環境の種類の一覧が表示され、名前の一部が強調表示されています。

この構成では、ADE はプロジェクト環境の種類のマネージド ID を使用します。これはシステム割り当てのことも、ユーザー割り当てのこともあります。

ヒント

このロールの割り当ては、すべてのプロジェクト環境の種類について行う必要があります。 これは、Azure CLI を使用して自動化できます。

イメージをレジストリにプッシュする準備ができたら、次のコマンドを実行します。

docker push {YOUR_REGISTRY}.azurecr.io/{YOUR_IMAGE_LOCATION}:{YOUR_TAG}

環境定義にイメージを接続する

デプロイ内のカスタム イメージを使用する環境定義を作成するときは、マニフェスト ファイル (environment.yaml または manifest.yaml) で runner プロパティを編集します。

runner: "{YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}"

ADE コンテナー イメージを使用して環境定義を作成して Azure リソースをデプロイする方法の詳細については、「環境定義の追加と構成」を参照してください。