Sdílet prostřednictvím


Konfigurace image kontejneru pro spouštění nasazení pomocí Terraformu

V tomto článku se dozvíte, jak vytvořit vlastní image kontejneru Terraform pro nasazení definic prostředí v prostředích nasazení Azure (ADE). Dozvíte se, jak nakonfigurovat vlastní image pro zřizování infrastruktury pomocí architektury Terraform Infrastructure-as-Code (IaC).

Definice prostředí zahrnuje alespoň dva soubory: soubor šablony, jako je main.tf, a soubor manifestu s názvem environment.yaml. Pomocí kontejneru nasadíte definici prostředí, která používá Terraform.

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

Požadavky

Vytvoření vlastní image kontejneru Terraformu

Vytvoření vlastní image kontejneru umožňuje přizpůsobit nasazení tak, aby vyhovovala vašim požadavkům.

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 pro využití nasazení ADE a získat přístup k rozhraní příkazového řádku ADE a založit image na 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 Terraformu v souboru Dockerfile

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.

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 použití Rozhraní příkazového řádku Terraformu

Infrastrukturu nasadíte pomocí Terraformu třemi kroky:

  1. terraform init – inicializuje Rozhraní příkazového řádku Terraformu k provádění akcí v pracovním adresáři.
  2. 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 .
  3. 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_STORAGEprostř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

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 do definice 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}"

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}