Containerinstallatiekopieën configureren voor het uitvoeren van implementaties met ARM en Bicep
In dit artikel leert u hoe u aangepaste Azure Resource Manager-installatiekopieën (ARM) en Bicep-containerinstallatiekopieën bouwt om uw omgevingsdefinities te implementeren in Azure Deployment Environments (ADE).
Een omgevingsdefinitie bestaat uit ten minste twee bestanden: een sjabloonbestand, zoals azuredeploy.json of main.bicep, en een manifestbestand met de naam environment.yaml. ADE maakt gebruik van containers voor het implementeren van omgevingsdefinities en biedt systeemeigen ondersteuning voor de ARM- en Bicep IaC-frameworks.
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.
Het ADE-team biedt een selectie van installatiekopieën om u op weg te helpen, waaronder een kerninstallatiekopieën en een Arm-/Bicep-installatiekopieën (Azure Resource Manager). U kunt deze voorbeeldafbeeldingen openen in de map Runner-Images .
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 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: Een ontwikkelaarscentrum maken en configureren voor Azure Deployment Environments.
Een Docker-installatiekopieën maken en bouwen
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.
Voer de volgende stappen uit om een installatiekopieën te bouwen die zijn geconfigureerd voor ADE:
- Baseer uw afbeelding op een voorbeeldafbeelding van ADE of de afbeelding van uw keuze met behulp van de FROM-instructie.
- Installeer alle benodigde pakketten voor uw installatiekopie met behulp van de RUN-instructie.
- 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.
- Bouw en push uw installatiekopieën naar uw containerregister en zorg ervoor dat deze toegankelijk is voor ADE.
- 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.
Bicep installeren in een Dockerfile
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 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 ontwerpen voor het implementeren van ARM- of Bicep-sjablonen
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
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 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 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:
- Configureer 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.
- 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:
Meld u aan bij de ontwikkelaarsportal.
Identificeer de omgeving die niet kan worden geïmplementeerd en selecteer Details weergeven.
Bekijk de foutdetails in de sectie Foutdetails .
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}
Gerelateerde inhoud
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor