本文內容
Azure 部署環境 (ADE) 支援擴充性模型,可讓您使用慣用的 IaC 範本架構來設定環境定義。 您可以將自定義映像儲存在容器登錄中,例如 Azure Container Registry (ACR) 或 Docker Hub,然後在您的環境定義中參考它們以部署環境。
在本文中,您將瞭解如何建置自定義 Bicep 容器映像,以在 ADE 中部署您的環境定義。 您將瞭解如何使用Microsoft所提供的標準映像,或使用 Bicep 基礎結構即程式代碼 (IaC) 架構設定自定義映像布建基礎結構。
在本文中,您將瞭解如何建置自定義 Terraform 容器映射,以使用 Azure 部署環境 (ADE) 建立部署環境。 您會了解如何如何使用 Terraform 基礎結構即程式碼 (IaC) 架構來設定自訂映像以佈建基礎結構。
在本文中,您將瞭解如何利用 Pulumi 進行 ADE 中的部署。 您會了解如何使用 Pulumi 所提供的標準映像,或如何使用 Pulumi 基礎結構即程式碼 (IaC) 架構來設定自訂映像以佈建基礎結構。
必要條件
具有有效訂用帳戶的 Azure 帳戶。
免費建立帳戶 。
在 Azure 訂用帳戶中設定的 Azure 部署環境。
在 ADE 使用容器映像
您可以採取下列其中一種方法,在 ADE 使用容器映像:
使用標準容器映像 針對簡單的案例,請使用 ADE 所提供的標準 ARM-Bicep 容器映像。
建立自訂容器映像: 若是較複雜的案例,請建立符合您特定需求的自訂容器映像。
使用標準容器映像
ADE 支援 Azure Resource Manager (ARM) 和 Bicep,而不需要任何額外的設定。 您可以透過將範本檔案 (例如 azuredeploy.json 和 environment.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 標準映射作為 ADE CLI 的基礎來建置自定義映像,該映像會預安裝於標準映射上。 若要深入了解 ADE CLI,請參閱 CLI 自訂執行器映像參考 (部分機器翻譯)。
在此範例中,您會了解如何組建 Docker 映像以利用 ADE 部署並存取 ADE CLI,使其中一個 ADE 撰寫的映像成為您映像的基礎。
若要建立針對 ADE 設定的映像,請遵循下列步驟:
根據標準映像建立自定義映像。
安裝所需的套件。
設定作業殼層指令碼。
建立作業殼層指令碼以部署 ARM 或 Bicep 範本。
1.根據標準映射建立自定義映像
建立 DockerFile,其中包含指向裝載於 Microsoft 成品登錄 的標準映射的 FROM 語句。
以下是參考標準核心映射的FROM語句範例:
FROM mcr.microsoft.com/deployment-environments/runners/core:latest
此陳述式會提取最近發佈的核心映像,並使它成為自訂映像的基礎。
2.安裝必要的套件
在此步驟中,您會在映像中安裝所需的任何套件,包括 Bicep。 您可以使用 RUN 陳述式透過 Azure CLI 安裝 Bicep 套件,如下列範例所示:
RUN az bicep install
ADE 標準映像是以 Azure CLI 映像為基礎,並預安裝 ADE CLI 和 JQ 套件。 您可以深入了解 Azure CLI (部份機器翻譯) 和 JQ 封裝 (英文)。
若要在映像中安裝您需要的更多套件,請使用 RUN 陳述式。
3.設定作業殼層指令碼
在標準映像中,作業會根據作業名稱來決定和執行。 目前,支援的兩個作業名稱為 deploy 和 delete 。
若要設定自訂映像以利用此結構,請在名為 scripts 的 Dockerfile 層級指定一個資料夾,然後指定 deploy.sh 和 delete.sh 這兩個檔案。部署殼層指令碼會在建立或重新部署環境時執行,而刪除殼層指令碼會在刪除環境時執行。 您可以在存放庫中 ARM-Bicep 映像的 Runner-Images 資料夾 下,看到殼層指令碼範例。
若要確保這些殼層指令碼可執行,請將下列幾行新增至您的 Dockerfile:
COPY scripts/* /scripts/
RUN find /scripts/ -type f -iname "*.sh" -exec dos2unix '{}' '+'
RUN find /scripts/ -type f -iname "*.sh" -exec chmod +x {} \;
4.建立作業殼層指令碼以部署 ARM 或 Bicep 範本
若要確保您可以透過 ADE 成功部署 ARM 或 Bicep 基礎結構,您必須:
將 ADE 參數轉換成 ARM 可接受的參數
解析用於部署中之連結的範本
使用特殊權限受控識別執行部署
在核心映像的進入點期間,任何針對目前環境設定的參數都會儲存在變數 $ADE_OPERATION_PARAMETERS
下。 若要將其轉換成 ARM 可接受的參數,您可以使用 JQ 執行下列命令:
# format the parameters as arm parameters
deploymentParameters=$(echo "$ADE_OPERATION_PARAMETERS" | jq --compact-output '{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": (to_entries | if length == 0 then {} else (map( { (.key): { "value": .value } } ) | add) end) }' )
接下來,若要解析 ARM JSON 型範本內使用的任何連結範本,您可以反向組譯主要範本檔案,這會將所有使用的本地基礎結構檔案解析成多個 Bicep 模組。 然後,將這些模組重建為單個 ARM 範本,並將連結的範本內嵌為主要 ARM 範本的巢狀範本。 只有部署作業期間,才須執行此步驟。 主要範本檔案可以使用在核心映像進入點期間設定的 $ADE_TEMPLATE_FILE
指定,您應該使用重新編譯的範本檔案來重設此變數。 請參閱下列範例:
if [[ $ADE_TEMPLATE_FILE == *.json ]]; then
hasRelativePath=$( cat $ADE_TEMPLATE_FILE | jq '[.. | objects | select(has("templateLink") and (.templateLink | has("relativePath")))] | any' )
if [ "$hasRelativePath" = "true" ]; then
echo "Resolving linked ARM templates"
bicepTemplate="${ADE_TEMPLATE_FILE/.json/.bicep}"
generatedTemplate="${ADE_TEMPLATE_FILE/.json/.generated.json}"
az bicep decompile --file "$ADE_TEMPLATE_FILE"
az bicep build --file "$bicepTemplate" --outfile "$generatedTemplate"
# Correctly reassign ADE_TEMPLATE_FILE without the $ prefix during assignment
ADE_TEMPLATE_FILE="$generatedTemplate"
fi
fi
若要提供部署在訂閱中執行資源部署和刪除時需要的權限,請使用與 ADE 專案環境類型相關聯的特殊權限受控識別。 如果您的部署需要特殊存取權限 (例如特定角色) 才能完成,請將這些角色指派給專案環境類型的身分識別。 有時候,無法在進入容器時立即使用受控識別;您可以重試,直到登入成功為止。
echo "Signing into Azure using MSI"
while true; do
# managed identity isn't available immediately
# we need to do retry after a short nap
az login --identity --allow-no-subscriptions --only-show-errors --output none && {
echo "Successfully signed into Azure"
break
} || sleep 5
done
若要開始部署 ARM 或 Bicep 範本,請執行 az deployment group create
命令。 在容器內執行此命令時,請選擇不會覆寫任何過去部署的部署名稱,並使用 --no-prompt true
和 --only-show-errors
旗標,以確保部署不會因任何警告而失敗,或因等待使用者輸入而停止,如下列範例所示:
deploymentName=$(date +"%Y-%m-%d-%H%M%S")
az deployment group create --subscription $ADE_SUBSCRIPTION_ID \
--resource-group "$ADE_RESOURCE_GROUP_NAME" \
--name "$deploymentName" \
--no-prompt true --no-wait \
--template-file "$ADE_TEMPLATE_FILE" \
--parameters "$deploymentParameters" \
--only-show-errors
若要刪除環境,請執行完整模式部署並提供空白 ARM 範本,該範本將移除指定 ADE 資源群組中的所有資源,如以下範例所示:
deploymentName=$(date +"%Y-%m-%d-%H%M%S")
az deployment group create --resource-group "$ADE_RESOURCE_GROUP_NAME" \
--name "$deploymentName" \
--no-prompt true --no-wait --mode Complete \
--only-show-errors \
--template-file "$DIR/empty.json"
您可以執行下列命令來檢查佈建狀態和詳細資料。 ADE 使用一些特殊函式,根據佈建詳細資料來讀取並提供更多內容,可在 Runner-Images 資料夾中查看。 簡易的實作可能如下所示:
if [ $? -eq 0 ]; then # deployment successfully created
while true; do
sleep 1
ProvisioningState=$(az deployment group show --resource-group "$ADE_RESOURCE_GROUP_NAME" --name "$deploymentName" --query "properties.provisioningState" -o tsv)
ProvisioningDetails=$(az deployment operation group list --resource-group "$ADE_RESOURCE_GROUP_NAME" --name "$deploymentName")
echo "$ProvisioningDetails"
if [[ "CANCELED|FAILED|SUCCEEDED" == *"${ProvisioningState^^}"* ]]; then
echo -e "\nDeployment $deploymentName: $ProvisioningState"
if [[ "CANCELED|FAILED" == *"${ProvisioningState^^}"* ]]; then
exit 11
else
break
fi
fi
done
fi
最後,若要檢視部署的輸出並將其傳遞給 ADE,使其可以透過 Azure CLI 存取,您可以執行以下命令:
deploymentOutput=$(az deployment group show -g "$ADE_RESOURCE_GROUP_NAME" -n "$deploymentName" --query properties.outputs)
if [ -z "$deploymentOutput" ]; then
deploymentOutput="{}"
fi
echo "{\"outputs\": $deploymentOutput}" > $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 使用容器映像
您可以採取下列其中一種方法,在 ADE 使用容器映像:
使用腳本建立自定義容器映射: 使用已發佈的腳本來建立 Terraform 特定映像。
使用 GitHub 工作流程建立自訂容器映像: 使用利用 ADE 的擴充性模型搭配 Terraform 存放庫使用已發佈的 GitHub 工作流程。
手動建立自定義容器映射: 手動建立自定義的 Terraform 特定映像
建立自訂容器映像
使用 GitHub 工作流程建立自訂容器映像
首先,您可以從利用 ADE 的擴充性模型搭配 Terraform 存放庫,使用已發佈的 GitHub 工作流程。
若要使用工作流程,您必須:
將此存放庫派生到您的個人帳戶
允許 GitHub Actions 透過 OIDC 透過 Microsoft Entra ID 應用程式的同盟認證連線到 Azure。 您可以在這裡找到更多有關此程式的檔
為您的存放庫設定存放庫密碼,其中包含您Microsoft Entra ID 應用程式的應用程式識別碼設定為 AZURE_CLIENT_ID、訂用帳戶標識元設定為 AZURE_SUBSCRIPTION_ID,以及將租使用者標識符設定為 AZURE_TENANT_ID
為您的存放庫設定存放庫變數,其中包含您的個人 Azure Container Registry (ACR) 名稱作為REGISTRY_NAME、您慣用的存放庫名稱作為REPOSITORY_NAME,以及您慣用的標籤作為所建立映像的 TAG。 您可以修改工作流程執行之間的變數,將產生的映像推送至不同的登錄、存放庫和標記。
流覽至分支存放庫中的 [動作] 索引標籤,然後選取您想要執行的工作流程,以執行工作流程。 然後,您可以選取 [執行工作流程] 按鈕來啟動工作流程。
若要在環境部署中使用映像,您必須將映像的位置新增至指令清單檔案 將映像連線到您的環境定義 ,而且您可能需要設定 ACR 的許可權,讓 自定義映像可供 ADE 使用。
手動建立自定義容器映像
您可以建立自訂容器映像,根據自身需求自訂部署。 您可以根據 ADE 標準映像建立自訂映像。
完成映像自訂之後,您必須組建映像,並將其推送至您的容器登錄。
您可以手動建置和推送映像,或使用 Microsoft 所提供的指令碼來自動化流程。
已發佈的 GitHub Action 有助於建置映像並將其推送至 Azure Container Registry (ACR)。 您可以在 ADE 中的環境定義中參考提供的 ACR 映像連結,以部署或刪除具有所提供映像的環境。
若要建立針對 ADE 設定的映像,請遵循下列步驟:
根據 GitHub 工作流程建立自定義映像。
安裝所需的套件。
設定作業殼層指令碼。
建立使用 Terraform CLI 的作業殼層指令碼。
1.根據 GitHub 工作流程建立自定義映像
使用已發佈的存放 庫 來利用 GitHub 工作流程。 存放庫包含與 ADE 相容的範例映像元件,包括使用 Terraform IaC 範本部署和刪除環境的 Dockerfile 和殼層腳本。 此範例程式代碼可協助您建立自己的容器映像。
2.安裝必要的套件 在此步驟中,您會在映像中安裝所需的任何套件,包括 Terraform。 您可以將 Terraform CLI 安裝至可執行的位置,使其可用於您的部署和刪除指令碼。
以下是安裝 Terraform CLI 1.7.5 版的範例流程:
RUN wget -O terraform.zip https://releases.hashicorp.com/terraform/1.7.5/terraform_1.7.5_linux_amd64.zip
RUN unzip terraform.zip && rm terraform.zip
RUN mv terraform /usr/bin/terraform
3.設定作業殼層指令碼
在標準映像中,作業會根據作業名稱來決定和執行。 目前,支援的兩個作業名稱為 deploy 和 delete 。
若要設定自訂映像以利用此結構,請在名為 scripts 的 Dockerfile 層級指定一個資料夾,然後指定 deploy.sh 和 delete.sh 這兩個檔案。部署殼層指令碼會在建立或重新部署環境時執行,而刪除殼層指令碼會在刪除環境時執行。 您可以在 Terraform 的 scripts 資料夾中,查看存放庫中 殼層腳本的範例。
若要確保這些殼層指令碼可執行,請將下列幾行新增至您的 Dockerfile:
COPY scripts/* /scripts/
RUN find /scripts/ -type f -iname "*.sh" -exec dos2unix '{}' '+'
RUN find /scripts/ -type f -iname "*.sh" -exec chmod +x {} \;
4.建立使用 Terraform CLI 的作業殼層指令碼
透過 Terraform 部署基礎結構有三個步驟:
terraform init
- 初始化 Terraform CLI 以在工作目錄中執行動作
terraform plan
- 根據傳入的 Terraform 基礎架構檔案和變數,以及任何現有狀態檔案來開發計劃,並開發建立或更新 .tf 檔案中所指定基礎結構所需的步驟
terraform apply
- 套用計劃以在 Azure 中新建基礎結構或更新現有的基礎結構
在核心映像的進入點期間,會將任何現有的狀態檔案提取到容器中,並將目錄儲存在環境變數 $ADE_STORAGE
下。 此外,任何針對目前環境設定的參數都會儲存在變數 $ADE_OPERATION_PARAMETERS
下。 為了存取現有狀態檔案和在 .tfvars.json 檔案中設定變數,請執行下列命令:
set -e #set script to exit on error
EnvironmentState="$ADE_STORAGE/environment.tfstate"
EnvironmentPlan="/environment.tfplan"
EnvironmentVars="/environment.tfvars.json"
echo "$ADE_OPERATION_PARAMETERS" > $EnvironmentVars
此外,若要利用 ADE 權限在訂用帳戶內部署基礎結構,您的指令碼必須在使用 Terraform AzureRM 提供者佈建基礎結構時,使用受管理的服務識別 (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
如果您有其他變數可在環境參數中未指定的範本中參考,請使用前置詞 TF_VAR 設定環境變數。
Azure 部署環境 CLI 變數參考 提供的 ADE 環境變數清單。 這些命令的範例可能是;
export TF_VAR_resource_group_name=$ADE_RESOURCE_GROUP_NAME
export TF_VAR_ade_env_name=$ADE_ENVIRONMENT_NAME
export TF_VAR_env_name=$ADE_ENVIRONMENT_NAME
export TF_VAR_ade_subscription=$ADE_SUBSCRIPTION_ID
export TF_VAR_ade_location=$ADE_ENVIRONMENT_LOCATION
export TF_VAR_ade_environment_type=$ADE_ENVIRONMENT_TYPE
您現在可以執行先前列出的步驟來初始化 Terraform CLI、產生布建基礎結構的計劃,並在部署指令碼期間套用計劃:
terraform init
terraform plan -no-color -compact-warnings -refresh=true -lock=true -state=$EnvironmentState -out=$EnvironmentPlan -var-file="$EnvironmentVars"
terraform apply -no-color -compact-warnings -auto-approve -lock=true -state=$EnvironmentState $EnvironmentPlan
在刪除指令碼期間,您可以將 destroy
旗標新增至計劃產生以刪除現有的資源,如下列範例所示:
terraform init
terraform plan -no-color -compact-warnings -destroy -refresh=true -lock=true -state=$EnvironmentState -out=$EnvironmentPlan -var-file="$EnvironmentVars"
terraform apply -no-color -compact-warnings -auto-approve -lock=true -state=$EnvironmentState $EnvironmentPlan
最後,若要將部署的輸出上傳並使其在您透過 Azure CLI 存取環境時可供存取,請透過 JQ 封裝將輸出物件從 Terraform 轉換為 ADE 指定的格式。 將值設定為 $ADE_OUTPUTS 環境變數,如下列範例所示:
tfOutputs=$(terraform output -state=$EnvironmentState -json)
# Convert Terraform output format to ADE format.
tfOutputs=$(jq 'walk(if type == "object" then
if .type == "bool" then .type = "boolean"
elif .type == "list" then .type = "array"
elif .type == "map" then .type = "object"
elif .type == "set" then .type = "array"
elif (.type | type) == "array" then
if .type[0] == "tuple" then .type = "array"
elif .type[0] == "object" then .type = "object"
elif .type[0] == "set" then .type = "array"
else .
end
else .
end
else .
end)' <<< "$tfOutputs")
echo "{\"outputs\": $tfOutputs}" > $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
使用 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 設定的映像,請遵循下列步驟:
根據標準映像建立自定義映像。
安裝所需的套件。
設定作業殼層指令碼。
建立使用 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 部署基礎結構有四個步驟:
pulumi login
- 在本機檔案系統或 Pulumi Cloud 中連線到狀態記憶體
pulumi stack select
- 建立或選取要用於特定環境的堆疊
pulumi config set
- 傳遞部署參數作為 Pulumi 設定值
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_LOCATION
和 ADE_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 服務存取此容器登錄」 。
若要停用從公用網路存取:
建立 ACR 執行個體 或使用現有執行個體。
在 Azure 入口網站中,前往您想要設定的 ACR。
在左側功能表的 [設定] 下,選取 [網路] 。
在 [網路] 頁面的 [公用存取] 索引標籤中,選取 [公用網路存取] 下的 [停用] 。
在 [防火牆例外] 下確認已選取 [允許信任的 Microsoft 服務存取此容器登錄] ,然後選取 [儲存] 。
指派 AcrPull 角色
若使用容器映像建立環境,就會使用 ADE 基礎結構,包括專案和環境類型。 每個專案都有一或多個專案環境類型,這些專案環境類型需要容器映像 (定義要部署的環境) 的讀取存取。 若要在 ACR 內安全存取映像,請將 AcrPull 角色指派給每個專案環境類型。
若要將 AcrPull 角色指派給專案環境類型:
在 Azure 入口網站中,前往您想要設定的 ACR。
在左側功能表中,選取存取控制 (IAM) 。
選取 [新增 >][新增角色指派 ]。
指派下列角色。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色 。
設定
值
Role
選取 [AcrPull] 。
指派存取權至
選取 [使用者、群組或服務主體] 。
成員
輸入需要存取容器中映像的專案環境類型名稱。
隨即顯示專案環境類型,如下列範例所示:
在此設定中,ADE 會針對 PET 使用受控識別,無論是系統指派還是使用者指派。
提示
必須為每種專案環境類型進行此角色指派。 可以透過 Azure CLI 進行自動化。
當您準備好將映像推送至登錄時,請執行下列命令:
docker push {YOUR_REGISTRY}.azurecr.io/{YOUR_IMAGE_LOCATION}:{YOUR_TAG}
使用具有匿名提取的公用登錄
若要設定登錄以啟用匿名映像提取,請在 Azure CLI 中執行下列命令:
az login
az acr login -n {YOUR_REGISTRY}
az acr update -n {YOUR_REGISTRY} --public-network-enabled true
az acr update -n {YOUR_REGISTRY} --anonymous-pull-enabled true
當您準備好將映像推送至登錄時,請執行下列命令:
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 資源的環境定義,請參閱新增和設定環境定義 。
相關內容