Självstudie: 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 självstudien distribueras ett Dapr-exempelprogram till Azure Container Apps.
Du lär dig att:
- Skapa en Container Apps-miljö för dina containerappar
- Skapa ett Azure Blob Storage-tillståndslager för containerappen
- Distribuera två appar som producerar och använder meddelanden och bevarar dem i tillståndsarkivet
- Kontrollera interaktionen mellan de två mikrotjänsterna.
Med Azure Container Apps får du en fullständigt hanterad version av Dapr-API:erna när du skapar mikrotjänster. När du använder Dapr i Azure Container Apps kan du göra så att sidovagnar kan köras bredvid dina mikrotjänster som ger en omfattande uppsättning funktioner. Tillgängliga Dapr-API:er är Service to Service-anrop, Pub/Sub, Event Bindings, State Stores och Actors.
I den här självstudien distribuerar du samma program från snabbstarten Dapr Hello World .
Programmet består av:
- En klientcontainerapp (Python) för att generera meddelanden.
- En tjänstcontainerapp (Node) för att använda och spara dessa meddelanden i ett tillståndsarkiv
Följande arkitekturdiagram illustrerar de komponenter som utgör den här självstudien:
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. Ersätt <PLACEHOLDERS> 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 är nästa steg att distribuera ett Azure Blob Storage-konto som används av en av mikrotjänsterna för att lagra data. Innan du distribuerar tjänsten måste du välja 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 nodappen 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 och id
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 \")
Storage Blob Data Contributor
Tilldela rollen till den användartilldelade identiteten
Hämta prenumerations-ID:t för din aktuella prenumeration.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
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
Det finns flera sätt att autentisera till externa resurser via Dapr. Det här exemplet använder inte Dapr Secrets API vid körning, utan använder ett Azure-baserat tillståndsarkiv. Därför kan du avstå från att skapa en hemlig butikskomponent och i stället ge direkt åtkomst från nodappen till Blob Store med hjälp av hanterad identitet. Om du vill använda ett icke-Azure-tillståndsarkiv eller Dapr Secrets API vid körning kan du skapa en komponent för hemligt arkiv. Den här komponenten läser in körningshemligheter så att du kan referera till dem vid körning.
Öppna en textredigerare och skapa en konfigurationsfil med namnet statestore.yaml med de egenskaper som du hämtade från föregående steg. Den här filen hjälper din Dapr-app att få åtkomst till din tillståndsbutik. I följande exempel visas hur din statestore.yaml-fil ska se ut när den konfigureras för ditt Azure Blob Storage-konto:
# 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
Om du vill använda den här filen uppdaterar du platshållarna:
- Ersätt
<STORAGE_ACCOUNT_NAME>
med värdet för den variabel somSTORAGE_ACCOUNT_NAME
du definierade. Kör följande kommando för att hämta dess värde:
echo $STORAGE_ACCOUNT_NAME
- Ersätt
<MANAGED_IDENTITY_CLIENT_ID>
med värdet för den variabel somCLIENT_ID
du definierade. Kör följande kommando för att hämta dess värde:
echo $CLIENT_ID
Gå till katalogen där du lagrade komponenten yaml-filen och kör följande kommando för att konfigurera Dapr-komponenten i Container Apps-miljön. Mer information om hur du konfigurerar Dapr-komponenter finns i Konfigurera Dapr-komponenter.
az containerapp env dapr-component set \
--name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \
--dapr-component-name statestore \
--yaml statestore.yaml
Distribuera tjänstprogrammet (HTTP-webbserver)
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 klientprogrammet (huvudlös klient)
Kör följande kommando för att distribuera klientcontainerappen.
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 Menyn På vänster sida i Containrar .
Välj mycontainer.
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.
Använd följande CLI-kommando för att visa loggar med hjälp av kommandoraden.
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
Grattis! Du har slutfört den här självstudien. 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
Kommentar
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.
Dricks
Har du problem? Meddela oss på GitHub genom att öppna ett problem i Azure Container Apps-lagringsplatsen.