共用方式為


設定容器映像以執行部署

Azure 部署環境 (ADE) 支援擴充性模型,可讓您使用偏好的 IaC 範本架構來設定環境定義。 您可以將自訂映像儲存在容器登錄中,例如 Azure Container Registry (ACR) 或 Docker Hub,然後在您的環境定義中參考它們以部署環境。

在本文中,您將了解如何組建自訂 Bicep 容器映像,以在 ADE 中部署您的環境定義。 您會了解如何使用 Microsoft 所提供的標準映像,或如何使用 Bicep 基礎結構即程式碼 (IaC) 架構來設定自訂映像以佈建基礎結構。

在本文中,您將了解如何建置自訂 Terraform 容器映像,以使用 Azure 部署環境 (ADE) 建立部署環境。 您會了解如何如何使用 Terraform 基礎結構即程式碼 (IaC) 架構來設定自訂映像以佈建基礎結構。

在本文中,您將了解如何利用 Pulumi 在 ADE 中部署。 您會了解如何使用 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

您可以在 ADE 範例存放庫中 ARM-Bicep 映像的 Runner-Images 資料夾下,看到標準 Bicep 容器映像。

如需如何建立使用 ADE 容器映像來部署 Azure 資源的環境定義詳細資訊,請參閱新增和設定環境定義 (部分機器翻譯)。

建立自訂容器映像

使用指令碼建立自訂容器映像

您可以建立自訂容器映像,根據自身需求自訂部署。 您可以使用 Microsoft 提供的快速入門指令碼,根據 ADE 標準映像建立和建置映像,並將它推送至容器登錄。 您可以在部署環境存放庫中找到此指令碼。 若要使用快速入門指令碼,請派生存放庫,然後在本機執行指令碼。

指令碼會建置您的映像,並將它推送至 'ade' 存放庫和 'latest' 標籤之下指定的 Azure Container Registry (ACR)。 此指令碼需要自訂映像的登錄名稱和目錄、在 PATH 變數中安裝 Azure CLI 和 Docker Desktop,而且您必須有權限可推送至指定的登錄。

若要使用快速入門指令碼來快速建置此範例映像並將它推送至 Azure Container Registry,您必須:

  • 將此存放庫派生至您的個人帳戶。
  • 確定您的電腦上和 PATH 變數內已安裝 Azure CLI 和 Docker Desktop 應用程式。
  • 確定您有權限將映像推送至您選取的 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}'

若要在環境部署中使用映像,您必須將映像的位置新增至資訊清單檔將映像連線到您的環境定義,而且您可能需要設定 ACR 的權限,讓自訂映像可供 ADE 使用

在 ADE 使用容器映像

您可以採取下列其中一種方法,在 ADE 使用容器映像:

  • 使用指令碼建立自訂容器映像:使用發佈的指令碼來建立 Terraform 特定映像。
  • 使用 GitHub 工作流程建立自訂容器映像:使用運用 ADE 的擴充性模型搭配 Terraform 存放庫所發佈的 GitHub 工作流程。
  • 手動建立自訂容器映像:手動建立自訂的 Terraform 特定映像

建立自訂容器映像

使用指令碼建立自訂容器映像

您可以建立自訂容器映像,根據自身需求自訂部署。 您可以使用 Microsoft 提供的快速入門指令碼,根據 ADE 標準映像建置映像,並將它推送至容器登錄。 您可以在具有 Terraform 存放庫的部署環境中找到此指令碼。 若要使用快速入門指令碼,請派生存放庫,然後在本機執行指令碼。

若要使用快速入門指令碼來快速建置此範例映像並將它推送至 Azure Container Registry,您必須:

  • 將此存放庫派生至您的個人帳戶。
  • 確定您的電腦上和 PATH 變數內已安裝 Azure CLI 和 Docker Desktop 應用程式。
  • 確定您有權限將映像推送至您選取的 Azure Container Registry。

指令碼會建置您的映像,並將它推送至 'ade' 存放庫和 'latest' 標籤之下指定的 Azure Container Registry (ACR)。 此指令碼需要自訂映像的登錄名稱和目錄、在 PATH 變數中安裝 Azure CLI 和 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}'

若要在環境部署中使用映像,您必須將映像的位置新增至資訊清單檔將映像連線到您的環境定義,而且您可能需要設定 ACR 的權限,讓自訂映像可供 ADE 使用

使用 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

您可以在 [環境] 資料夾中找到幾個範例環境定義。

建立自訂映像

您可以建立自訂容器映像,根據自身需求自訂部署。 您可以根據 Pulumi 標準映像建立自訂映像,並加以自訂以符合您的需求。 完成映像自訂之後,您必須組建映像,並將其推送至您的容器登錄。

若要建立針對 ADE 設定的映像,請遵循下列步驟:

  1. 根據標準映像建立自訂映像。
  2. 安裝所需的套件。
  3. 設定作業殼層指令碼。
  4. 建立使用 Pulumi CLI 的作業殼層指令碼。

1. 根據標準映像建立自訂映像

建立 DockerFile,其中包含 FROM 陳述式,指向裝載於 Microsoft 成品登錄上的標準映像。

以下是參考標準核心映像的範例 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 程式的程式設計語言而定,您可能需要安裝一或多個對應的執行階段。 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 CLI (部份機器翻譯) 和 JQ 封裝 (英文)。

若要在映像中安裝您需要的更多套件,請使用 RUN 陳述式。

透過 Pulumi 部署基礎結構有四個步驟:

  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 原生或 Azure 傳統提供者佈建基礎結構時,使用 ADE 受管理的服務識別 (MSI)。 若您的部署需要特殊權限才能完成部署,例如特定角色,請將這些權限指派給用於環境部署的專案環境類型身分識別。 ADE 會設定相關的環境變數,例如核心映像進入點內的用戶端、租用戶和訂用帳戶識別碼,因此請執行下列命令,以確保提供者使用 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 緊密整合,因此可以發佈映像,而不需要允許公用匿名提取存取。 您必須組建自訂容器映像,並將其推送至容器登錄,使其可用於 ADE。

也可以將映像儲存在如 Docker Hub 等不同的容器登錄中,但在這種情況下,必須可供公開存取。

注意

將容器映像儲存在使用匿名 (未經驗證) 提取存取的登錄中,可讓其可供公開存取。 如果您的映像包含任何敏感性資訊,請不要執行該動作。 請改為將其儲存在已停用匿名提取存取的 Azure Container Registry (ACR) 中。

若要使用儲存在 ACR 中的自訂映像,需要確保 ADE 具有存取您映像的適當權限。 當您建立 ACR 執行個體時,其預設是安全的,而且只允許已驗證的使用者取得存取權。

您可以使用 Pulumi 建立 Azure Container Registry 並向其發佈映像。 如需在 Azure 帳戶中建立所有必要資源的獨立 Pulumi 專案,請參閱佈建/自訂映像範例 (英文)。

請選取適當的索引標籤,以深入了解各方法。

使用具有安全存取權的私人登錄

根據預設,只有已驗證的使用者才有從 Azure Container Registry 提取或推送內容的存取權。 您可以限制來自特定網路的存取,並指派特定角色,以進一步保護對 ACR 的存取。

若要建立 ACR 的執行個體 (可透過 Azure CLI、Azure 入口網站、PowerShell 命令等方式完成),請遵循其中一個快速入門

限制網路存取

若要保護對 ACR 的網路存取,可以限制僅限您自己的網路存取,或完全停用公用網路存取。 如果您限制網路存取,就必須啟用防火牆例外「允許信任的 Microsoft 服務存取此容器登錄」

若要停用從公用網路存取:

  1. 建立 ACR 執行個體或使用現有執行個體。

  2. 在 Azure 入口網站中,前往您想要設定的 ACR。

  3. 在左側功能表的 [設定] 下,選取 [網路]

  4. 在 [網路] 頁面的 [公用存取] 索引標籤中,選取 [公用網路存取] 下的 [停用]

    顯示 ACR 網路設定,並醒目提示 [公用存取] 和 [停用] 的 Azure 入口網站螢幕擷取畫面。

  5. 在 [防火牆例外] 下確認已選取 [允許信任的 Microsoft 服務存取此容器登錄],然後選取 [儲存]

    ACR 網路設定的螢幕擷取畫面,其中醒目提示 [允許信任的 Microsoft 服務存取此容器登錄] 和 [儲存]。

指派 AcrPull 角色

若使用容器映像建立環境,就會使用 ADE 基礎結構,包括專案和環境類型。 每個專案都有一或多個專案環境類型,這些專案環境類型需要容器映像 (定義要部署的環境) 的讀取存取。 若要在 ACR 內安全存取映像,請將 AcrPull 角色指派給每個專案環境類型。

若要將 AcrPull 角色指派給專案環境類型:

  1. 在 Azure 入口網站中,前往您想要設定的 ACR。

  2. 在左側功能表中,選取存取控制 (IAM)

  3. 選取 [新增]>[新增角色指派]

  4. 指派下列角色。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色

    設定
    角色 選取 [AcrPull]
    存取權指派對象 選取 [使用者、群組或服務主體]
    成員 輸入需要存取容器中映像的專案環境類型名稱。

    隨即顯示專案環境類型,如下列範例所示:

    [選取成員] 窗格的螢幕擷取畫面,其中顯示醒目提示一部分名稱的專案環境類型清單。

在此設定中,ADE 會針對 PET 使用受控識別,無論是系統指派還是使用者指派。

秘訣

必須為每種專案環境類型進行此角色指派。 可以透過 Azure CLI 進行自動化。

秘訣

如果您的 ACR 使用 Microsoft Entra 屬性型存取控制(ABAC)來控制存放庫許可權,您可能需要對 PET 身份進行其他角色指派,例如Container Registry Repository Reader。 如需詳細資訊,請參閱 Microsoft Entra ABAC 以取得存放庫許可權

當您準備好將映像推送至登錄時,請執行下列命令:

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 資源的環境定義,請參閱新增和設定環境定義