Kurz: nasazení aplikace v Dapr do služby Azure Container Apps pomocí rozhraní příkazového řádku Azure
Dapr (Distributed Application Runtime) je modul runtime, který pomáhá vytvářet odolné, bezstavové a stavové mikroslužby. V tomto kurzu je ukázková aplikace Dapr nasazená ve službě Azure Container Apps.
Získáte informace o těchto tématech:
- Vytvoření prostředí kontejnerových aplikací pro aplikace typu kontejner
- vytvoření úložiště stavu Azure Blob Storage pro aplikaci kontejneru
- Nasazení dvou aplikací, které vytváří a využívají zprávy a uchovávají je v úložišti stavů
- Ověřte interakci mezi dvěma mikroslužbami.
Azure Container Apps nabízí plně spravovanou verzi rozhraní API Dapr při vytváření mikroslužeb. Když ve službě Azure Container Apps používáte Dapr, můžete povolit, aby sajdkáry běžely vedle vašich mikroslužeb, které poskytují bohatou sadu funkcí. K dispozici jsou Dapr rozhraní API služby pro volání služeb, publikování za sekundu, vazby událostí, úložiště stavůa objekty actor.
V tomto kurzu nasadíte stejné aplikace z Dapr Hello World rychlý Start, který se skládá z aplikace klienta (Python), která generuje zprávy, a aplikace služby (uzlu), která využívá a uchovává tyto zprávy v nakonfigurovaném úložišti stavů. Následující diagram architektury znázorňuje komponenty, které tvoří tento kurz:
Předpoklady
Než začnete
Tato příručka využívá následující proměnné prostředí:
RESOURCE_GROUP="my-containerapps"
LOCATION="canadacentral"
CONTAINERAPPS_ENVIRONMENT="containerapps-env"
LOG_ANALYTICS_WORKSPACE="containerapps-logs"
STORAGE_ACCOUNT_CONTAINER="mycontainer"
Výše uvedený fragment kódu lze použít k nastavení proměnných prostředí pomocí bash, zsh nebo PowerShellu.
STORAGE_ACCOUNT="<storage account name>"
Vyberte název STORAGE_ACCOUNT . Vytvoří se v následujícím kroku. názvy účtů Storage musí být v rámci Azure jedinečné a musí být dlouhé 3 až 24 znaků a můžou obsahovat jenom číslice a malá písmena.
Nastavení
Začněte přihlášením k Azure z CLI.
Spusťte následující příkaz a postupujte podle pokynů k dokončení procesu ověřování.
az login
Ujistěte se, že používáte nejnovější verzi rozhraní příkazového řádku prostřednictvím příkazu pro upgrade.
az upgrade
V dalším kroku nainstalujte do CLI rozšíření Azure Container Apps.
az extension add \
--source https://workerappscliextension.blob.core.windows.net/azure-cli-extension/containerapp-0.2.0-py2.py3-none-any.whl
Teď, když je rozšíření nainstalované, zaregistrujte Microsoft.Web obor názvů.
az provider register --namespace Microsoft.Web
Vytvořte skupinu prostředků pro uspořádání služeb vztahujících se k vaší nové aplikaci typu kontejner.
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
S upgradovaným rozhraním příkazového řádku a novou skupinou prostředků můžete vytvořit prostředí kontejnerových aplikací a nasadit aplikaci typu kontejner.
Vytvoření prostředí
Prostředí Azure Container Apps slouží jako hranice izolace mezi skupinou kontejnerových aplikací. Aplikace kontejneru nasazené do stejného prostředí jsou nasazené ve stejné virtuální síti a protokoly zápisu do stejného Log Analytics pracovního prostoru.
Azure Log Analytics slouží k monitorování aplikace typu kontejner a vyžaduje se při vytváření prostředí kontejnerových aplikací.
Pomocí následujícího příkazu vytvořte nový pracovní prostor Log Analytics:
az monitor log-analytics workspace create \
--resource-group $RESOURCE_GROUP \
--workspace-name $LOG_ANALYTICS_WORKSPACE
Dále načtěte ID klienta Log Analytics a tajný klíč klienta.
Ujistěte se, že každý dotaz spouštíte samostatně, abyste měli dostatek času na dokončení žádosti.
LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az monitor log-analytics workspace show --query customerId -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`
LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET=`az monitor log-analytics workspace get-shared-keys --query primarySharedKey -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`
Jednotlivé aplikace kontejneru se nasazují do prostředí Azure Container Apps. Chcete-li vytvořit prostředí, spusťte následující příkaz:
az containerapp env create \
--name $CONTAINERAPPS_ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--logs-workspace-id $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
--logs-workspace-key $LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET \
--location "$LOCATION"
Nastavení úložiště stavů
vytvoření účtu Azure Blob Storage
pomocí následujícího příkazu vytvořte nový účet Azure Storage.
az storage account create \
--name $STORAGE_ACCOUNT \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION" \
--sku Standard_RAGRS \
--kind StorageV2
po vytvoření účtu Azure Blob Storage se pro další kroky v tomto kurzu vyžadují následující hodnoty.
storage_account_nameje hodnotaSTORAGE_ACCOUNTproměnné, kterou jste zvolili výše.storage_container_nameje hodnotaSTORAGE_ACCOUNT_CONTAINERdefinovaná výše (napříkladmycontainer). Dapr vytvoří kontejner s tímto názvem, pokud ještě v účtu Azure Storage neexistuje.
Pomocí následujícího příkazu Získejte klíč účtu úložiště.
STORAGE_ACCOUNT_KEY=`az storage account keys list --resource-group $RESOURCE_GROUP --account-name $STORAGE_ACCOUNT --query '[0].value' --out tsv`
echo $STORAGE_ACCOUNT_KEY
Konfigurace součásti úložiště stavů
Pomocí vlastností, které jste najmenovali v předchozích krocích, vytvořte konfigurační soubor s názvem Components. yaml. Tento soubor pomáhá aplikaci Dapr povolit přístup k vašemu úložišti stavů. následující příklad ukazuje, jak by měl soubor components. yaml vypadat, když je nakonfigurovaný pro váš účet Azure Blob Storage:
# components.yaml for Azure Blob storage component
- name: statestore
type: state.azure.blobstorage
version: v1
metadata:
# Note that in a production scenario, account keys and secrets
# should be securely stored. For more information, see
# https://docs.dapr.io/operations/components/component-secrets
- name: accountName
value: <YOUR_STORAGE_ACCOUNT_NAME>
- name: accountKey
value: <YOUR_STORAGE_ACCOUNT_KEY>
- name: containerName
value: <YOUR_STORAGE_CONTAINER_NAME>
Chcete-li použít tento soubor, nezapomeňte nahradit hodnoty zástupných symbolů mezi <> závorkami vlastními hodnotami.
Poznámka
Aplikace kontejneru v současné době nepodporuje nativní schéma komponent Dapr. Výše uvedený příklad používá podporované schéma.
V aplikaci produkčního prostředí postupujte podle pokynů pro správu tajných kódů pro bezpečnou správu tajných kódů.
Nasazení aplikace služby (webový server HTTP)
Přejděte do adresáře, kam jste uložili soubor Components. yaml a spusťte následující příkaz, který nasadí aplikaci kontejneru služby.
az containerapp create \
--name nodeapp \
--resource-group $RESOURCE_GROUP \
--environment $CONTAINERAPPS_ENVIRONMENT \
--image dapriosamples/hello-k8s-node:latest \
--target-port 3000 \
--ingress 'external' \
--min-replicas 1 \
--max-replicas 1 \
--enable-dapr \
--dapr-app-port 3000 \
--dapr-app-id nodeapp \
--dapr-components ./components.yaml
Tento příkaz nasadí server aplikace služby (Node) na --target-port 3000 (port aplikace) spolu s příslušným Daprm postranním vozíkem nakonfigurovaným pomocí --dapr-app-id nodeapp a --dapr-app-port 3000 pro zjišťování a vyvolání služby. Vaše úložiště stavů je nakonfigurované pomocí --dapr-components ./components.yaml , což umožňuje, aby mohl postranní vozík zachovat stav.
Nasazení klientské aplikace (bezobslužný klient)
Spusťte následující příkaz pro nasazení aplikace kontejneru klienta.
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
Tento příkaz nasadí pythonapp , že se také spouští s postranním vozíkem Dapr, který slouží k vyhledání a bezpečnému volání Daprho vozíku pro nodeapp . Vzhledem k tomu, že je tato aplikace bez periferních zařízení --target-port , nemusíte spouštět Server, není ale nutné povolit příchozí přenos dat.
Ověřit výsledek
Potvrdit trvalost stavu úspěšné
správné fungování služeb můžete ověřit zobrazením dat v účtu Azure Storage.
Otevřete Azure Portal v prohlížeči a přejděte k účtu úložiště.
Vyberte kontejnery vlevo.
Vyberte myContainer.
Ověřte, že se v kontejneru zobrazí
ordersoubor s názvem .Klikněte na soubor .
Klikněte na kartu Upravit.
Klikněte na tlačítko Aktualizovat a sledujte, jak se data automaticky aktualizují.
Zobrazit protokoly
Data protokolovaná prostřednictvím aplikace kontejneru se ukládají ve ContainerAppConsoleLogs_CL vlastní tabulce v pracovním prostoru služby Log Analytics. Protokoly můžete zobrazit prostřednictvím Azure Portal nebo pomocí rozhraní příkazového řádku. Možná budete muset několik minut počkat, než se analýza poprvé objeví, než budete moct zaprotokolovaná data dotazovat.
K zobrazení protokolů na příkazovém řádku použijte následující příkaz rozhraní příkazového řádku.
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 | take 5" \
--out table
Následující výstup ukazuje typ odpovědi, která se má očekávat od příkazu rozhraní příkazového řádku.
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
Tip
Máte problémy? Dejte nám vědět o GitHub otevřením problému v úložiště Azure Container Apps.
Vyčištění prostředků
Jakmile budete hotovi, vyčistěte prostředky aplikace kontejneru spuštěním následujícího příkazu, kterým odstraníte skupinu prostředků.
az group delete \
--resource-group $RESOURCE_GROUP
Tento příkaz odstraní aplikace kontejneru, účet úložiště, prostředí aplikací kontejnerů a všechny další prostředky ve skupině prostředků.
Poznámka
Vzhledem k tomu, že průběžně volá metody se zprávami, které se uchová v nakonfigurovaných stavových obchodech, je důležité tyto kroky vyčištění dokončit, abyste se vyhnuli průběžným pythonapp nodeapp fakturovatelným operacím.