Delen via


Containerinstallatiekopieën configureren om implementaties uit te voeren

Azure Deployment Environments (ADE) ondersteunt een uitbreidbaarheidsmodel waarmee u uw omgevingsdefinitie kunt configureren met het IaC-sjabloonframework van uw voorkeur. U kunt aangepaste installatiekopieën opslaan in een containerregister, zoals Azure Container Registry (ACR) of Docker Hub, en deze vervolgens in uw omgevingsdefinities raadplegen om omgevingen te implementeren.

In dit artikel leert u hoe u aangepaste Bicep-containerinstallatiekopieën bouwt om uw omgevingsdefinities in ADE te implementeren. U leert hoe u een standaardinstallatiekopie van Microsoft gebruikt of hoe u een aangepaste infrastructuur voor het inrichten van installatiekopieën configureert met behulp van het Bicep Infrastructure-as-Code-framework (IaC).

In dit artikel leert u hoe u aangepaste Terraform-containerinstallatiekopieën bouwt om implementatieomgevingen te maken met 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).

In dit artikel leert u hoe u Pulumi gebruikt voor implementaties in ADE. U leert hoe u een standaardinstallatiekopie van Pulumi gebruikt of hoe u een aangepaste installatiekopie configureert om infrastructuur in te richten met behulp van het IaC-framework (Infrastructure-as-Code).

Vereisten

Containerinstallatiekopieën gebruiken met ADE

U kunt een van de volgende methoden gebruiken om containerinstallatiekopieën met ADE te gebruiken:

  • Gebruik een standaardcontainerinstallatiekopieën voor eenvoudige scenario's de standaard ARM-Bicep-containerinstallatiekopieën die door ADE worden geleverd.
  • Maak een aangepaste containerinstallatiekopieën Voor complexere scenario's maakt u een aangepaste containerinstallatiekopieën die voldoen aan uw specifieke vereisten.

Een standaardcontainerinstallatiekopieën gebruiken

ADE ondersteunt Arm (Azure Resource Manager) en Bicep zonder extra configuratie. U kunt een omgevingsdefinitie maken waarmee Azure-resources voor een implementatieomgeving worden geïmplementeerd door de sjabloonbestanden (zoals azuredeploy.json en environment.yaml) toe te voegen aan uw catalogus. ADE gebruikt vervolgens de standaard ARM-Bicep-containerinstallatiekopieën om de implementatieomgeving te maken.

In het bestand environment.yaml geeft de runner eigenschap de locatie op van de containerinstallatiekopieën die u wilt gebruiken. Als u de standaardinstallatiekopieën wilt gebruiken die op de Microsoft-artefactregister is gepubliceerd, gebruikt u de respectieve id'srunner.

In het volgende voorbeeld ziet u een runner afbeelding die verwijst naar de standaard-ARM-Bicep-containerinstallatiekopieën:

    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

U ziet de standaard-Bicep-containerinstallatiekopieën in de standaardopslagplaats van ADE onder de map Runner-Images voor de ARM-Bicep-installatiekopieën .

Zie Een omgevingsdefinitie toevoegen en configureren voor meer informatie over het maken van omgevingsdefinities die gebruikmaken van de ADE-containerinstallatiekopieën om uw Azure-resources te implementeren.

Een aangepaste containerinstallatiekopie maken

Een aangepaste containerinstallatiekopieën maken met behulp van een script

Door een aangepaste containerinstallatiekopieën te maken, kunt u uw implementaties aanpassen aan uw vereisten. U kunt aangepaste installatiekopieën maken op basis van de ADE-standaardinstallatiekopieën.

Nadat u de aanpassing van de installatiekopieën hebt voltooid, kunt u de installatiekopieën bouwen en naar uw containerregister pushen met behulp van een script van Microsoft om het proces te automatiseren.

U bouwt aangepaste installatiekopieën met behulp van de standaard ADE-installatiekopieën als basis met ADE CLI, die vooraf is geïnstalleerd op de standaardinstallatiekopieën. Zie de referentie voor aangepaste Runner-installatiekopieën van CLI voor meer informatie over de ADE CLI.

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 u uw installatiekopieën kunt baseren op een van de door ADE geschreven installatiekopieën.

Als u een installatiekopieën wilt maken die is geconfigureerd voor ADE, voert u de volgende stappen uit:

  1. Maak een aangepaste installatiekopieën op basis van een standaardinstallatiekopieën.
  2. Installeer de gewenste pakketten.
  3. Configureer bewerkingsshellscripts.
  4. Maak bewerkingsshellscripts voor het implementeren van ARM- of Bicep-sjablonen.

1. Een aangepaste installatiekopieën maken op basis van een standaardinstallatiekopieën

Maak een DockerFile met een FROM-instructie die verwijst naar een standaardinstallatiekopie die wordt gehost op Microsoft-artefactregister.

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

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.

2. Vereiste pakketten installeren

In deze stap installeert u alle pakketten die u nodig hebt in uw installatiekopieën, inclusief Bicep. U kunt het Bicep-pakket installeren met de Azure CLI met behulp van de RUN-instructie, zoals wordt weergegeven in het volgende voorbeeld:

RUN az bicep install

De standaardinstallatiekopieën van ADE 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.

3. Bewerkingsshellscripts configureren

In de standaardinstallatiekopieën 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 {} \;

4. Bewerkingsshellscripts maken om ARM- of Bicep-sjablonen te implementeren

Om ervoor te zorgen dat u de ARM- of Bicep-infrastructuur via ADE kunt implementeren, moet u het volgende doen:

  1. ADE-parameters converteren naar ARM-acceptabele parameters
  2. Gekoppelde sjablonen oplossen als ze worden gebruikt in de implementatie
  3. Bevoegde beheerde identiteit gebruiken om de implementatie uit te voeren

Tijdens het ingangspunt van de kerninstallatiekopieën worden alle parameters die zijn ingesteld voor de huidige omgeving, opgeslagen onder de variabele $ADE_OPERATION_PARAMETERS. Als u ze wilt converteren naar ARM-acceptabele parameters, kunt u de volgende opdracht uitvoeren met behulp van 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) }' )

Als u vervolgens gekoppelde sjablonen wilt oplossen die worden gebruikt in een op ARM JSON gebaseerde sjabloon, kunt u het hoofdsjabloonbestand decompileren, waardoor alle lokale infrastructuurbestanden die in veel Bicep-modules worden gebruikt, worden omgezet. Bouw deze modules vervolgens opnieuw op in één ARM-sjabloon met de gekoppelde sjablonen die zijn ingesloten in de hoofd-ARM-sjabloon als geneste sjablonen. Deze stap is alleen nodig tijdens de implementatiebewerking. Het hoofdsjabloonbestand kan worden opgegeven met behulp van de $ADE_TEMPLATE_FILE set tijdens het invoerpunt van de kerninstallatiekopie en u moet deze variabele opnieuw instellen met het sjabloonbestand dat opnieuw is gecompileerd. Zie het volgende voorbeeld:

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

Gebruik de bevoegde beheerde identiteit die is gekoppeld aan het ADE-projectomgevingstype om de machtigingen op te geven die een implementatie vereist om de implementatie en het verwijderen van resources binnen het abonnement uit te voeren. Als uw implementatie speciale machtigingen nodig heeft om te voltooien, zoals bepaalde rollen, wijst u deze rollen toe aan de identiteit van het projectomgevingstype. Soms is de beheerde identiteit niet onmiddellijk beschikbaar bij het invoeren van de container; u kunt het opnieuw proberen totdat de aanmelding is geslaagd.

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

Voer de az deployment group create opdracht uit om de implementatie van de ARM- of Bicep-sjablonen te starten. Wanneer u deze opdracht uitvoert in de container, kiest u een implementatienaam die geen eerdere implementaties overschrijft en gebruikt u de --no-prompt true en --only-show-errors vlaggen om ervoor te zorgen dat de implementatie niet mislukt bij waarschuwingen of wacht op gebruikersinvoer, zoals wordt weergegeven in het volgende voorbeeld:

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

Als u een omgeving wilt verwijderen, voert u een implementatie in de volledige modus uit en geeft u een lege ARM-sjabloon op, waarmee alle resources in de opgegeven ADE-resourcegroep worden verwijderd, zoals wordt weergegeven in het volgende voorbeeld:

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"

U kunt de inrichtingsstatus en details controleren door de onderstaande opdrachten uit te voeren. ADE gebruikt enkele speciale functies om meer context te lezen en te bieden op basis van de inrichtingsgegevens, die u kunt vinden in de map Runner-Images . Een eenvoudige implementatie kan als volgt zijn:

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

Ten slotte kunt u de volgende opdrachten uitvoeren om de uitvoer van uw implementatie weer te geven en door te geven aan ADE om ze toegankelijk te maken via de 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

Een containerinstallatiekopieën bouwen met een script

In plaats van zelf uw aangepaste installatiekopieën te bouwen en naar een containerregister te pushen, kunt u een script gebruiken om deze te bouwen en naar een opgegeven containerregister te pushen.

Microsoft biedt een snelstartscript om u te helpen uw aangepaste installatiekopieën te bouwen en deze naar een register te pushen. 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. Maak 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. Laat Docker Desktop worden uitgevoerd.
  5. Machtigingen hebben om naar het opgegeven register te pushen.

U kunt het script hier bekijken.

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

Containerinstallatiekopieën gebruiken met ADE

U kunt een van de volgende methoden gebruiken om containerinstallatiekopieën met ADE te gebruiken:

  • Maak een containerinstallatiekopie die gebruikmaakt van een GitHub-werkstroom: Om te beginnen kunt u de gepubliceerde GitHub-werkstroom gebruiken vanuit het Extensibility Model van ADE met Terraform-opslagplaats.
  • Een aangepaste containerinstallatiekopieën maken: u kunt een werkstroom maken waarmee een Terraform-specifieke installatiekopieën worden gemaakt die is aangepast met alle software, instellingen en configuratie die u nodig hebt.

Een containerinstallatiekopieën maken met behulp van een GitHub-werkstroom

Door een aangepaste containerinstallatiekopieën te maken, kunt u uw implementaties aanpassen aan uw vereisten. U kunt aangepaste installatiekopieën maken op basis van de ADE-standaardinstallatiekopieën.

Nadat u de aanpassing van de installatiekopieën hebt voltooid, moet u de installatiekopieën bouwen en naar het containerregister pushen.

U kunt de installatiekopieën handmatig bouwen en pushen, of een script van Microsoft gebruiken om het proces te automatiseren.

De gepubliceerde GitHub Action helpt bij het bouwen en pushen van een installatiekopieën naar een Azure Container Registry (ACR). U kunt verwijzen naar een opgegeven ACR-installatiekopieënkoppeling binnen een omgevingsdefinitie in ADE om een omgeving met de opgegeven installatiekopieën te implementeren of te verwijderen.

Als u een installatiekopieën wilt maken die is geconfigureerd voor ADE, voert u de volgende stappen uit:

  1. Een aangepaste installatiekopieën maken op basis van een GitHub-werkstroom.
  2. Installeer de gewenste pakketten.
  3. Configureer bewerkingsshellscripts.
  4. Bewerkingsshellscripts maken die gebruikmaken van de Terraform CLI.

1. Een aangepaste installatiekopieën maken op basis van een GitHub-werkstroom

Gebruik de gepubliceerde opslagplaats om te profiteren van de GitHub-werkstroom. De opslagplaats bevat ADE-compatibele voorbeeldinstallatiekopieonderdelen, waaronder een Dockerfile- en shellscripts voor het implementeren en verwijderen van omgevingen met behulp van Terraform IaC-sjablonen. Met deze voorbeeldcode kunt u uw eigen containerinstallatiekopieën maken.

2. Installeer vereiste pakketten In deze stap installeert u alle pakketten die u nodig hebt in uw installatiekopieën, inclusief Terraform. 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.

3. Bewerkingsshellscripts configureren

In de standaardinstallatiekopieën 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 in de map scripts voor Terraform.

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 {} \;

4. Bewerkingsshellscripts maken die gebruikmaken 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 :

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

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 aangepaste installatiekopieën bouwen

U kunt uw installatiekopieën bouwen met behulp van de Docker CLI. Zorg ervoor 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

Een standaardcontainerinstallatiekopieën van Pulumi gebruiken

Het Pulumi-team biedt een vooraf samengestelde installatiekopieën om u op weg te helpen, die u kunt zien in de map Runner-Image . Deze installatiekopieën zijn openbaar beschikbaar in de Docker Hub van Pulumi, pulumi/azure-deployment-environmentszodat u deze rechtstreeks vanuit uw ADE-omgevingsdefinities kunt gebruiken.

Hier volgt een voorbeeldbestand environment.yaml dat gebruikmaakt van de vooraf gemaakte installatiekopieën:

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

U vindt een aantal voorbeeldomgevingdefinities in de map Omgevingen.

Een aangepaste installatiekopie maken

Door een aangepaste containerinstallatiekopieën te maken, kunt u uw implementaties aanpassen aan uw vereisten. U kunt aangepaste installatiekopieën maken op basis van de standaardafbeeldingen van Pulumi en deze aanpassen aan uw vereisten. Nadat u de aanpassing van de installatiekopieën hebt voltooid, moet u de installatiekopieën bouwen en naar het containerregister pushen.

Als u een installatiekopieën wilt maken die is geconfigureerd voor ADE, voert u de volgende stappen uit:

  1. Maak een aangepaste installatiekopieën op basis van een standaardinstallatiekopieën.
  2. Installeer de gewenste pakketten.
  3. Configureer bewerkingsshellscripts.
  4. Maak shellscripts voor bewerkingen die gebruikmaken van de Pulumi CLI.

1. Een aangepaste installatiekopieën maken op basis van een standaardinstallatiekopieën

Maak een DockerFile met een FROM-instructie die verwijst naar een standaardinstallatiekopie die wordt gehost op Microsoft-artefactregister.

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

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.

2. Vereiste pakketten installeren

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

Hier volgt een voorbeeld van dat proces, waarbij u de nieuwste versie van de Pulumi CLI installeert:

RUN apk add curl
RUN curl -fsSL https://get.pulumi.com | sh
ENV PATH="${PATH}:/root/.pulumi/bin"

Afhankelijk van de programmeertaal die u wilt gebruiken voor Pulumi-programma's, moet u mogelijk een of meer bijbehorende runtimes installeren. De Python-runtime is al beschikbaar in de basisinstallatiekopieën.

Hier volgt een voorbeeld van het installeren van Node.js en TypeScript:

# install node.js, npm, and typescript
RUN apk add nodejs npm
RUN npm install typescript -g

De standaardinstallatiekopieën van ADE 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.

Er zijn vier stappen voor het implementeren van infrastructuur via Pulumi:

  1. pulumi login - verbinding maken met de statusopslag, hetzij in het lokale bestandssysteem of in Pulumi Cloud
  2. pulumi stack select - maak of selecteer de stack die moet worden gebruikt voor de specifieke omgeving
  3. pulumi config set - implementatieparameters doorgeven als Pulumi-configuratiewaarden
  4. pulumi up - voer de implementatie uit om een nieuwe of bestaande infrastructuur in Azure te maken of bij te werken

Tijdens het ingangspunt van de kerninstallatiekopie worden alle bestaande lokale statusbestanden naar de container gehaald en wordt de map opgeslagen onder de omgevingsvariabele $ADE_STORAGE. Voer de volgende opdrachten uit om toegang te krijgen tot het bestaande statusbestand:

mkdir -p $ADE_STORAGE
export PULUMI_CONFIG_PASSPHRASE=
pulumi login file://$ADE_STORAGE

Als u zich in plaats daarvan wilt aanmelden bij Pulumi Cloud, stelt u uw Pulumi-toegangstoken in als een omgevingsvariabele en voert u de volgende opdrachten uit:

export PULUMI_ACCESS_TOKEN=YOUR_PULUMI_ACCESS_TOKEN
pulumi login

Parameters die zijn ingesteld voor de huidige omgeving, worden opgeslagen onder de variabele $ADE_OPERATION_PARAMETERS. Daarnaast worden de geselecteerde Azure-regio en resourcegroepnaam doorgegeven ADE_ENVIRONMENT_LOCATION en ADE_RESOURCE_GROUP_NAME respectievelijk. Voer de volgende opdrachten uit om de configuratie van uw Pulumi-stack in te stellen:

# 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

Als u bovendien ADE-bevoegdheden wilt gebruiken om infrastructuur in uw abonnement te implementeren, moet uw script gebruikmaken van ADE Managed Service Identity (MSI) bij het inrichten van de infrastructuur met behulp van de Pulumi Azure Native- of Klassieke Azure-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 binnen het toegangspunt van de kerninstallatiekopieën. Voer daarom de volgende opdrachten uit om ervoor te zorgen dat de provider ADE MSI gebruikt:

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

U kunt nu de pulumi up opdracht uitvoeren om de implementatie uit te voeren:

pulumi up --refresh --yes --config-file $PULUMI_CONFIG_FILE

Tijdens het verwijderingsscript kunt u in plaats daarvan de destroy opdracht uitvoeren, zoals wordt weergegeven in het volgende voorbeeld:

pulumi destroy --refresh --yes --config-file $PULUMI_CONFIG_FILE

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

stackout=$(pulumi stack output --json | jq -r 'to_entries|.[]|{(.key): {type: "string", value: (.value)}}')
echo "{\"outputs\": ${stackout:-{\}}}" > $ADE_OUTPUTS

De aangepaste installatiekopieën bouwen

U kunt uw installatiekopieën bouwen met behulp van de Docker CLI. Zorg ervoor 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 aangepaste installatiekopieën beschikbaar maken voor ADE

Als u aangepaste installatiekopieën wilt gebruiken, moet u deze opslaan in een containerregister. U kunt een openbaar containerregister of een privécontainerregister gebruiken. Azure Container Registry (ACR) wordt ten zeerste aanbevolen vanwege de nauwe integratie met ADE, kan de installatiekopie worden gepubliceerd zonder openbare anonieme pull-toegang toe te staan. U moet uw aangepaste containerinstallatiekopieën bouwen en naar een containerregister pushen om deze beschikbaar te maken voor gebruik in ADE.

Het is ook mogelijk om de installatiekopieën op te slaan in een ander containerregister, zoals Docker Hub, maar in dat geval moet deze openbaar toegankelijk zijn.

Let op

Als u de containerinstallatiekopie opslaat in een register met anonieme (niet-geverifieerde) pull-toegang, is deze openbaar toegankelijk. Doe dit niet als uw afbeelding gevoelige informatie bevat. Sla deze in plaats daarvan op in Azure Container Registry (ACR) met anonieme pull-toegang uitgeschakeld.

Als u een aangepaste installatiekopieën wilt gebruiken die is opgeslagen in ACR, moet u ervoor zorgen dat ADE over de juiste machtigingen beschikt om toegang te krijgen tot uw installatiekopieën. Wanneer u een ACR-exemplaar maakt, is deze standaard beveiligd en kunnen geverifieerde gebruikers alleen toegang krijgen.

U kunt Pulumi gebruiken om een Azure Container Registry te maken en uw installatiekopieën ernaar te publiceren. Raadpleeg het voorbeeld van inrichten/aangepaste installatiekopieën voor een zelfstandig Pulumi-project waarmee alle vereiste resources in uw Azure-account worden gemaakt.

Selecteer het juiste tabblad voor meer informatie over elke benadering.

Een privéregister gebruiken met beveiligde toegang

Standaard is toegang tot het ophalen of pushen van inhoud vanuit een Azure Container Registry alleen beschikbaar voor geverifieerde gebruikers. U kunt de toegang tot ACR verder beveiligen door de toegang van bepaalde netwerken te beperken en specifieke rollen toe te wijzen.

Als u een exemplaar van ACR wilt maken, dat kan worden uitgevoerd via de Azure CLI, azure portal, PowerShell-opdrachten en meer, volgt u een van de quickstarts.

Netwerktoegang beperken

Als u de netwerktoegang tot uw ACR wilt beveiligen, kunt u de toegang tot uw eigen netwerken beperken of de toegang tot openbare netwerken volledig uitschakelen. Als u de netwerktoegang beperkt, moet u de firewall-uitzondering vertrouwde Microsoft-services toegang geven tot dit containerregister inschakelen.

Toegang vanuit openbare netwerken uitschakelen:

  1. Maak een ACR-exemplaar of gebruik een bestaand exemplaar.

  2. Ga in Azure Portal naar de ACR die u wilt configureren.

  3. Selecteer Netwerken in het linkermenu onder Instellingen.

  4. Selecteer Uitgeschakeld op de pagina Netwerken op het tabblad Openbare toegang onder Openbare netwerktoegang.

    Schermopname van Azure Portal, met de ACR-netwerkinstellingen, met Openbare toegang en Uitgeschakeld gemarkeerd.

  5. Controleer onder Firewall-uitzondering of Vertrouwde Microsoft-services toegang tot dit containerregister toestaan is geselecteerd en selecteer vervolgens Opslaan.

    Schermopname van de ACR-netwerkinstellingen, met Vertrouwde Microsoft-services toegang geven tot dit containerregister en Opslaan gemarkeerd.

De rol AcrPull toewijzen

Het maken van omgevingen met behulp van containerinstallatiekopieën maakt gebruik van de ADE-infrastructuur, inclusief projecten en omgevingstypen. Elk project heeft een of meer projectomgevingstypen, die leestoegang nodig hebben tot de containerinstallatiekopie die de omgeving definieert die moet worden geïmplementeerd. Als u de installatiekopieën in uw ACR veilig wilt openen, wijst u de AcrPull-rol toe aan elk type projectomgeving.

De AcrPull-rol toewijzen aan het projectomgevingstype:

  1. Ga in Azure Portal naar de ACR die u wilt configureren.

  2. Selecteer toegangsbeheer (IAM) in het linkermenu.

  3. Selecteer Toevoegen>Roltoewijzing toevoegen.

  4. Wijs de volgende rol toe. Raadpleeg Azure-rollen toewijzen met Azure Portal voor informatie over het toewijzen van rollen.

    Instelling Weergegeven als
    - Rol Selecteer AcrPull.
    Toegang toewijzen aan Selecteer Gebruiker, groep of service-principal.
    Leden Voer de naam in van het projectomgevingstype dat toegang nodig heeft tot de installatiekopie in de container.

    Het projectomgevingstype wordt weergegeven zoals in het volgende voorbeeld:

    Schermopname van het deelvenster Leden selecteren, met een lijst met projectomgevingstypen met een deel van de naam gemarkeerd.

In deze configuratie gebruikt ADE de beheerde identiteit voor het PET, ongeacht of het systeem is toegewezen of door de gebruiker is toegewezen.

Tip

Deze roltoewijzing moet worden gemaakt voor elk type projectomgeving. Het kan worden geautomatiseerd via de Azure CLI.

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}

De installatiekopieën verbinden met 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}"

Zie Een omgevingsdefinitie toevoegen en configureren voor meer informatie over het maken van omgevingsdefinities die gebruikmaken van de ADE-containerinstallatiekopieën om uw Azure-resources te implementeren.