Share via


Zelfstudie: Een toepassing voor achtergrondverwerking implementeren met Azure Container Apps

Met Azure Container Apps kunt u toepassingen implementeren zonder dat openbare eindpunten hoeven te worden blootgesteld. Met behulp van Container Apps-schaalregels kan de toepassing worden uitgeschaald en ingeschaald op basis van de lengte van de Azure Storage-wachtrij. Wanneer er geen berichten in de wachtrij staan, wordt de container-app ingeschaald naar nul.

U leert het volgende:

  • Een Container Apps-omgeving maken om uw container-apps te implementeren
  • Een Azure Storage-wachtrij maken om berichten naar de container-app te verzenden
  • Uw toepassing voor achtergrondverwerking implementeren als een container-app
  • Controleer of de wachtrijberichten worden verwerkt door de container-app

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.

az extension add --name containerapp --upgrade

Nu de huidige extensie of module is geïnstalleerd, registreert u de Microsoft.App en Microsoft.OperationalInsights naamruimten.

Notitie

Azure Container Apps-resources zijn gemigreerd van de Microsoft.Web naamruimte naar de Microsoft.App naamruimte. Raadpleeg de naamruimtemigratie van Microsoft.Web naar Microsoft.App in maart 2022 voor meer informatie.

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

Omgevingsvariabelen instellen

Stel de volgende omgevingsvariabelen in. Vervang <TIJDELIJKE AANDUIDINGEN> 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 opslagwachtrij instellen

Begin met het definiëren van een naam voor het opslagaccount. Namen van opslagaccounts moeten uniek zijn binnen Azure en mogen uit 3 tot 24 tekens bestaan die alleen cijfers en kleine letters bevatten.

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

Een Azure Storage-account maken.

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

Haal vervolgens de verbindingsreeks voor de wachtrij op.

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

U kunt nu de berichtenwachtrij maken.

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

Ten slotte kunt u een bericht naar de wachtrij verzenden.

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

De achtergrondtoepassing implementeren

Maak een bestand met de naam queue.json en plak de volgende configuratiecode in het bestand.

{
    "$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"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }]
}

U kunt nu uw container-app maken en implementeren.

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

Met deze opdracht wordt de demotoepassing geïmplementeerd vanuit de openbare containerinstallatiekopieën die geheimen en omgevingsvariabelen worden aangeroepen mcr.microsoft.com/azuredocs/containerapps-queuereader en ingesteld die door de toepassing worden gebruikt.

De toepassing wordt uitgeschaald naar 10 replica's op basis van de lengte van de wachtrij, zoals gedefinieerd in de scale sectie van de ARM-sjabloon.

Het resultaat controleren

De container-app wordt uitgevoerd als achtergrondproces. Wanneer berichten afkomstig zijn uit de Azure Storage-wachtrij, worden logboekvermeldingen gemaakt in Log Analytics. U moet enkele minuten wachten totdat de analyse voor het eerst aankomt voordat u een query kunt uitvoeren op de vastgelegde gegevens.

Voer de volgende opdracht uit om vastgelegde berichten weer te geven. Voor deze opdracht is de Log Analytics-extensie vereist. Accepteer daarom de prompt om de extensie te installeren wanneer dit wordt aangevraagd.

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

Tip

Ondervindt u problemen? Laat het ons weten op GitHub door een probleem te openen in de Azure Container Apps-opslagplaats.

Resources opschonen

Wanneer u klaar bent, voert u de volgende opdracht uit om de resourcegroep te verwijderen die uw Container Apps-resources bevat.

Let op

Met de volgende 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