Share via


Een containerinstallatiekopieën configureren voor het uitvoeren van implementaties met Terraform

In dit artikel leert u hoe u aangepaste Terraform-containerinstallatiekopieën bouwt om uw omgevingsdefinities te implementeren in Azure Deployment Environments (ADE). U leert hoe u een aangepaste installatiekopie configureert om infrastructuur in te richten met behulp van het Terraform IaC-framework (Infrastructure-as-Code).

Een omgevingsdefinitie bestaat uit ten minste twee bestanden: een sjabloonbestand, zoals main.tf, en een manifestbestand met de naam environment.yaml. U gebruikt een container om een omgevingsdefinitie te implementeren die gebruikmaakt van Terraform.

Met het ADE-uitbreidbaarheidsmodel kunt u aangepaste containerinstallatiekopieën maken voor gebruik met uw omgevingsdefinities. Met behulp van het uitbreidbaarheidsmodel kunt u uw eigen aangepaste containerinstallatiekopieën maken en opslaan in een containerregister, zoals DockerHub. U kunt vervolgens verwijzen naar deze installatiekopieën in uw omgevingsdefinities om uw omgevingen te implementeren.

De ADE CLI is een hulpprogramma waarmee u aangepaste installatiekopieën kunt maken met behulp van ADE-basisinstallatiekopieën. U kunt de ADE CLI gebruiken om uw implementaties en verwijderingen aan te passen aan uw werkstroom. De ADE CLI is vooraf geïnstalleerd op de voorbeeldafbeeldingen. Zie de referentie voor aangepaste Runner-installatiekopieën van CLI voor meer informatie over de ADE CLI.

Vereisten

Een Docker-installatiekopieën maken en bouwen met behulp van Terraform

In dit voorbeeld leert u hoe u een Docker-installatiekopieën bouwt om ADE-implementaties te gebruiken en toegang te krijgen tot de ADE CLI, waarbij uw installatiekopieën worden gebaseerd op een van de door ADE geschreven installatiekopieën.

Voer de volgende stappen uit om een installatiekopieën te bouwen die zijn geconfigureerd voor ADE:

  1. Baseer uw afbeelding op een voorbeeldafbeelding van ADE of de afbeelding van uw keuze met behulp van de FROM-instructie.
  2. Installeer alle benodigde pakketten voor uw installatiekopie met behulp van de RUN-instructie.
  3. Maak een map met scripts op hetzelfde niveau als uw Dockerfile, sla uw deploy.sh en delete.sh bestanden erin op en zorg ervoor dat deze scripts detecteerbaar en uitvoerbaar zijn in de gemaakte container. Deze stap is nodig om uw implementatie te laten werken met behulp van de ADE-kerninstallatiekopieën.
  4. Bouw en push uw installatiekopieën naar uw containerregister en zorg ervoor dat deze toegankelijk is voor ADE.
  5. Verwijs naar uw afbeelding in de runner eigenschap van uw omgevingsdefinitie.

Selecteer een voorbeeld van een containerinstallatiekopie met behulp van de FROM-instructie

Neem een FROM-instructie op in een gemaakte DockerFile voor uw nieuwe installatiekopie die verwijst naar een voorbeeldinstallatiekopie die wordt gehost op Microsoft-artefactregister.

Hier volgt een voorbeeld van een FROM-instructie, die verwijst naar de voorbeeldkernafbeelding:

FROM mcr.microsoft.com/deployment-environments/runners/core:latest

Met deze instructie wordt de laatst gepubliceerde basisinstallatiekopie opgehaald en wordt deze een basis voor uw aangepaste installatiekopie.

Terraform installeren in een Dockerfile

U kunt de Terraform CLI installeren op een uitvoerbare locatie, zodat deze kan worden gebruikt in uw implementatie- en verwijderingsscripts.

Hier volgt een voorbeeld van dat proces, waarbij versie 1.7.5 van de Terraform CLI wordt geïnstalleerd:

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

U kunt de download-URL voor uw favoriete versie van de Terraform CLI ophalen uit Hashicorp-releases.

De ADE-voorbeeldinstallatiekopieën zijn gebaseerd op de Azure CLI-installatiekopieën en hebben de ADE CLI- en JQ-pakketten vooraf geïnstalleerd. Meer informatie over de Azure CLI en het JQ-pakket.

Als u meer pakketten wilt installeren die u nodig hebt in uw installatiekopie, gebruikt u de RUN-instructie.

Operation Shell-scripts uitvoeren

In de voorbeeldafbeeldingen worden bewerkingen bepaald en uitgevoerd op basis van de naam van de bewerking. Momenteel worden de twee ondersteunde bewerkingsnamen geïmplementeerd en verwijderd.

Als u uw aangepaste installatiekopieën wilt instellen om deze structuur te gebruiken, geeft u een map op het niveau van uw Dockerfile met de naam scripts op en geeft u twee bestanden op, deploy.sh en delete.sh. Het implementatieshell-script wordt uitgevoerd wanneer uw omgeving wordt gemaakt of opnieuw wordt geïmplementeerd en het shell-script verwijderen wordt uitgevoerd wanneer uw omgeving wordt verwijderd. U ziet voorbeelden van shellscripts in de opslagplaats onder de map Runner-Images voor de ARM-Bicep-installatiekopie .

Voeg de volgende regels toe aan uw Dockerfile om ervoor te zorgen dat deze shellscripts uitvoerbaar zijn:

COPY scripts/* /scripts/
RUN find /scripts/ -type f -iname "*.sh" -exec dos2unix '{}' '+'
RUN find /scripts/ -type f -iname "*.sh" -exec chmod +x {} \;

Bewerkingsshellscripts maken voor het gebruik van de Terraform CLI

Er zijn drie stappen voor het implementeren van infrastructuur via Terraform:

  1. terraform init - initialiseert de Terraform CLI om acties uit te voeren in de werkmap
  2. terraform plan- ontwikkelt een plan op basis van de binnenkomende Terraform-infrastructuurbestanden en -variabelen, en eventuele bestaande statusbestanden, en ontwikkelt stappen die nodig zijn om een infrastructuur te maken of bij te werken die is opgegeven in de TF-bestanden
  3. terraform apply - past het plan toe om een nieuwe of bestaande infrastructuur in Azure te maken of bij te werken

Tijdens het ingangspunt van de kerninstallatiekopie worden alle bestaande statusbestanden naar de container gehaald en wordt de map opgeslagen onder de omgevingsvariabele $ADE_STORAGE. Daarnaast worden alle parameters die zijn ingesteld voor de huidige omgeving die is opgeslagen onder de variabele $ADE_OPERATION_PARAMETERS. Voer de volgende opdrachten uit om toegang te krijgen tot het bestaande statusbestand en uw variabelen in te stellen binnen een .tfvars.json-bestand :

EnvironmentState="$ADE_STORAGE/environment.tfstate"
EnvironmentPlan="/environment.tfplan"
EnvironmentVars="/environment.tfvars.json"

echo "$ADE_OPERATION_PARAMETERS" > $EnvironmentVars

Als u bovendien ADE-bevoegdheden wilt gebruiken om infrastructuur in uw abonnement te implementeren, moet uw script de Managed Service Identity (MSI) gebruiken bij het inrichten van de infrastructuur met behulp van de Terraform AzureRM-provider. Als uw implementatie speciale machtigingen nodig heeft om uw implementatie te voltooien, zoals bepaalde rollen, wijst u deze machtigingen toe aan de identiteit van het projectomgevingstype die wordt gebruikt voor de implementatie van uw omgeving. ADE stelt de relevante omgevingsvariabelen in, zoals de client-, tenant- en abonnements-id's in het toegangspunt van de kerninstallatiekopieën. Voer daarom de volgende opdrachten uit om ervoor te zorgen dat de provider gebruikmaakt van de 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

Als u andere variabelen hebt waarnaar moet worden verwezen in uw sjabloon die niet zijn opgegeven in de parameters van uw omgeving, stelt u omgevingsvariabelen in met behulp van het voorvoegsel TF_VAR. Er wordt een lijst met opgegeven ADE-omgevingsvariabelen opgegeven voor Azure Deployment Environment CLI-variabelen. Een voorbeeld van deze opdrachten kan zijn;

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

U kunt nu de eerder vermelde stappen uitvoeren om de Terraform CLI te initialiseren, een plan voor de inrichtingsinfrastructuur te genereren en een plan toe te passen tijdens uw implementatiescript:

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

Tijdens het verwijderingsscript kunt u de destroy vlag toevoegen aan het genereren van uw plan om de bestaande resources te verwijderen, zoals wordt weergegeven in het volgende voorbeeld:

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

Ten slotte transformeert u het uitvoerobject van Terraform naar de door ADE opgegeven indeling via het JQ-pakket om de uitvoer van uw implementatie te uploaden en toegankelijk te maken voor toegang tot uw omgeving via de Azure CLI. Stel de waarde in op de omgevingsvariabele $ADE_OUTPUTS, zoals wordt weergegeven in het volgende voorbeeld:

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

De installatiekopie bouwen

Voordat u de installatiekopieën bouwt die naar uw register moeten worden gepusht, moet u ervoor zorgen dat de Docker Engine op uw computer is geïnstalleerd . Navigeer vervolgens naar de map van uw Dockerfile en voer de volgende opdracht uit:

docker build . -t {YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}

Als u bijvoorbeeld uw installatiekopieën wilt opslaan onder een opslagplaats in het register met de naam customImageen wilt uploaden met de tagversie, 1.0.0voert u het volgende uit:

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

De Docker-installatiekopieën naar een register pushen

Als u aangepaste installatiekopieën wilt gebruiken, moet u een openbaar toegankelijk installatiekopieregister instellen met anonieme pull-installatiekopie ingeschakeld. Op deze manier hebben Azure Deployment Environments toegang tot uw aangepaste installatiekopieën die in onze container kunnen worden uitgevoerd.

Azure Container Registry is een Azure-aanbieding waarin containerinstallatiekopieën en vergelijkbare artefacten worden opgeslagen.

Volg een van de quickstarts om een register te maken dat kan worden uitgevoerd via de Azure CLI, Azure Portal, PowerShell-opdrachten en meer.

Voer de volgende opdrachten uit in de Azure CLI om uw register in te stellen voor het ophalen van anonieme installatiekopieën:

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

Wanneer u klaar bent om uw installatiekopieën naar uw register te pushen, voert u de volgende opdracht uit:

docker push {YOUR_REGISTRY}.azurecr.io/{YOUR_IMAGE_LOCATION}:{YOUR_TAG}

Verbinding maken de installatiekopieën naar uw omgevingsdefinitie

Wanneer u omgevingsdefinities maakt voor het gebruik van uw aangepaste installatiekopieën in de implementatie, bewerkt u de runner eigenschap in het manifestbestand (environment.yaml of manifest.yaml).

runner: "{YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}"

Een containerinstallatiekopieën bouwen met een script

Microsoft biedt een snelstartscript om u te helpen aan de slag te gaan. Het script bouwt uw installatiekopieën en pusht deze naar een opgegeven Azure Container Registry (ACR) onder de opslagplaats ade en de tag latest.

Als u het script wilt gebruiken, moet u het volgende doen:

  1. Configureer een dockerfile- en scriptsmap ter ondersteuning van het ADE-uitbreidbaarheidsmodel.
  2. Geef een registernaam en map op voor uw aangepaste installatiekopieën.
  3. Laat de Azure CLI en Docker Desktop zijn geïnstalleerd en in uw PATH-variabelen.
  4. Machtigingen hebben om naar het opgegeven register te pushen.

U kunt het script hier uitvoeren.

U kunt het script aanroepen met behulp van de volgende opdracht in PowerShell:

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'

Als u bovendien wilt pushen naar een specifieke opslagplaats en tagnaam, kunt u het volgende uitvoeren:

.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'

Toegang tot bewerkingslogboeken en foutdetails

ADE slaat foutdetails op voor een mislukte implementatie in het bestand $ADE_ERROR_LOG in de container.

Problemen met een mislukte implementatie oplossen:

  1. Meld u aan bij de ontwikkelaarsportal.

  2. Identificeer de omgeving die niet kan worden geïmplementeerd en selecteer Details weergeven.

    Schermopname van foutdetails van mislukte implementatie, met name een ongeldige naam voor een opslagaccount.

  3. Bekijk de foutdetails in de sectie Foutdetails .

    Schermopname van een mislukte implementatie van een omgeving met de knop Details weergeven weergegeven.

Daarnaast kunt u de Azure CLI gebruiken om de foutdetails van een omgeving weer te geven met behulp van de volgende opdracht:

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

Als u de bewerkingslogboeken voor een omgevingsimplementatie of verwijdering wilt weergeven, gebruikt u de Azure CLI om de meest recente bewerking voor uw omgeving op te halen en bekijkt u vervolgens de logboeken voor die bewerkings-id.

# 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}