Snabbstart: Distribuera ett Dapr-program till Azure Container Apps med hjälp av Azure CLI
Dapr (Distributed Application Runtime) hjälper utvecklare att skapa motståndskraftiga och tillförlitliga mikrotjänster. I den här snabbstarten får du lära dig hur du gör så att Dapr-sidovagnar kan köras tillsammans med dina containerappar för mikrotjänster. Du kommer att:
- Skapa en Container Apps-miljö och Azure Blog Storage-tillståndsarkiv för dina containerappar.
- Distribuera en Python-containerapp som publicerar meddelanden.
- Distribuera en Node.js containerapp som prenumererar på meddelanden och bevarar dem i ett tillståndslager.
- Kontrollera interaktionen mellan de två mikrotjänsterna med hjälp av Azure Portal.
Den här snabbstarten speglar de program som du distribuerar i snabbstarten Dapr Hello World med öppen källkod.
Ställ in
Om du vill logga in på Azure från CLI kör du följande kommando och följer anvisningarna för att slutföra autentiseringsprocessen.
az login
Kör uppgraderingskommandot för att säkerställa att du kör den senaste versionen av CLI.
az upgrade
Installera eller uppdatera sedan Azure Container Apps-tillägget för CLI.
Om du får fel om saknade parametrar när du kör az containerapp
kommandon i Azure CLI eller cmdletar från modulen Az.App
i Azure PowerShell kontrollerar du att den senaste versionen av Azure Container Apps-tillägget är installerad.
az extension add --name containerapp --upgrade
Kommentar
Från och med maj 2024 aktiverar Azure CLI-tillägg inte längre förhandsversionsfunktioner som standard. Om du vill komma åt förhandsversionsfunktioner för Container Apps installerar du containerapptillägget med --allow-preview true
.
az extension add --name containerapp --upgrade --allow-preview true
Nu när det aktuella tillägget eller modulen har installerats registrerar du Microsoft.App
namnrymderna och Microsoft.OperationalInsights
.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Ange miljövariabler
Ange följande miljövariabler. <PLACEHOLDERS>
Ersätt med dina värden:
RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"
Skapa en Azure-resursgrupp
Skapa en resursgrupp för att organisera de tjänster som är relaterade till distributionen av containerappen.
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
Skapa en miljö
En miljö i Azure Container Apps skapar en säker gräns runt en grupp med containerappar. Container Apps som distribueras till samma miljö distribueras i samma virtuella nätverk och skriver loggar till samma Log Analytics-arbetsyta.
Kör följande kommando för att skapa miljön:
az containerapp env create \
--name $CONTAINERAPPS_ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION"
Konfigurera ett tillståndslager
Skapa ett Azure Blob Storage-konto
När miljön har distribuerats distribuerar du ett Azure Blob Storage-konto som används av Node.js containerapp för att lagra data. Innan du distribuerar tjänsten väljer du ett namn för lagringskontot. Lagringskontonamn måste vara unika i Azure, från 3 till 24 tecken långa och får endast innehålla siffror och gemener.
STORAGE_ACCOUNT_NAME="<storage account name>"
Använd följande kommando för att skapa Azure Storage-kontot.
az storage account create \
--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION" \
--sku Standard_RAGRS \
--kind StorageV2
Konfigurera en användartilldelad identitet för nodappen
Container Apps stöder både användartilldelad och systemtilldelad hanterad identitet, men en användartilldelad identitet ger den Dapr-aktiverade Node.js-appen behörighet att komma åt bloblagringskontot.
Skapa en användartilldelad identitet.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
principalId
Hämta egenskaperna ochid
och lagra i variabler.PRINCIPAL_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query principalId | tr -d \") IDENTITY_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query id | tr -d \") CLIENT_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP --query clientId | tr -d \")
Hämta prenumerations-ID:t för din aktuella prenumeration.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
Storage Blob Data Contributor
Tilldela rollen till den användartilldelade identiteten.az role assignment create --assignee $PRINCIPAL_ID \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/ Microsoft.Storage/storageAccounts/$STORAGE_ACCOUNT_NAME"
Konfigurera komponenten för tillståndsarkivet
Du har flera alternativ för att autentisera till externa resurser via Dapr. I det här exemplet används ett Azure-baserat tillståndsarkiv, så att du kan ge direkt åtkomst från Node.js-appen till Blob Store med hjälp av hanterad identitet.
I en textredigerare skapar du en fil med namnet statestore.yaml med de egenskaper som du hämtade från föregående steg.
# statestore.yaml for Azure Blob storage component componentType: state.azure.blobstorage version: v1 metadata: - name: accountName value: "<STORAGE_ACCOUNT_NAME>" - name: containerName value: mycontainer - name: azureClientId value: "<MANAGED_IDENTITY_CLIENT_ID>" scopes: - nodeapp
Den här filen hjälper din Dapr-app att få åtkomst till din tillståndsbutik.
Gå till katalogen där du lagrade yaml-filen och kör följande kommando för att konfigurera Dapr-komponenten i Container Apps-miljön.
az containerapp env dapr-component set \ --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \ --dapr-component-name statestore \ --yaml statestore.yaml
Distribuera Node.js-programmet
az containerapp create \
--name nodeapp \
--resource-group $RESOURCE_GROUP \
--user-assigned $IDENTITY_ID \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dapriosamples/hello-k8s-node:latest \
--min-replicas 1 \
--max-replicas 1 \
--enable-dapr \
--dapr-app-id nodeapp \
--dapr-app-port 3000 \
--env-vars 'APP_PORT=3000'
Om du använder ett Azure Container Registry tar du med --registry-server <REGISTRY_NAME>.azurecr.io
flaggan i kommandot .
Som standard hämtas avbildningen från Docker Hub.
Distribuera Python-programmet
az containerapp create \
--name pythonapp \
--resource-group $RESOURCE_GROUP \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dapriosamples/hello-k8s-python:latest \
--min-replicas 1 \
--max-replicas 1 \
--enable-dapr \
--dapr-app-id pythonapp
Om du använder ett Azure Container Registry tar du med --registry-server <REGISTRY_NAME>.azurecr.io
flaggan i kommandot .
Verifiera resultatet
Bekräfta lyckad tillståndsbeständighet
Du kan bekräfta att tjänsterna fungerar korrekt genom att visa data i ditt Azure Storage-konto.
Öppna Azure Portal i webbläsaren och gå till ditt lagringskonto.
Välj Datalagringscontainrar> på menyn till vänster.
Välj containerappen.
Kontrollera att du kan se filen med namnet
order
i containern.Välj filen.
Välj fliken Redigera .
Välj knappen Uppdatera för att se hur data uppdateras automatiskt.
Visa loggfiler
Loggar från containerappar lagras i den ContainerAppConsoleLogs_CL
anpassade tabellen på Log Analytics-arbetsytan. Du kan visa loggar via Azure Portal eller via CLI. Det kan till en början uppstå en liten fördröjning för tabellen som ska visas på arbetsytan.
Visa loggar med hjälp av kommandoraden med följande CLI-kommando.
LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
az monitor log-analytics query \
--workspace $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
--analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'nodeapp' and (Log_s contains 'persisted' or Log_s contains 'order') | project ContainerAppName_s, Log_s, TimeGenerated | sort by TimeGenerated | take 5" \
--out table
Följande utdata visar vilken typ av svar som kan förväntas av CLI-kommandot.
ContainerAppName_s Log_s TableName TimeGenerated
-------------------- ------------------------------- ------------- ------------------------
nodeapp Got a new order! Order ID: 61 PrimaryResult 2021-10-22T21:31:46.184Z
nodeapp Successfully persisted state. PrimaryResult 2021-10-22T21:31:46.184Z
nodeapp Got a new order! Order ID: 62 PrimaryResult 2021-10-22T22:01:57.174Z
nodeapp Successfully persisted state. PrimaryResult 2021-10-22T22:01:57.174Z
nodeapp Got a new order! Order ID: 63 PrimaryResult 2021-10-22T22:45:44.618Z
Rensa resurser
Eftersom pythonapp
kontinuerligt anropar nodeapp
med meddelanden som sparas i ditt konfigurerade tillståndsarkiv är det viktigt att slutföra de här rensningsstegen för att undvika pågående fakturerbara åtgärder.
Om du vill ta bort de resurser som skapats som en del av den här genomgången kör du följande kommando.
Varning
Det här kommandot tar bort den angivna resursgruppen och alla resurser som ingår i den. Om det finns resurser utanför omfånget för den här självstudien i den angivna resursgruppen tas de också bort.
az group delete --resource-group $RESOURCE_GROUP
Dricks
Har du problem? Meddela oss på GitHub genom att öppna ett problem i Azure Container Apps-lagringsplatsen.