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
- Een Azure-account met een actief abonnement. Gratis een account maken
- Azure Deployment Environments die zijn ingesteld in uw Azure-abonnement.
- Als u ADE wilt instellen, volgt u de quickstart: Azure Deployment Environments configureren.
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 installatiekopieën maken met behulp van een script
- Handmatig een aangepaste installatiekopieën 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:
- Maak een aangepaste installatiekopieën op basis van een standaardinstallatiekopieën.
- Installeer de gewenste pakketten.
- Configureer bewerkingsshellscripts.
- 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:
- ADE-parameters converteren naar ARM-acceptabele parameters
- Gekoppelde sjablonen oplossen als ze worden gebruikt in de implementatie
- 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:
- Maak een Dockerfile- en scriptsmap ter ondersteuning van het ADE-uitbreidbaarheidsmodel.
- Geef een registernaam en map op voor uw aangepaste installatiekopieën.
- Laat de Azure CLI en Docker Desktop zijn geïnstalleerd en in uw PATH-variabelen.
- Laat Docker Desktop worden uitgevoerd.
- 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:
- Een aangepaste installatiekopieën maken op basis van een GitHub-werkstroom.
- Installeer de gewenste pakketten.
- Configureer bewerkingsshellscripts.
- 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:
terraform init
- initialiseert de Terraform CLI om acties uit te voeren in de werkmapterraform 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-bestandenterraform 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 customImage
en wilt uploaden met de tagversie, 1.0.0
voert 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-environments
zodat 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:
- Maak een aangepaste installatiekopieën op basis van een standaardinstallatiekopieën.
- Installeer de gewenste pakketten.
- Configureer bewerkingsshellscripts.
- 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:
pulumi login
- verbinding maken met de statusopslag, hetzij in het lokale bestandssysteem of in Pulumi Cloudpulumi stack select
- maak of selecteer de stack die moet worden gebruikt voor de specifieke omgevingpulumi config set
- implementatieparameters doorgeven als Pulumi-configuratiewaardenpulumi 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 customImage
en wilt uploaden met de tagversie, 1.0.0
voert 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:
Maak een ACR-exemplaar of gebruik een bestaand exemplaar.
Ga in Azure Portal naar de ACR die u wilt configureren.
Selecteer Netwerken in het linkermenu onder Instellingen.
Selecteer Uitgeschakeld op de pagina Netwerken op het tabblad Openbare toegang onder Openbare netwerktoegang.
Controleer onder Firewall-uitzondering of Vertrouwde Microsoft-services toegang tot dit containerregister toestaan is geselecteerd en selecteer vervolgens Opslaan.
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:
Ga in Azure Portal naar de ACR die u wilt configureren.
Selecteer toegangsbeheer (IAM) in het linkermenu.
Selecteer Toevoegen>Roltoewijzing toevoegen.
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:
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.