Konfigurace image kontejneru pro spouštění nasazení
Prostředí nasazení Azure (ADE) podporuje model rozšiřitelnosti, který umožňuje nakonfigurovat definici prostředí s upřednostňovanou architekturou šablon IaC. Vlastní image můžete uložit do registru kontejneru, jako je Azure Container Registry (ACR) nebo Docker Hub, a pak na ně v definicích prostředí odkazovat.
V tomto článku se dozvíte, jak vytvořit vlastní image kontejneru Bicep pro nasazení definic prostředí v ADE. Naučíte se používat standardní image poskytovanou Microsoftem nebo jak nakonfigurovat vlastní infrastrukturu zřizování imagí pomocí architektury Bicep Infrastructure as-Code (IaC).
V tomto článku se dozvíte, jak vytvořit vlastní image kontejneru Terraform pro vytváření prostředí nasazení pomocí prostředí nasazení Azure (ADE). Dozvíte se, jak nakonfigurovat vlastní image pro zřizování infrastruktury pomocí architektury Terraform Infrastructure-as-Code (IaC).
V tomto článku se dozvíte, jak využívat Pulumi pro nasazení v ADE. Naučíte se používat standardní image poskytovanou Pulumi nebo jak nakonfigurovat vlastní image pro zřizování infrastruktury pomocí architektury Pulumi Infrastructure as-Code (IaC).
Požadavky
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Prostředí nasazení Azure nastavená ve vašem předplatném Azure
- Pokud chcete nastavit ADE, postupujte podle rychlého startu : Konfigurace prostředí nasazení Azure.
Použití imagí kontejneru s ADE
K používání imagí kontejnerů s ADE můžete použít jeden z následujících přístupů:
- Použijte standardní image kontejneru Pro jednoduché scénáře použijte standardní image kontejneru ARM-Bicep, kterou poskytuje ADE.
- Vytvořte vlastní image kontejneru pro složitější scénáře a vytvořte vlastní image kontejneru, která splňuje vaše konkrétní požadavky.
Použití standardní image kontejneru
ADE podporuje Azure Resource Manager (ARM) a Bicep bez nutnosti další konfigurace. Definici prostředí, která nasadí prostředky Azure pro prostředí nasazení, můžete vytvořit tak, že do katalogu přidáte soubory šablon (například azuredeploy.json a environment.yaml). ADE pak pomocí standardní image kontejneru ARM-Bicep vytvoří prostředí nasazení.
V souboru environment.yaml určuje vlastnost umístění image kontejneru, runner
kterou chcete použít. Chcete-li použít standardní obrázek publikovaný na Registr artefaktů Microsoft, použijte příslušné identifikátory runner
.
Následující příklad ukazuje runner
odkaz na standardní image kontejneru 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
Standardní image kontejneru Bicep se zobrazí ve standardním úložišti ADE ve složce Runner-Images pro image ARM-Bicep .
Další informace o vytváření definic prostředí, které používají image kontejneru ADE k nasazení prostředků Azure, najdete v tématu Přidání a konfigurace definice prostředí.
Vytvoření vlastní image kontejneru
Vytvoření vlastní image kontejneru pomocí skriptu
Vytvoření vlastní image kontejneru umožňuje přizpůsobit nasazení tak, aby vyhovovala vašim požadavkům. Vlastní image můžete vytvářet na základě standardních imagí ADE.
Po dokončení přizpůsobení image můžete image sestavit a odeslat ji do registru kontejneru pomocí skriptu poskytnutého Microsoftem k automatizaci procesu.
Vlastní image vytváříte pomocí standardních imagí ADE jako základ pomocí rozhraní příkazového řádku ADE, který je předinstalovaný na standardních imagích. Další informace o rozhraní příkazového řádku ADE najdete v referenčních informacích k vlastním imagí spouštěče rozhraní příkazového řádku.
V tomto příkladu se dozvíte, jak vytvořit image Dockeru, která využívá nasazení ADE a získat přístup k rozhraní příkazového řádku ADE a jak založit image z jedné z imagí vytvořených pomocí ADE.
Pokud chcete vytvořit image nakonfigurovanou pro ADE, postupujte takto:
- Vytvořte vlastní image založenou na standardní imagi.
- Nainstalujte požadované balíčky.
- Nakonfigurujte skripty prostředí operation shell.
- Vytvořte skripty operačního prostředí pro nasazení šablon ARM nebo Bicep.
1. Vytvoření vlastní image založené na standardní imagi
Vytvořte soubor DockerFile, který obsahuje příkaz FROM odkazující na standardní image hostované na Registr artefaktů Microsoft.
Tady je příklad příkazu FROM, který odkazuje na standardní základní image:
FROM mcr.microsoft.com/deployment-environments/runners/core:latest
Tento příkaz načítá naposledy publikovanou základní image a je základem pro vaši vlastní image.
2. Instalace požadovaných balíčků
V tomto kroku nainstalujete všechny balíčky, které v imagi potřebujete, včetně Bicep. Balíček Bicep můžete nainstalovat pomocí Azure CLI pomocí příkazu RUN, jak je znázorněno v následujícím příkladu:
RUN az bicep install
Standardní image ADE jsou založené na imagi Azure CLI a mají předinstalované balíčky ADE CLI a JQ. Další informace o Azure CLI a balíčku JQ.
Pokud chcete do image nainstalovat další balíčky, které potřebujete, použijte příkaz RUN.
3. Konfigurace skriptů operačního prostředí
V rámci standardních imagí se operace určují a spouští na základě názvu operace. V současné době se podporují dva podporované názvy operací, které se nasazují a odstraňují.
Pokud chcete nastavit vlastní image tak, aby tuto strukturu využívala, zadejte složku na úrovni pojmenovaných skriptů souboru Dockerfile a zadejte dva soubory, deploy.sh a delete.sh. Skript prostředí deploy se spustí při vytvoření nebo opětovném nasazení vašeho prostředí a skript prostředí pro odstranění se spustí při odstranění prostředí. Příklady skriptů prostředí najdete v úložišti ve složce Runner-Images pro image ARM-Bicep .
Pokud chcete zajistit, aby tyto skripty prostředí byly spustitelné, přidejte do souboru Dockerfile následující řádky:
COPY scripts/* /scripts/
RUN find /scripts/ -type f -iname "*.sh" -exec dos2unix '{}' '+'
RUN find /scripts/ -type f -iname "*.sh" -exec chmod +x {} \;
4. Vytvoření skriptů operačního prostředí pro nasazení šablon ARM nebo Bicep
Pokud chcete zajistit úspěšné nasazení infrastruktury ARM nebo Bicep prostřednictvím ADE, musíte:
- Převod parametrů ADE na parametry přijatelné pro ARM
- Řešení propojených šablon, pokud se používají v nasazení
- Použití privilegované spravované identity k nasazení
Během vstupního bodu základní image jsou všechny parametry nastavené pro aktuální prostředí uloženy pod proměnnou $ADE_OPERATION_PARAMETERS
. Pokud je chcete převést na parametry přijatelné pro ARM, můžete pomocí JQ spustit následující příkaz:
# 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) }' )
Pokud chcete vyřešit všechny propojené šablony použité v šabloně ZALOŽENÉ na JSON ARM, můžete dekompilovat hlavní soubor šablony, který řeší všechny soubory místní infrastruktury používané v mnoha modulech Bicep. Potom tyto moduly znovu sestavte do jedné šablony ARM s propojenými šablonami vloženými do hlavní šablony ARM jako vnořené šablony. Tento krok je nezbytný pouze během operace nasazení. Hlavní soubor šablony lze zadat pomocí $ADE_TEMPLATE_FILE
sady během vstupního bodu základní image a tuto proměnnou byste měli resetovat pomocí rekompilovaného souboru šablony. Prohlédněte si následující příklad:
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
Pokud chcete poskytnout oprávnění, která nasazení vyžaduje ke spuštění nasazení a odstranění prostředků v rámci předplatného, použijte privilegovanou spravovanou identitu přidruženou k typu prostředí projektu ADE. Pokud vaše nasazení potřebuje k dokončení speciální oprávnění, například konkrétní role, přiřaďte tyto role identitě typu prostředí projektu. V některých případech není spravovaná identita okamžitě dostupná při zadávání kontejneru; Můžete to zkusit znovu, dokud přihlášení nebude úspěšné.
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
Spuštěním az deployment group create
příkazu zahajte nasazení šablon ARM nebo Bicep. Při spuštění tohoto příkazu v kontejneru zvolte název nasazení, který nepřepíše žádná předchozí nasazení, a použijte --no-prompt true
příznaky a --only-show-errors
ujistěte se, že se nasazení nezdaří u žádných upozornění nebo zastavení při čekání na vstup uživatele, jak je znázorněno v následujícím příkladu:
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
Pokud chcete odstranit prostředí, proveďte nasazení v úplném režimu a zadejte prázdnou šablonu ARM, která odebere všechny prostředky v zadané skupině prostředků ADE, jak je znázorněno v následujícím příkladu:
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"
Stav zřizování a podrobnosti můžete zkontrolovat spuštěním následujících příkazů. ADE používá některé speciální funkce ke čtení a poskytování dalšího kontextu na základě podrobností o zřizování, které najdete ve složce Runner-Images . Jednoduchá implementace může být následující:
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
Nakonec, pokud chcete zobrazit výstupy nasazení a předat je službě ADE, abyste je zpřístupnili přes Azure CLI, můžete spustit následující příkazy:
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
Sestavení image kontejneru pomocí skriptu
Místo vytvoření vlastní image a jeho nasdílení do registru kontejneru můžete použít skript k sestavení a nasdílení do zadaného registru kontejneru.
Microsoft poskytuje skript pro rychlý start, který vám pomůže sestavit vlastní image a odeslat ji do registru. Skript sestaví image a nasdílí ji do zadané služby Azure Container Registry (ACR) pod úložištěm ade
a značkou latest
.
Pokud chcete skript použít, musíte:
- Vytvořte složku Dockerfile a skriptů pro podporu modelu rozšiřitelnosti ADE.
- Zadejte název registru a adresář pro vlastní image.
- Nainstalujte Azure CLI a Docker Desktop a do proměnných PATH.
- Máte spuštěnou aplikaci Docker Desktop.
- Mít oprávnění k nasdílení změn do zadaného registru.
Skript si můžete prohlédnout tady.
Skript můžete volat pomocí následujícího příkazu v PowerShellu:
.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'
Kromě toho, pokud chcete nasdílení změn do konkrétního úložiště a názvu značky, můžete spustit:
.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'
Použití imagí kontejneru s ADE
K používání imagí kontejnerů s ADE můžete použít jeden z následujících přístupů:
- Vytvořte image kontejneru s využitím pracovního postupu GitHubu: Pokud chcete začít, můžete použít publikovaný pracovní postup GitHubu z úložiště Využití modelu rozšiřitelnosti ADE s úložištěm Terraform.
- Vytvoření vlastní image kontejneru: Můžete vytvořit pracovní postup, který vytvoří konkrétní image Terraformu přizpůsobenou veškerým softwarem, nastavením a konfigurací, které potřebujete.
Vytvoření image kontejneru pomocí pracovního postupu GitHubu
Vytvoření vlastní image kontejneru umožňuje přizpůsobit nasazení tak, aby vyhovovala vašim požadavkům. Vlastní image můžete vytvářet na základě standardních imagí ADE.
Po dokončení přizpůsobení image musíte image sestavit a odeslat ji do registru kontejneru.
Image můžete sestavit a odeslat ručně nebo pomocí skriptu poskytnutého Microsoftem proces automatizovat.
Publikovaná akce GitHubu pomáhá sestavit a odeslat image do služby Azure Container Registry (ACR). Odkaz na poskytnutý odkaz na image ACR v definici prostředí v ADE můžete použít k nasazení nebo odstranění prostředí s poskytnutou imagí.
Pokud chcete vytvořit image nakonfigurovanou pro ADE, postupujte takto:
- Vytvořte vlastní image založenou na pracovním postupu GitHubu.
- Nainstalujte požadované balíčky.
- Nakonfigurujte skripty prostředí operation shell.
- Vytvořte skripty prostředí operací, které používají Rozhraní příkazového řádku Terraformu.
1. Vytvoření vlastní image založené na pracovním postupu GitHubu
Pomocí publikovaného úložiště můžete využít pracovní postup GitHubu. Úložiště obsahuje komponenty ukázkové image kompatibilní s ADE, včetně souboru Dockerfile a skriptů prostředí pro nasazování a odstraňování prostředí pomocí šablon Terraform IaC. Tento ukázkový kód vám pomůže vytvořit vlastní image kontejneru.
2. Nainstalujte požadované balíčky v tomto kroku a nainstalujte do image všechny balíčky, které potřebujete, včetně Terraformu. Rozhraní příkazového řádku Terraformu můžete nainstalovat do spustitelného umístění, aby ho bylo možné použít ve vašem nasazení a skriptech pro odstranění.
Tady je příklad tohoto procesu, který nainstaluje verzi 1.7.5 rozhraní příkazového řádku Terraformu:
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
Tip
Adresu URL pro stažení pro upřednostňovanou verzi rozhraní příkazového řádku Terraformu můžete získat z verzí Hashicorp.
3. Konfigurace skriptů operačního prostředí
V rámci standardních imagí se operace určují a spouští na základě názvu operace. V současné době se podporují dva podporované názvy operací, které se nasazují a odstraňují.
Pokud chcete nastavit vlastní image tak, aby tuto strukturu využívala, zadejte složku na úrovni pojmenovaných skriptů souboru Dockerfile a zadejte dva soubory, deploy.sh a delete.sh. Skript prostředí deploy se spustí při vytvoření nebo opětovném nasazení vašeho prostředí a skript prostředí pro odstranění se spustí při odstranění prostředí. Příklady skriptů prostředí najdete v úložišti ve složce Runner-Images pro image ARM-Bicep .
Pokud chcete zajistit, aby tyto skripty prostředí byly spustitelné, přidejte do souboru Dockerfile následující řádky:
COPY scripts/* /scripts/
RUN find /scripts/ -type f -iname "*.sh" -exec dos2unix '{}' '+'
RUN find /scripts/ -type f -iname "*.sh" -exec chmod +x {} \;
4. Vytvoření skriptů prostředí operací, které používají Rozhraní příkazového řádku Terraformu
Infrastrukturu nasadíte pomocí Terraformu třemi kroky:
terraform init
– inicializuje Rozhraní příkazového řádku Terraformu k provádění akcí v pracovním adresáři.terraform plan
- vyvíjí plán založený na příchozích souborech infrastruktury Terraformu a proměnných a všech existujících stavových souborech a vyvíjí kroky potřebné k vytvoření nebo aktualizaci infrastruktury zadané v souborech .tf .terraform apply
– použije plán pro vytvoření nové nebo aktualizované stávající infrastruktury v Azure.
Během vstupního bodu základní image se do kontejneru přetáhnou všechny existující soubory stavu a adresář uložený pod proměnnou $ADE_STORAGE
prostředí . Kromě toho všechny parametry nastavené pro aktuální prostředí uložené v proměnné $ADE_OPERATION_PARAMETERS
. Pokud chcete získat přístup k existujícímu souboru stavu a nastavit proměnné v souboru .tfvars.json , spusťte následující příkazy:
EnvironmentState="$ADE_STORAGE/environment.tfstate"
EnvironmentPlan="/environment.tfplan"
EnvironmentVars="/environment.tfvars.json"
echo "$ADE_OPERATION_PARAMETERS" > $EnvironmentVars
Kromě toho, pokud chcete využít oprávnění ADE k nasazení infrastruktury uvnitř vašeho předplatného, musí váš skript při zřizování infrastruktury pomocí poskytovatele Terraform AzureRM použít identitu spravované služby (MSI). Pokud vaše nasazení potřebuje speciální oprávnění k dokončení nasazení, jako jsou například konkrétní role, přiřaďte tato oprávnění identitě typu prostředí projektu, která se používá pro vaše nasazení prostředí. ADE nastaví relevantní proměnné prostředí, jako je klient, tenant a ID předplatného v rámci vstupního bodu základní image, takže spuštěním následujících příkazů zajistěte, aby poskytovatel používal MSI ADE:
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
Pokud máte jiné proměnné, které se mají v šabloně odkazovat, které nejsou zadané v parametrech vašeho prostředí, nastavte proměnné prostředí pomocí předpony TF_VAR. Seznam zadaných proměnných prostředí ADE najdete v referenčních informacích k proměnným azure Deployment Environment CLI. Příkladem těchto příkazů může být;
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
Teď můžete spustit výše uvedené kroky pro inicializaci Rozhraní příkazového řádku Terraformu, vygenerovat plán pro zřizování infrastruktury a použít plán během skriptu nasazení:
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
Během skriptu pro odstranění můžete do generování plánu přidat destroy
příznak, který odstraní existující prostředky, jak je znázorněno v následujícím příkladu:
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
Nakonec, pokud chcete výstupy vašeho nasazení nahrát a zpřístupnit při přístupu k prostředí přes Azure CLI, transformujte výstupní objekt z Terraformu do formátu určeného pro ADE prostřednictvím balíčku JQ. Nastavte hodnotu na proměnnou prostředí $ADE_OUTPUTS, jak je znázorněno v následujícím příkladu:
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
Vytvoření vlastní image
Image můžete sestavit pomocí rozhraní příkazového řádku Dockeru. Ujistěte se, že je na vašem počítači nainstalovaný Modul Dockeru. Pak přejděte do adresáře souboru Dockerfile a spusťte následující příkaz:
docker build . -t {YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}
Pokud například chcete uložit image pod úložištěm v rámci vašeho registru s názvem customImage
, a nahrát ji pomocí verze 1.0.0
značky , spustíte:
docker build . -t {YOUR_REGISTRY}.azurecr.io/customImage:1.0.0
Použití standardní image kontejneru, kterou poskytuje Pulumi
Tým Pulumi poskytuje předem připravenou image, která vám umožní začít, kterou můžete vidět ve složce Runner-Image . Tato image je veřejně dostupná ve službě Docker Hub společnosti Pulumi, pulumi/azure-deployment-environments
takže ji můžete použít přímo z definic prostředí ADE.
Tady je ukázkový soubor environment.yaml , který využívá předem připravenou image:
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
Několik ukázkových definic prostředí najdete ve složce Prostředí.
Vytvoření vlastní image
Vytvoření vlastní image kontejneru umožňuje přizpůsobit nasazení tak, aby vyhovovala vašim požadavkům. Můžete vytvářet vlastní image založené na standardních imagích Pulumi a přizpůsobit je tak, aby splňovaly vaše požadavky. Po dokončení přizpůsobení image musíte image sestavit a odeslat ji do registru kontejneru.
Pokud chcete vytvořit image nakonfigurovanou pro ADE, postupujte takto:
- Vytvořte vlastní image založenou na standardní imagi.
- Nainstalujte požadované balíčky.
- Nakonfigurujte skripty prostředí operation shell.
- Vytvořte skripty prostředí operací, které používají rozhraní příkazového řádku Pulumi.
1. Vytvoření vlastní image založené na standardní imagi
Vytvořte soubor DockerFile, který obsahuje příkaz FROM odkazující na standardní image hostované na Registr artefaktů Microsoft.
Tady je příklad příkazu FROM, který odkazuje na standardní základní image:
FROM mcr.microsoft.com/deployment-environments/runners/core:latest
Tento příkaz načítá naposledy publikovanou základní image a je základem pro vaši vlastní image.
2. Instalace požadovaných balíčků
Rozhraní příkazového řádku Pulumi můžete nainstalovat do spustitelného umístění, aby ho bylo možné použít ve vašich skriptech nasazení a odstraňování.
Tady je příklad tohoto procesu, který nainstaluje nejnovější verzi rozhraní příkazového řádku Pulumi:
RUN apk add curl
RUN curl -fsSL https://get.pulumi.com | sh
ENV PATH="${PATH}:/root/.pulumi/bin"
V závislosti na tom, který programovací jazyk chcete použít pro programy Pulumi, možná budete muset nainstalovat jeden nebo více odpovídajících modulů runtime. Modul runtime Pythonu je již k dispozici v základní imagi.
Tady je příklad instalace Node.js a TypeScriptu:
# install node.js, npm, and typescript
RUN apk add nodejs npm
RUN npm install typescript -g
Standardní image ADE jsou založené na imagi Azure CLI a mají předinstalované balíčky ADE CLI a JQ. Další informace o Azure CLI a balíčku JQ.
Pokud chcete do image nainstalovat další balíčky, které potřebujete, použijte příkaz RUN.
Infrastrukturu nasadíte pomocí nástroje Pulumi čtyřmi kroky:
pulumi login
– připojte se k úložišti stavu, a to buď v místním systému souborů, nebo v Pulumi Cloudu.pulumi stack select
– vytvořte nebo vyberte zásobník, který se má použít pro konkrétní prostředí.pulumi config set
– předání parametrů nasazení jako hodnot konfigurace Pulumipulumi up
– spuštěním nasazení vytvořte novou nebo aktualizovat existující infrastrukturu v Azure.
Během vstupního bodu základní image se do kontejneru přetáhnou všechny existující soubory místního stavu a adresář uložený pod proměnnou $ADE_STORAGE
prostředí . Pokud chcete získat přístup k existujícímu souboru stavu, spusťte následující příkazy:
mkdir -p $ADE_STORAGE
export PULUMI_CONFIG_PASSPHRASE=
pulumi login file://$ADE_STORAGE
Pokud se chcete místo toho přihlásit ke cloudu Pulumi, nastavte přístupový token Pulumi jako proměnnou prostředí a spusťte následující příkazy:
export PULUMI_ACCESS_TOKEN=YOUR_PULUMI_ACCESS_TOKEN
pulumi login
Všechny parametry nastavené pro aktuální prostředí jsou uloženy v proměnné $ADE_OPERATION_PARAMETERS
. Kromě toho se předá ADE_ENVIRONMENT_LOCATION
ADE_RESOURCE_GROUP_NAME
vybraná oblast Azure a název skupiny prostředků a v uvedeném pořadí. Pokud chcete nastavit konfiguraci zásobníku Pulumi, spusťte následující příkazy:
# 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
Kromě toho, pokud chcete využít oprávnění ADE k nasazení infrastruktury uvnitř vašeho předplatného, musí váš skript při zřizování infrastruktury pomocí zprostředkovatele Pulumi Azure Native nebo Azure Classic používat identitu spravované služby ADE (MSI). Pokud vaše nasazení potřebuje speciální oprávnění k dokončení nasazení, jako jsou například konkrétní role, přiřaďte tato oprávnění identitě typu prostředí projektu, která se používá pro vaše nasazení prostředí. ADE nastaví relevantní proměnné prostředí, jako jsou klient, tenant a ID předplatného v rámci vstupního bodu základní image, takže spusťte následující příkazy, které zajistí, aby poskytovatel používal MSI ADE:
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
Teď můžete spuštěním pulumi up
příkazu spustit nasazení:
pulumi up --refresh --yes --config-file $PULUMI_CONFIG_FILE
Během skriptu pro odstranění můžete místo toho spustit destroy
příkaz, jak je znázorněno v následujícím příkladu:
pulumi destroy --refresh --yes --config-file $PULUMI_CONFIG_FILE
Nakonec, pokud chcete výstupy vašeho nasazení nahrát a zpřístupnit při přístupu k prostředí prostřednictvím Azure CLI, transformujte výstupní objekt z Pulumi do formátu určeného pro ADE prostřednictvím balíčku JQ. Nastavte hodnotu na proměnnou prostředí $ADE_OUTPUTS, jak je znázorněno v následujícím příkladu:
stackout=$(pulumi stack output --json | jq -r 'to_entries|.[]|{(.key): {type: "string", value: (.value)}}')
echo "{\"outputs\": ${stackout:-{\}}}" > $ADE_OUTPUTS
Vytvoření vlastní image
Image můžete sestavit pomocí rozhraní příkazového řádku Dockeru. Ujistěte se, že je na vašem počítači nainstalovaný Modul Dockeru. Pak přejděte do adresáře souboru Dockerfile a spusťte následující příkaz:
docker build . -t {YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}
Pokud například chcete uložit image pod úložištěm v rámci vašeho registru s názvem customImage
, a nahrát ji pomocí verze 1.0.0
značky , spustíte:
docker build . -t {YOUR_REGISTRY}.azurecr.io/customImage:1.0.0
Zpřístupnění vlastní image pro ADE
Abyste mohli používat vlastní image, musíte je uložit do registru kontejneru. Můžete použít veřejný registr kontejneru nebo privátní registr kontejneru. Služba Azure Container Registry (ACR) se důrazně doporučuje, protože její úzká integrace s ADE umožňuje publikování image bez povolení veřejného anonymního přístupu k vyžádání změn. Musíte vytvořit vlastní image kontejneru a odeslat ji do registru kontejneru, aby byla dostupná pro použití v ADE.
Image je také možné uložit do jiného registru kontejneru, jako je Docker Hub, ale v takovém případě musí být veřejně přístupná.
Upozornění
Uložení image kontejneru do registru s anonymním (neověřeným) přístupem k vyžádání obsahu zpřístupňuje veřejně. Nedělejte to, pokud váš obrázek obsahuje nějaké citlivé informace. Místo toho ho uložte ve službě Azure Container Registry (ACR) s zakázaným anonymním přístupem k vyžádání změn.
Pokud chcete použít vlastní image uloženou v ACR, musíte zajistit, aby ADE má příslušná oprávnění pro přístup k imagi. Když vytvoříte instanci ACR, je ve výchozím nastavení zabezpečená a umožňuje přístup pouze ověřeným uživatelům.
Pulumi můžete použít k vytvoření služby Azure Container Registry a publikování image do ní. Podívejte se na příklad zřizování nebo vlastní image pro samostatný projekt Pulumi, který vytvoří všechny požadované prostředky ve vašem účtu Azure.
Další informace o jednotlivých přístupech získáte tak, že vyberete příslušnou kartu.
Použití privátního registru se zabezpečeným přístupem
Ve výchozím nastavení je přístup k vyžádání nebo nabízení obsahu ze služby Azure Container Registry dostupný jenom ověřeným uživatelům. Přístup k ACR můžete dále zabezpečit omezením přístupu z určitých sítí a přiřazením konkrétních rolí.
Pokud chcete vytvořit instanci služby ACR, kterou můžete provést prostřednictvím Azure CLI, webu Azure Portal, příkazů PowerShellu a dalších, postupujte podle jednoho z rychlých startů.
Omezení síťového přístupu
Pokud chcete zabezpečit síťový přístup k ACR, můžete omezit přístup k vlastním sítím nebo zakázat přístup k veřejné síti úplně. Pokud omezíte přístup k síti, musíte povolit výjimku brány firewall Povolit důvěryhodné služby Microsoft pro přístup k tomuto registru kontejneru.
Zakázání přístupu z veřejných sítí:
Na webu Azure Portal přejděte na službu ACR, kterou chcete nakonfigurovat.
V nabídce vlevo v části Nastavení vyberte Sítě.
Na stránce Sítě na kartě Veřejný přístup v části Přístup k veřejné síti vyberte Zakázáno.
V části Výjimka brány firewall zaškrtněte políčko Povolit důvěryhodným služby Microsoft přístup k tomuto registru kontejneru a pak vyberte Uložit.
Přiřazení role AcrPull
Vytváření prostředí pomocí imagí kontejnerů používá infrastrukturu ADE, včetně projektů a typů prostředí. Každý projekt má jeden nebo více typů prostředí projektu, které potřebují přístup pro čtení k imagi kontejneru, která definuje prostředí, které se má nasadit. Pokud chcete bezpečně přistupovat k imagím v ACR, přiřaďte roli AcrPull jednotlivým typům prostředí projektu.
Přiřazení role AcrPull k typu prostředí projektu:
Na webu Azure Portal přejděte na službu ACR, kterou chcete nakonfigurovat.
V nabídce vlevo vyberte Řízení přístupu (IAM).
Vyberte Přidat>Přidat přiřazení role.
Přiřaďte následující roli. Podrobný postup najdete v tématu Přiřazování rolí Azure s využitím webu Azure Portal.
Nastavení Hodnota Role Vyberte AcrPull. Přiřazení přístupu k Vyberte Uživatele, skupinu nebo instanční objekt. Členové Zadejte název typu prostředí projektu, který potřebuje přístup k imagi v kontejneru. Typ prostředí projektu se zobrazí jako v následujícím příkladu:
V této konfiguraci ADE používá spravovanou identitu pro PET bez ohledu na to, jestli je systém přiřazený nebo přiřazený uživatelem.
Tip
Toto přiřazení role musí být provedeno pro každý typ prostředí projektu. Je možné ho automatizovat prostřednictvím Azure CLI.
Až budete připraveni odeslat image do registru, spusťte následující příkaz:
docker push {YOUR_REGISTRY}.azurecr.io/{YOUR_IMAGE_LOCATION}:{YOUR_TAG}
Připojení image k definici prostředí
Při vytváření definic prostředí pro použití vlastní image v jejich nasazení upravte runner
vlastnost v souboru manifestu (environment.yaml nebo manifest.yaml).
runner: "{YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}"
Další informace o vytváření definic prostředí, které používají image kontejneru ADE k nasazení prostředků Azure, najdete v tématu Přidání a konfigurace definice prostředí.