共用方式為


設定容器映像以執行部署

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標識碼。

下列範例示範 runner 參考標準 ARM-Bicep 容器映射的 :

    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

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

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

建立自訂容器映像

使用腳本建立自定義容器映像

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

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

若要使用快速入門腳本快速建置此範例映射並將其推送至 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』 下的指定 Azure Container Registry (ACR)和標籤 'latest'。 此腳本需要自定義映像的登錄名稱和目錄、安裝 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}'

若要在環境部署中使用映像,您必須將映像的位置新增至指令清單檔案 將映像連線到您的環境定義 ,而且您可能需要設定 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,其中包含指向裝載於 Microsoft 成品登錄 上之標準映射的 FROM 語句。

以下是參考標準核心映射的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 角色

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

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

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

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

提示

必須為每種專案環境類型進行此角色指派。 可以透過 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 資源的環境定義,請參閱新增和設定環境定義