Samouczek: wdrażanie aplikacji przetwarzania w tle za pomocą usługi Azure Container Apps

Korzystanie z usługi Azure Container Apps umożliwia wdrażanie aplikacji bez konieczności ujawniania publicznych punktów końcowych. Za pomocą reguł skalowania usługi Container Apps aplikacja może skalować w poziomie i w oparciu o długość kolejki usługi Azure Storage. Jeśli w kolejce nie ma żadnych komunikatów, aplikacja kontenera jest skalowana do zera.

Dowiedz się, jak odbywa się:

  • Tworzenie środowiska usługi Container Apps w celu wdrożenia aplikacji kontenera
  • Tworzenie kolejki usługi Azure Storage w celu wysyłania komunikatów do aplikacji kontenera
  • Wdrażanie aplikacji przetwarzania w tle jako aplikacji kontenera
  • Sprawdź, czy komunikaty kolejki są przetwarzane przez aplikację kontenera

Ustawienia

Aby zalogować się do platformy Azure z poziomu interfejsu wiersza polecenia, uruchom następujące polecenie i postępuj zgodnie z monitami, aby ukończyć proces uwierzytelniania.

az login

Aby upewnić się, że używasz najnowszej wersji interfejsu wiersza polecenia, uruchom polecenie uaktualniania.

az upgrade

Następnie zainstaluj lub zaktualizuj rozszerzenie usługi Azure Container Apps dla interfejsu wiersza polecenia.

az extension add --name containerapp --upgrade

Teraz, po zainstalowaniu bieżącego rozszerzenia lub modułu Microsoft.App , zarejestruj przestrzenie nazw i Microsoft.OperationalInsights .

Uwaga

Zasoby usługi Azure Container Apps zostały zmigrowane z Microsoft.Web przestrzeni nazw do Microsoft.App przestrzeni nazw. Aby uzyskać więcej informacji, zobacz Migracja przestrzeni nazw z witryny Microsoft.Web do Microsoft.App w marcu 2022 r.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Ustawianie zmiennych środowiskowych

Ustaw następujące zmienne środowiskowe. Zastąp <symbole> ZASTĘPCZE wartościami:

RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"

Tworzenie grupy zasobów platformy Azure

Utwórz grupę zasobów, aby zorganizować usługi związane z wdrożeniem aplikacji kontenera.

az group create \
  --name $RESOURCE_GROUP \
  --location "$LOCATION"

Utwórz środowisko

Środowisko w usłudze Azure Container Apps tworzy bezpieczną granicę wokół grupy aplikacji kontenera. Aplikacje kontenera wdrożone w tym samym środowisku są wdrażane w tej samej sieci wirtualnej i zapisują dzienniki w tym samym obszarze roboczym usługi Log Analytics.

Aby utworzyć środowisko, uruchom następujące polecenie:

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION"

Konfigurowanie kolejki magazynu

Zacznij od zdefiniowania nazwy konta magazynu. Nazwy kont magazynu muszą być unikatowe na platformie Azure i mieć długość od 3 do 24 znaków zawierających tylko cyfry i małe litery.

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

Tworzenie konta usługi Azure Storage.

az storage account create \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

Następnie pobierz parametry połączenia dla kolejki.

QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --out json | tr -d '"'`

Teraz możesz utworzyć kolejkę komunikatów.

az storage queue create \
  --name "myqueue" \
  --account-name $STORAGE_ACCOUNT_NAME \
  --connection-string $QUEUE_CONNECTION_STRING

Na koniec możesz wysłać komunikat do kolejki.

az storage message put \
  --content "Hello Queue Reader App" \
  --queue-name "myqueue" \
  --connection-string $QUEUE_CONNECTION_STRING

Wdrażanie aplikacji w tle

Utwórz plik o nazwie queue.json i wklej następujący kod konfiguracji do pliku.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "defaultValue": "canadacentral",
            "type": "String"
        },
        "environment_name": {
            "type": "String"
        },
        "queueconnection": {
            "type": "secureString"
        }
    },
    "variables": {},
    "resources": [
    {
        "name": "queuereader",
        "type": "Microsoft.App/containerApps",
        "apiVersion": "2022-03-01",
        "kind": "containerapp",
        "location": "[parameters('location')]",
        "properties": {
            "managedEnvironmentId": "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]",
            "configuration": {
                "activeRevisionsMode": "single",
                "secrets": [
                {
                    "name": "queueconnection",
                    "value": "[parameters('queueconnection')]"
                }]
            },
            "template": {
                "containers": [
                    {
                        "image": "mcr.microsoft.com/azuredocs/containerapps-queuereader",
                        "name": "queuereader",
                        "env": [
                            {
                                "name": "QueueName",
                                "value": "myqueue"
                            },
                            {
                                "name": "QueueConnectionString",
                                "secretRef": "queueconnection"
                            }
                        ]
                    }
                ],
                "scale": {
                    "minReplicas": 1,
                    "maxReplicas": 10,
                    "rules": [
                        {
                            "name": "myqueuerule",
                            "azureQueue": {
                                "queueName": "myqueue",
                                "queueLength": 100,
                                "auth": [
                                    {
                                        "secretRef": "queueconnection",
                                        "triggerParameter": "connection"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }]
}

Teraz możesz utworzyć i wdrożyć aplikację kontenera.

az deployment group create --resource-group "$RESOURCE_GROUP" \
  --template-file ./queue.json \
  --parameters \
    environment_name="$CONTAINERAPPS_ENVIRONMENT" \
    queueconnection="$QUEUE_CONNECTION_STRING" \
    location="$LOCATION"

To polecenie umożliwia wdrożenie aplikacji demonstracyjnej z obrazu kontenera publicznego o nazwie mcr.microsoft.com/azuredocs/containerapps-queuereader i ustawia zmienne wpisów tajnych i środowisk używanych przez aplikację.

Aplikacja skaluje w poziomie do 10 replik na podstawie długości kolejki zgodnie z definicją w scale sekcji szablonu usługi ARM.

Weryfikowanie wyniku

Aplikacja kontenera jest uruchamiana jako proces w tle. Gdy komunikaty docierają z kolejki usługi Azure Storage, aplikacja tworzy wpisy dziennika w usłudze Log Analytics. Zanim będzie można wykonać zapytanie dotyczące zarejestrowanych danych, musisz poczekać kilka minut na odebranie analizy po raz pierwszy.

Uruchom następujące polecenie, aby wyświetlić zarejestrowane komunikaty. To polecenie wymaga rozszerzenia usługi Log Analytics, dlatego po zażądaniu zaakceptuj monit o zainstalowanie rozszerzenia.

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 == 'queuereader' and Log_s contains 'Message ID' | project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Container=ContainerName_s, Message=Log_s | take 5" \
  --out table

Napiwek

Masz problemy? Poinformuj nas o usłudze GitHub, otwierając problem w repozytorium usługi Azure Container Apps.

Czyszczenie zasobów

Po zakończeniu uruchom następujące polecenie, aby usunąć grupę zasobów zawierającą zasoby usługi Container Apps.

Uwaga

Następujące polecenie usuwa określoną grupę zasobów i wszystkie zawarte w niej zasoby. Jeśli zasoby spoza zakresu tego samouczka istnieją w określonej grupie zasobów, zostaną również usunięte.

az group delete \
  --resource-group $RESOURCE_GROUP