Konfigurera containeravbildning för att köra distributioner
Azure Deployment Environments (ADE) stöder en utökningsmodell som gör att du kan konfigurera din miljödefinition med ditt önskade IaC-mallramverk. Du kan lagra anpassade avbildningar i ett containerregister som Azure Container Registry (ACR) eller Docker Hub och sedan referera till dem i miljödefinitionerna för att distribuera miljöer.
I den här artikeln får du lära dig hur du skapar anpassade Bicep-containeravbildningar för att distribuera dina miljödefinitioner i ADE. Du lär dig hur du använder en standardbild från Microsoft eller hur du konfigurerar en infrastruktur för anpassad avbildningsetablering med hjälp av ramverket Bicep Infrastructure-as-Code (IaC).
I den här artikeln får du lära dig hur du skapar anpassade Terraform-containeravbildningar för att skapa distributionsmiljöer med Azure Deployment Environments (ADE). Du lär dig hur du konfigurerar en anpassad avbildning för att etablera infrastruktur med hjälp av Terraform Infrastructure-as-Code-ramverket (IaC).
I den här artikeln får du lära dig hur du använder Pulumi för distributioner i ADE. Du lär dig hur du använder en standardbild som tillhandahålls av Pulumi eller hur du konfigurerar en anpassad avbildning för att etablera infrastruktur med hjälp av Pulumi Infrastructure-as-Code-ramverket (IaC).
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Azure-distributionsmiljöer som konfigurerats i din Azure-prenumeration.
- Om du vill konfigurera ADE följer du snabbstarten : Konfigurera Azure-distributionsmiljöer.
Använda containeravbildningar med ADE
Du kan använda någon av följande metoder för att använda containeravbildningar med ADE:
- Använd en standardcontaineravbildning För enkla scenarier använder du standard-ARM-Bicep-containeravbildningen som tillhandahålls av ADE.
- Skapa en anpassad containeravbildning För mer komplexa scenarier skapar du en anpassad containeravbildning som uppfyller dina specifika krav.
Använda en standardcontaineravbildning
ADE stöder Azure Resource Manager (ARM) och Bicep utan extra konfiguration. Du kan skapa en miljödefinition som distribuerar Azure-resurser för en distributionsmiljö genom att lägga till mallfilerna (till exempel azuredeploy.json och environment.yaml) i katalogen. ADE använder sedan standard-ARM-Bicep-containeravbildningen för att skapa distributionsmiljön.
I filen runner
environment.yaml anger egenskapen platsen för den containeravbildning som du vill använda. Om du vill använda standardbilden som publicerats på Microsofts artefaktregister använder du respektive identifierare runner
.
I följande exempel visas en runner
som refererar till standardavbildningen för ARM-Bicep-containern:
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
Du kan se standard-Bicep-containeravbildningen i ADE-standardlagringsplatsen under mappen Runner-Images för ARM-Bicep-avbildningen .
Mer information om hur du skapar miljödefinitioner som använder ADE-containeravbildningarna för att distribuera dina Azure-resurser finns i Lägga till och konfigurera en miljödefinition.
Skapa en anpassad containeravbildning
Skapa en anpassad containeravbildning med hjälp av ett skript
När du skapar en anpassad containeravbildning kan du anpassa dina distributioner så att de passar dina behov. Du kan skapa och skapa en avbildning baserat på ADE-standardavbildningen och skicka den till containerregistret med hjälp av ett snabbstartsskript från Microsoft. Du hittar skriptet i lagringsplatsen Distributionsmiljöer. Om du vill använda snabbstartsskriptet förgrenar du lagringsplatsen och kör sedan skriptet lokalt.
Skriptet skapar en avbildning och skickar den till det angivna Azure Container Registry (ACR) under lagringsplatsen "ade" och taggen "latest". Det här skriptet kräver ditt registernamn och din katalog för din anpassade avbildning, har Azure CLI och Docker Desktop installerat och i path-variablerna och kräver att du har behörighet att skicka till det angivna registret.
Om du vill använda snabbstartsskriptet för att snabbt skapa och skicka den här exempelavbildningen till ett Azure Container Registry måste du:
- Förgrena den här lagringsplatsen till ditt personliga konto.
- Se till att Azure CLI och Docker Desktop-programmet är installerade på datorn och i path-variablerna.
- Kontrollera att du har behörighet att skicka avbildningar till ditt valda Azure Container Registry.
Du kan anropa skriptet med följande kommando i PowerShell:
.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'
Om du vill skicka till en specifik lagringsplats och taggnamn kan du dessutom köra:
.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'
Om du vill använda avbildningen i dina miljödistributioner måste du lägga till avbildningens plats i manifestfilen Anslut avbildningen till din miljödefinition och du kan behöva konfigurera behörigheter för ACR för att göra den anpassade avbildningen tillgänglig för ADE.
Använda containeravbildningar med ADE
Du kan använda någon av följande metoder för att använda containeravbildningar med ADE:
- Skapa en anpassad containeravbildning med hjälp av ett skript: Använd det publicerade skriptet för att skapa en Terraform-specifik avbildning.
- Skapa en anpassad containeravbildning som utnyttjar ett GitHub-arbetsflöde: Använd det publicerade GitHub-arbetsflödet från ADE:s utökningsmodell med Terraform-lagringsplatsen.
- Skapa en anpassad containeravbildning manuellt: Skapa en anpassad Terraform-specifik avbildning manuellt
Skapa en anpassad containeravbildning
- Skapa en avbildning med hjälp av ett skript
- Skapa en avbildning med ett GitHub-arbetsflöde
- Skapa en avbildning manuellt
Skapa en anpassad containeravbildning med hjälp av ett skript
När du skapar en anpassad containeravbildning kan du anpassa dina distributioner så att de passar dina behov. Du kan skapa en avbildning baserat på ADE-standardavbildningen och skicka den till containerregistret med hjälp av ett snabbstartsskript från Microsoft. Du hittar skriptet i distributionsmiljöerna med Terraform-lagringsplatsen. Om du vill använda snabbstartsskriptet förgrenar du lagringsplatsen och kör sedan skriptet lokalt.
Om du vill använda snabbstartsskriptet för att snabbt skapa och skicka den här exempelavbildningen till ett Azure Container Registry måste du:
- Förgrena den här lagringsplatsen till ditt personliga konto.
- Se till att Azure CLI och Docker Desktop-programmet är installerade på datorn och i path-variablerna.
- Kontrollera att du har behörighet att skicka avbildningar till ditt valda Azure Container Registry.
Skriptet skapar en avbildning och skickar den till det angivna Azure Container Registry (ACR) under lagringsplatsen "ade" och taggen "latest". Det här skriptet kräver ditt registernamn och din katalog för din anpassade avbildning, har Azure CLI och Docker Desktop installerat och i path-variablerna och kräver att du har behörighet att skicka till det angivna registret. Du kan anropa skriptet med följande kommando i PowerShell:
.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'
Om du vill skicka till en specifik lagringsplats och taggnamn kan du dessutom köra:
.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'
Om du vill använda avbildningen i dina miljödistributioner måste du lägga till avbildningens plats i manifestfilen Anslut avbildningen till din miljödefinition och du kan behöva konfigurera behörigheter för ACR för att göra den anpassade avbildningen tillgänglig för ADE.
Använda en standardcontaineravbildning som tillhandahålls av Pulumi
Pulumi-teamet tillhandahåller en fördefinierad avbildning för att komma igång, som du kan se i mappen Runner-Image . Den här avbildningen är offentligt tillgänglig på Pulumis Docker Hub som pulumi/azure-deployment-environments
, så du kan använda den direkt från ADE-miljödefinitionerna.
Här är en exempelfil för environment.yaml som använder den fördefinierade avbildningen:
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
Du hittar några exempel på miljödefinitioner i mappen Miljöer.
Skapa en anpassad avbildning
När du skapar en anpassad containeravbildning kan du anpassa dina distributioner så att de passar dina behov. Du kan skapa anpassade avbildningar baserat på Pulumi-standardbilderna och anpassa dem efter dina behov. När du har slutfört avbildningsanpassningen måste du skapa avbildningen och push-överföra den till containerregistret.
Följ dessa steg för att skapa en avbildning som konfigurerats för ADE:
- Skapa en anpassad avbildning baserat på en standardbild.
- Installera önskade paket.
- Konfigurera åtgärdsgränssnittsskript.
- Skapa åtgärdsgränssnittsskript som använder Pulumi CLI.
1. Skapa en anpassad avbildning baserat på en standardbild
Skapa en DockerFile som innehåller en FROM-instruktion som pekar på en standardbild som finns på Microsofts artefaktregister.
Här är ett exempel på FROM-instruktionen som refererar till standardkärnbilden:
FROM mcr.microsoft.com/deployment-environments/runners/core:latest
Den här instruktionen hämtar den senast publicerade kärnbilden och utgör grunden för din anpassade avbildning.
2. Installera nödvändiga paket
Du kan installera Pulumi CLI på en körbar plats så att den kan användas i distributions- och borttagningsskripten.
Här är ett exempel på den processen genom att installera den senaste versionen av Pulumi CLI:
RUN apk add curl
RUN curl -fsSL https://get.pulumi.com | sh
ENV PATH="${PATH}:/root/.pulumi/bin"
Beroende på vilket programmeringsspråk du tänker använda för Pulumi-program kan du behöva installera en eller flera motsvarande körningar. Python-körningen är redan tillgänglig i basavbildningen.
Här är ett exempel på hur du installerar Node.js och TypeScript:
# install node.js, npm, and typescript
RUN apk add nodejs npm
RUN npm install typescript -g
ADE-standardavbildningarna baseras på Azure CLI-avbildningen och har ADE CLI- och JQ-paketen förinstallerade. Du kan lära dig mer om Azure CLI och JQ-paketet.
Om du vill installera fler paket som du behöver i avbildningen använder du RUN-instruktionen.
Det finns fyra steg för att distribuera infrastruktur via Pulumi:
-
pulumi login
– ansluta till tillståndslagringen, antingen i det lokala filsystemet eller i Pulumi Cloud -
pulumi stack select
– skapa eller välja den stack som ska användas för den specifika miljön -
pulumi config set
– skicka distributionsparametrar som Pulumi-konfigurationsvärden -
pulumi up
– kör distributionen för att skapa ny eller uppdatera befintlig infrastruktur i Azure
Under kärnavbildningens startpunkt hämtas alla befintliga lokala tillståndsfiler till containern och katalogen sparas under miljövariabeln $ADE_STORAGE
. Kör följande kommandon för att få åtkomst till den befintliga tillståndsfilen:
mkdir -p $ADE_STORAGE
export PULUMI_CONFIG_PASSPHRASE=
pulumi login file://$ADE_STORAGE
Om du vill logga in på Pulumi Cloud i stället anger du din Pulumi-åtkomsttoken som en miljövariabel och kör följande kommandon:
export PULUMI_ACCESS_TOKEN=YOUR_PULUMI_ACCESS_TOKEN
pulumi login
Alla parametrar som anges för den aktuella miljön lagras under variabeln $ADE_OPERATION_PARAMETERS
. Dessutom skickas det valda namnet på Azure-regionen och resursgruppen i ADE_ENVIRONMENT_LOCATION
respektive ADE_RESOURCE_GROUP_NAME
. Kör följande kommandon för att ställa in konfigurationen av Pulumi-stacken:
# 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
För att kunna använda ADE-behörigheter för att distribuera infrastruktur i din prenumeration måste skriptet dessutom använda ADE Managed Service Identity (MSI) när du etablerar infrastruktur med hjälp av Pulumi Azure Native- eller Azure Classic-providern. Om distributionen behöver särskilda behörigheter för att slutföra distributionen, till exempel särskilda roller, tilldelar du dessa behörigheter till den projektmiljötyps identitet som används för din miljödistribution. ADE anger relevanta miljövariabler, till exempel klient-, klient- och prenumerations-ID:t i kärnbildens startpunkt, så kör följande kommandon för att säkerställa att providern använder 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
Nu kan du köra pulumi up
kommandot för att köra distributionen:
pulumi up --refresh --yes --config-file $PULUMI_CONFIG_FILE
Under borttagningsskriptet destroy
kan du i stället köra kommandot, som du ser i följande exempel:
pulumi destroy --refresh --yes --config-file $PULUMI_CONFIG_FILE
Slutligen, för att göra utdata från distributionen uppladdade och tillgängliga när du kommer åt din miljö via Azure CLI, omvandlar du utdataobjektet från Pulumi till det ADE-angivna formatet via JQ-paketet. Ange värdet till miljövariabeln $ADE_OUTPUTS enligt följande exempel:
stackout=$(pulumi stack output --json | jq -r 'to_entries|.[]|{(.key): {type: "string", value: (.value)}}')
echo "{\"outputs\": ${stackout:-{\}}}" > $ADE_OUTPUTS
Skapa den anpassade avbildningen
Du kan skapa avbildningen med Hjälp av Docker CLI. Kontrollera att Docker-motorn är installerad på datorn. Navigera sedan till katalogen för din Dockerfile och kör följande kommando:
docker build . -t {YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}
Om du till exempel vill spara avbildningen under en lagringsplats i registret med namnet customImage
och ladda upp med taggversionen av 1.0.0
kör du:
docker build . -t {YOUR_REGISTRY}.azurecr.io/customImage:1.0.0
Gör den anpassade avbildningen tillgänglig för ADE
För att kunna använda anpassade avbildningar måste du lagra dem i ett containerregister. Du kan använda ett offentligt containerregister eller ett privat containerregister. Azure Container Registry (ACR) rekommenderas starkt, på grund av den snäva integreringen med ADE kan avbildningen publiceras utan att tillåta offentlig anonym pull-åtkomst. Du måste skapa din anpassade containeravbildning och skicka den till ett containerregister för att göra den tillgänglig för användning i ADE.
Det går också att lagra avbildningen i ett annat containerregister, till exempel Docker Hub, men i så fall måste den vara offentligt tillgänglig.
Varning
Om du lagrar containeravbildningen i ett register med anonym (oautentiserad) pull-åtkomst blir den offentligt tillgänglig. Gör inte det om bilden innehåller känslig information. Lagra den i stället i Azure Container Registry (ACR) med anonym pull-åtkomst inaktiverad.
Om du vill använda en anpassad avbildning som lagras i ACR måste du se till att ADE har rätt behörighet att komma åt avbildningen. När du skapar en ACR-instans är den säker som standard och tillåter endast autentiserade användare att få åtkomst.
Du kan använda Pulumi för att skapa ett Azure Container Registry och publicera avbildningen till det. Se exemplet Etablering/anpassad avbildning för ett fristående Pulumi-projekt som skapar alla nödvändiga resurser i ditt Azure-konto.
Välj lämplig flik för att lära dig mer om varje metod.
Använda ett privat register med säker åtkomst
Som standard är åtkomst till att hämta eller skicka innehåll från ett Azure Container Registry endast tillgängligt för autentiserade användare. Du kan skydda åtkomsten till ACR ytterligare genom att begränsa åtkomsten från vissa nätverk och tilldela specifika roller.
Om du vill skapa en instans av ACR, som kan göras via Azure CLI, Azure Portal, PowerShell-kommandon med mera, följer du en av snabbstarterna.
Begränsa nätverksåtkomst
För att skydda nätverksåtkomsten till din ACR kan du begränsa åtkomsten till dina egna nätverk eller inaktivera åtkomsten till det offentliga nätverket helt. Om du begränsar nätverksåtkomsten måste du aktivera brandväggsfelet Tillåt betrodda Microsoft-tjänster att komma åt det här containerregistret.
Så här inaktiverar du åtkomst från offentliga nätverk:
Skapa en ACR-instans eller använd en befintlig.
I Azure Portal går du till den ACR som du vill konfigurera.
På den vänstra menyn går du till Inställningar och väljer Nätverk.
På sidan Nätverk går du till fliken Offentlig åtkomst och under Åtkomst till offentligt nätverk väljer du Inaktiverad.
Under Brandväggsfel kontrollerar du att Tillåt betrodda Microsoft-tjänster att komma åt det här containerregistret är markerat och välj sedan Spara.
Tilldela rollen AcrPull
När du skapar miljöer med hjälp av containeravbildningar används ADE-infrastrukturen, inklusive projekt och miljötyper. Varje projekt har en eller flera projektmiljötyper som behöver läsbehörighet till containeravbildningen som definierar den miljö som ska distribueras. Om du vill komma åt avbildningarna i din ACR på ett säkert sätt tilldelar du rollen AcrPull till varje projektmiljötyp.
Så här tilldelar du rollen AcrPull till projektmiljötypen:
I Azure Portal går du till den ACR som du vill konfigurera.
Välj Åtkomstkontroll (IAM) på den vänstra menyn.
Välj Lägg till>Lägg till rolltilldelning.
Tilldela följande roll. Läs mer om att tilldela roller i Tilldela Azure-roller via Azure Portal.
Inställning Värde Roll Välj AcrPull. Tilldela åtkomst till Välj Användare, grupp eller tjänstens huvudnamn. Medlemmar Ange namnet på den projektmiljötyp som behöver komma åt avbildningen i containern. Projektmiljötypen visas som i följande exempel:
I den här konfigurationen använder ADE den hanterade identiteten för PET, oavsett om systemet har tilldelats eller användaren har tilldelats.
Dricks
Den här rolltilldelningen måste göras för varje projektmiljötyp. Det kan automatiseras via Azure CLI.
När du är redo att skicka avbildningen till registret kör du följande kommando:
docker push {YOUR_REGISTRY}.azurecr.io/{YOUR_IMAGE_LOCATION}:{YOUR_TAG}
Ansluta avbildningen till din miljödefinition
När du redigerar miljödefinitioner för att använda din anpassade avbildning i distributionen runner
redigerar du egenskapen i manifestfilen (environment.yaml eller manifest.yaml).
runner: "{YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}"
Mer information om hur du skapar miljödefinitioner som använder ADE-containeravbildningarna för att distribuera dina Azure-resurser finns i Lägga till och konfigurera en miljödefinition.