Quickstart: Een Dapr-toepassing implementeren in Azure Container Apps met behulp van de Azure CLI
Dapr (Distributed Application Runtime) helpt ontwikkelaars bij het bouwen van tolerante, betrouwbare microservices. In deze quickstart leert u hoe u Dapr-sidecars kunt inschakelen om naast uw microservicescontainer-apps te worden uitgevoerd. U doet het volgende:
- Maak een Container Apps-omgeving en azure Blog Storage-statusopslag voor uw container-apps.
- Implementeer een Python-container-app waarmee berichten worden gepubliceerd.
- Implementeer een Node.js container-app die zich abonneert op berichten en die in een statusarchief opslaat.
- Controleer de interactie tussen de twee microservices met behulp van Azure Portal.
Deze quickstart weerspiegelt de toepassingen die u implementeert in de opensource Dapr Hallo wereld quickstart.
Instellingen
Als u zich wilt aanmelden bij Azure vanuit de CLI, voert u de volgende opdracht uit en volgt u de aanwijzingen om het verificatieproces te voltooien.
az login
Voer de upgradeopdracht uit om ervoor te zorgen dat u de nieuwste versie van de CLI uitvoert.
az upgrade
Installeer of werk vervolgens de Azure Container Apps-extensie voor de CLI bij.
Als u fouten ontvangt over ontbrekende parameters wanneer u opdrachten uitvoert az containerapp
in Azure CLI of cmdlets vanuit de Az.App
module in Azure PowerShell, moet u ervoor zorgen dat de nieuwste versie van de Azure Container Apps-extensie is geïnstalleerd.
az extension add --name containerapp --upgrade
Notitie
Vanaf mei 2024 schakelen Azure CLI-extensies standaard geen preview-functies meer in. Als u toegang wilt krijgen tot de preview-functies van Container Apps, installeert u de Container Apps-extensie met --allow-preview true
.
az extension add --name containerapp --upgrade --allow-preview true
Nu de huidige extensie of module is geïnstalleerd, registreert u de Microsoft.App
en Microsoft.OperationalInsights
naamruimten.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Omgevingsvariabelen instellen
Stel de volgende omgevingsvariabelen in. Vervang de <PLACEHOLDERS>
waarden door uw waarden:
RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"
Maak een Azure-resourcegroep
Maak een resourcegroep om de services te ordenen die betrekking hebben op de implementatie van uw container-app.
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
Een omgeving maken
Een omgeving in Azure Container Apps maakt een veilige grens rond een groep container-apps. Container Apps die in dezelfde omgeving zijn geïmplementeerd, worden geïmplementeerd in hetzelfde virtuele netwerk en schrijven logboeken naar dezelfde Log Analytics-werkruimte.
Voer de volgende opdracht uit om de omgeving te maken:
az containerapp env create \
--name $CONTAINERAPPS_ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION"
Een statusarchief instellen
Een Azure Blob Storage-account maken
Wanneer de omgeving is geïmplementeerd, implementeert u een Azure Blob Storage-account dat wordt gebruikt door de Node.js container-app om gegevens op te slaan. Voordat u de service implementeert, kiest u een naam voor het opslagaccount. Namen van opslagaccounts moeten uniek zijn binnen Azure, van 3 tot 24 tekens lang en mogen alleen cijfers en kleine letters bevatten.
STORAGE_ACCOUNT_NAME="<storage account name>"
Gebruik de volgende opdracht om het Azure Storage-account te maken.
az storage account create \
--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION" \
--sku Standard_RAGRS \
--kind StorageV2
Een door de gebruiker toegewezen identiteit configureren voor de knooppunt-app
Hoewel Container Apps zowel door de gebruiker toegewezen als door het systeem toegewezen beheerde identiteit ondersteunt, biedt een door de gebruiker toegewezen identiteit de door de gebruiker toegewezen Node.js app met machtigingen voor toegang tot het Blob Storage-account.
Maak een door de gebruiker toegewezen identiteit.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
Haal de
principalId
en eigenschappen opid
en sla deze op in variabelen.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 \")
Haal de abonnements-id voor uw huidige abonnement op.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
Wijs de
Storage Blob Data Contributor
rol toe aan de door de gebruiker toegewezen identiteit.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"
Het statusarchiefonderdeel configureren
Hoewel u meerdere opties hebt voor verificatie bij externe resources via Dapr. In dit voorbeeld wordt een op Azure gebaseerde statusopslag gebruikt, zodat u directe toegang kunt bieden vanuit de Node.js-app naar de Blob Store met behulp van beheerde identiteit.
Maak in een teksteditor een bestand met de naam statestore.yaml met de eigenschappen die u hebt opgehaald uit de vorige stappen.
# 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
Dit bestand helpt uw Dapr-app toegang te krijgen tot uw statusarchief.
Navigeer naar de map waarin u het yaml-bestand hebt opgeslagen en voer de volgende opdracht uit om het Dapr-onderdeel in de Container Apps-omgeving te configureren.
az containerapp env dapr-component set \ --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \ --dapr-component-name statestore \ --yaml statestore.yaml
De Node.js-toepassing implementeren
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'
Als u een Azure Container Registry gebruikt, neemt u de --registry-server <REGISTRY_NAME>.azurecr.io
vlag op in de opdracht.
De installatiekopie wordt standaard opgehaald uit Docker Hub.
De Python-toepassing implementeren
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
Als u een Azure Container Registry gebruikt, neemt u de --registry-server <REGISTRY_NAME>.azurecr.io
vlag op in de opdracht.
De resultaten controleren
Persistentie van geslaagde status bevestigen
U kunt controleren of de services correct werken door gegevens in uw Azure Storage-account weer te geven.
Open Azure Portal in uw browser en navigeer naar uw opslagaccount.
Selecteer Data Storage-containers> in het menu aan de linkerkant.
Selecteer de container-app.
Controleer of u het bestand met de naam
order
in de container kunt zien.Selecteer het bestand.
Selecteer het tabblad Bewerken .
Selecteer de knop Vernieuwen om te zien hoe de gegevens automatisch worden bijgewerkt.
Logboeken bekijken
Logboeken van container-apps worden opgeslagen in de ContainerAppConsoleLogs_CL
aangepaste tabel in de Log Analytics-werkruimte. U kunt logboeken bekijken via Azure Portal of via de CLI. Er kan in eerste instantie een kleine vertraging optreden voordat de tabel in de werkruimte wordt weergegeven.
Bekijk logboeken met behulp van de opdrachtregel met behulp van de volgende CLI-opdracht.
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
In de volgende uitvoer ziet u het type antwoord dat u kunt verwachten van de CLI-opdracht.
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
Resources opschonen
Aangezien pythonapp
u continu aanroepen uitvoert nodeapp
met berichten die worden bewaard in uw geconfigureerde statusarchief, is het belangrijk om deze opschoonstappen te voltooien om lopende factureerbare bewerkingen te voorkomen.
Als u de resources wilt verwijderen die zijn gemaakt als onderdeel van dit scenario, voert u de volgende opdracht uit.
Let op
Met deze opdracht verwijdert u de opgegeven resourcegroep en alle resources erin. Als resources buiten het bereik van deze zelfstudie in de opgegeven resourcegroep bestaan, worden ze ook verwijderd.
az group delete --resource-group $RESOURCE_GROUP
Tip
Ondervindt u problemen? Laat het ons weten op GitHub door een probleem te openen in de Azure Container Apps-opslagplaats.