Sdílet prostřednictvím


Konfigurace image kontejneru pro spouštění nasazení pomocí ARM a Bicep

V tomto článku se dozvíte, jak vytvořit vlastní image kontejnerů Azure Resource Manageru (ARM) a Bicep pro nasazení definic prostředí v prostředích nasazení Azure (ADE).

Definice prostředí zahrnuje alespoň dva soubory: soubor šablony, například azuredeploy.json nebo main.bicep, a soubor manifestu s názvem environment.yaml. ADE používá kontejnery k nasazení definic prostředí a nativně podporuje architektury ARM a Bicep IaC.

Model rozšiřitelnosti ADE umožňuje vytvářet vlastní image kontejnerů pro použití s definicemi prostředí. Pomocí modelu rozšiřitelnosti můžete vytvořit vlastní image kontejnerů a uložit je do registru kontejneru, jako je DockerHub. Na tyto image pak můžete odkazovat v definicích prostředí a nasadit tak vaše prostředí.

Tým ADE nabízí výběr imagí, které vám pomůžou začít, včetně základní image, a image Azure Resource Manageru (ARM)/Bicep. K těmto ukázkovým obrázkům se dostanete ve složce Runner-Images .

Požadavky

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 Bicep, kterou poskytuje ADE.
  • Vytvoření vlastní image kontejneru: Pro složitější scénáře vytvořte vlastní image kontejneru, která splňuje vaše konkrétní požadavky.

Bez ohledu na to, který přístup zvolíte, musíte zadat image kontejneru v definici prostředí pro nasazení prostředků Azure.

Použití standardní image kontejneru Bicep

ADE nativně podporuje Bicep, takže můžete nakonfigurovat definici prostředí, která nasadí prostředky Azure pro prostředí nasazení přidáním souborů šablon (azuredeploy.json a environment.yaml) do katalogu. ADE pak pomocí standardní image kontejneru Bicep vytvoří prostředí nasazení.

V souboru environment.yaml vlastnost runner určuje umístění image kontejneru, kterou chcete použít. Pokud chcete použít ukázkový obrázek publikovaný na Registr artefaktů Microsoft, použijte příslušný spouštěč identifikátorů, jak je uvedeno v následující tabulce.

Následující příklad ukazuje spouštěč, který odkazuje na ukázkovou image kontejneru 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í v ukázkové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 Bicep

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í kontejneru ADE.

Po dokončení přizpůsobení image musíte image sestavit a odeslat ji do registru kontejneru.

Vytvoření a přizpůsobení image kontejneru pomocí Dockeru

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.

Rozhraní příkazového řádku ADE je nástroj, který umožňuje vytvářet vlastní image pomocí základních imagí ADE. Pomocí rozhraní příkazového řádku ADE můžete přizpůsobit nasazení a odstranění tak, aby vyhovovaly vašemu pracovnímu postupu. Rozhraní příkazového řádku ADE je předinstalované na ukázkový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.

Pokud chcete vytvořit image nakonfigurovanou pro ADE, postupujte takto:

  1. Založte obrázek na ukázkovém obrázku vytvořeném pomocí ADE nebo vybraného obrázku pomocí příkazu FROM.
  2. Pomocí příkazu RUN nainstalujte všechny potřebné balíčky pro image.
  3. Vytvořte složku skriptů na stejné úrovni jako soubor Dockerfile, uložte do něj soubory deploy.sh a delete.sh a zajistěte, aby tyto skripty byly zjistitelné a spustitelné uvnitř vytvořeného kontejneru. Tento krok je nezbytný k tomu, aby nasazení fungovalo pomocí základní image ADE.

Výběr ukázkové image kontejneru pomocí příkazu FROM

Do vytvořeného souboru DockerFile pro novou image odkazující na ukázkovou image hostované v Registr artefaktů Microsoft zahrňte příkaz FROM.

Tady je příklad příkazu FROM, který odkazuje na ukázkový základní obrázek:

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.

Instalace Bicep do souboru Dockerfile

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

Ukázkové 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.

Spouštění skriptů operačního prostředí

V rámci ukázkový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 {} \;

Vytváření skriptů prostředí operací 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

Zpřístupnění vlastní image pro ADE

Musíte sestavit image Dockeru a odeslat ji do registru kontejneru, aby byla dostupná pro použití v ADE. Image můžete sestavit pomocí Rozhraní příkazového řádku Dockeru nebo pomocí skriptu, který poskytuje ADE.

Další informace o jednotlivých přístupech získáte tak, že vyberete příslušnou kartu.

Než sestavíte image, která se má odeslat do registru, ujistěte se, že je na vašem počítači nainstalovaný modul Docker. 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.0značky , spustíte:

docker build . -t {YOUR_REGISTRY}.azurecr.io/customImage:1.0.0

Nasdílení image Dockeru do registru

Abyste mohli používat vlastní image, musíte nastavit veřejně přístupný registr imagí s povoleným anonymním vyžádáním image. Prostředí nasazení Azure tak mají přístup k vaší vlastní imagi, aby se spustila v našem kontejneru.

Azure Container Registry je nabídka Azure, která ukládá image kontejnerů a podobné artefakty.

Pokud chcete vytvořit registr, který je možné provést prostřednictvím Azure CLI, webu Azure Portal, příkazů PowerShellu a dalších, postupujte podle některého z rychlých startů.

Pokud chcete nastavit registr tak, aby byl povolený anonymní vyžádání image, spusťte v Azure CLI následující příkazy:

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

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í.

Protokoly operací přístupu a podrobnosti o chybách

ADE ukládá podrobnosti o chybě neúspěšného nasazení do souboru $ADE_ERROR_LOG v rámci kontejneru.

Řešení potíží s neúspěšným nasazením:

  1. Přihlaste se k portálu pro vývojáře.

  2. Určete prostředí, které se nepodařilo nasadit, a vyberte Zobrazit podrobnosti.

    Snímek obrazovky s podrobnostmi o chybě neúspěšného nasazení, konkrétně neplatným názvem účtu úložiště

  3. Projděte si podrobnosti o chybě v části Podrobnosti o chybě.

    Snímek obrazovky znázorňující neúspěšné nasazení prostředí se zobrazeným tlačítkem Zobrazit podrobnosti

Kromě toho můžete pomocí Azure CLI zobrazit podrobnosti o chybě prostředí pomocí následujícího příkazu:

az devcenter dev environment show --environment-name {YOUR_ENVIRONMENT_NAME} --project {YOUR_PROJECT_NAME}

Pokud chcete zobrazit protokoly operací pro nasazení nebo odstranění prostředí, pomocí Azure CLI načtěte nejnovější operaci pro vaše prostředí a pak zobrazte protokoly pro toto ID operace.

# Get list of operations on the environment, choose the latest operation
az devcenter dev environment list-operation --environment-name {YOUR_ENVIRONMENT_NAME} --project {YOUR_PROJECT_NAME}
# Using the latest operation ID, view the operation logs
az devcenter dev environment show-logs-by-operation --environment-name {YOUR_ENVIRONMENT_NAME} --project {YOUR_PROJECT_NAME} --operation-id {LATEST_OPERATION_ID}