Delen via


Zelfstudie: Een gebeurtenisgestuurde taak implementeren met Azure Container Apps

Met Azure Container Apps-taken kunt u containertaken uitvoeren die worden uitgevoerd voor een eindige duur en afsluiten. U kunt een taakuitvoering handmatig, volgens een planning of op basis van gebeurtenissen activeren. Taken zijn het meest geschikt voor taken zoals gegevensverwerking, machine learning, het opschonen van resources of scenario's waarvoor serverloze tijdelijke rekenresources zijn vereist.

In deze zelfstudie leert u hoe u kunt werken met gebeurtenisgestuurde taken.

  • Een Container Apps-omgeving maken om uw container-apps te implementeren
  • Een Azure Storage-wachtrij maken om berichten naar de container-app te verzenden
  • Een containerinstallatiekopieën bouwen waarmee een taak wordt uitgevoerd
  • De taak implementeren in de Container Apps-omgeving
  • Controleer of de wachtrijberichten worden verwerkt door de container-app

De taak die u maakt, start een uitvoering voor elk bericht dat naar een Azure Storage-wachtrij wordt verzonden. Elke taakuitvoering voert een container uit die de volgende stappen uitvoert:

  1. Hiermee wordt één bericht uit de wachtrij opgehaald.
  2. Registreert het bericht in de taakuitvoeringslogboeken.
  3. Hiermee verwijdert u het bericht uit de wachtrij.
  4. Uitgangen.

Belangrijk

De scaler bewaakt de lengte van de wachtrij om te bepalen hoeveel taken moeten worden gestart. Verwijder voor nauwkeurige schaalaanpassing geen bericht uit de wachtrij totdat de uitvoering van de taak is voltooid.

De broncode voor de taak die u in deze zelfstudie uitvoert, is beschikbaar in een GitHub-opslagplaats met Azure Samples.

Vereisten

Instellingen

  1. 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
    
  2. Zorg ervoor dat u de nieuwste versie van de CLI uitvoert via de upgradeopdracht.

    az upgrade
    
  3. Installeer de nieuwste versie van de Azure Container Apps CLI-extensie.

    az extension add --name containerapp --upgrade
    
  4. Registreer de Microsoft.App en Microsoft.OperationalInsights naamruimten als u deze nog niet hebt geregistreerd in uw Azure-abonnement.

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    
  5. Nu uw Azure CLI-installatie is voltooid, kunt u de omgevingsvariabelen definiëren die in dit artikel worden gebruikt.

    RESOURCE_GROUP="jobs-quickstart"
    LOCATION="northcentralus"
    ENVIRONMENT="env-jobs-quickstart"
    JOB_NAME="my-job"
    

Een Container Apps-omgeving maken

De Azure Container Apps-omgeving fungeert als een veilige grens rond container-apps en -taken, zodat ze hetzelfde netwerk kunnen delen en met elkaar kunnen communiceren.

  1. Gebruik de volgende opdracht om een resourcegroep te maken.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. Maak de Container Apps-omgeving met behulp van de volgende opdracht.

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

Een opslagwachtrij instellen

De taak maakt gebruik van een Azure Storage-wachtrij om berichten te ontvangen. In deze sectie maakt u een opslagaccount en een wachtrij.

  1. Definieer een naam voor uw opslagaccount.

    STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"
    QUEUE_NAME="myqueue"
    

    Vervang door <STORAGE_ACCOUNT_NAME> een unieke naam voor uw opslagaccount. Namen van opslagaccounts moeten uniek zijn binnen Azure en mogen uit 3 tot 24 tekens bestaan die alleen cijfers en kleine letters bevatten.

  2. Een Azure Storage-account maken.

    az storage account create \
        --name "$STORAGE_ACCOUNT_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Standard_LRS \
        --kind StorageV2
    
  3. Sla de verbindingsreeks van de wachtrij op in een variabele.

    QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv`
    
  4. Maak de berichtenwachtrij.

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

De taak bouwen en implementeren

Als u de taak wilt implementeren, moet u eerst een containerinstallatiekopieën voor de taak bouwen en naar een register pushen. Vervolgens kunt u de taak implementeren in de Container Apps-omgeving.

  1. Definieer een naam voor de containerinstallatiekopieën en het register.

    CONTAINER_IMAGE_NAME="queue-reader-job:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    Vervang door <CONTAINER_REGISTRY_NAME> een unieke naam voor uw containerregister. Containerregisternamen moeten uniek zijn binnen Azure en mogen uit 5 tot 50 tekens bestaan die alleen cijfers en kleine letters bevatten.

  2. Maak een containerregister.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic \
        --admin-enabled true
    
  3. De broncode voor de taak is beschikbaar op GitHub. Voer de volgende opdracht uit om de opslagplaats te klonen en de containerinstallatiekopieën in de cloud te bouwen met behulp van de az acr build opdracht.

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        "https://github.com/Azure-Samples/container-apps-event-driven-jobs-tutorial.git"
    

    De installatiekopieën zijn nu beschikbaar in het containerregister.

  4. Maak een taak in de Container Apps-omgeving.

    az containerapp job create \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --environment "$ENVIRONMENT" \
        --trigger-type "Event" \
        --replica-timeout "1800" \
        --min-executions "0" \
        --max-executions "10" \
        --polling-interval "60" \
        --scale-rule-name "queue" \
        --scale-rule-type "azure-queue" \
        --scale-rule-metadata "accountName=$STORAGE_ACCOUNT_NAME" "queueName=$QUEUE_NAME" "queueLength=1" \
        --scale-rule-auth "connection=connection-string-secret" \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --cpu "0.5" \
        --memory "1Gi" \
        --secrets "connection-string-secret=$QUEUE_CONNECTION_STRING" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io" \
        --env-vars "AZURE_STORAGE_QUEUE_NAME=$QUEUE_NAME" "AZURE_STORAGE_CONNECTION_STRING=secretref:connection-string-secret"
    

    In de volgende tabel worden de belangrijkste parameters beschreven die in de opdracht worden gebruikt.

    Parameter Description
    --replica-timeout De maximale duur die een replica kan uitvoeren.
    --min-executions Het minimale aantal taakuitvoeringen dat moet worden uitgevoerd per polling-interval.
    --max-executions Het maximum aantal taakuitvoeringen dat per polling-interval moet worden uitgevoerd.
    --polling-interval Het polling-interval waarmee de schaalregel moet worden geëvalueerd.
    --scale-rule-name De naam van de schaalregel.
    --scale-rule-type Het type schaalregel dat moet worden gebruikt.
    --scale-rule-metadata De metagegevens voor de schaalregel.
    --scale-rule-auth De verificatie voor de schaalregel.
    --secrets De geheimen die voor de taak moeten worden gebruikt.
    --registry-server De containerregisterserver die moet worden gebruikt voor de taak. Voor een Azure Container Registry configureert de opdracht automatisch verificatie.
    --env-vars De omgevingsvariabelen die voor de taak moeten worden gebruikt.

    De configuratie van de schaalregel definieert de gebeurtenisbron die moet worden bewaakt. Het wordt geëvalueerd op elk polling-interval en bepaalt hoeveel taakuitvoeringen moeten worden geactiveerd. Zie Regels voor schalen instellen voor meer informatie.

De gebeurtenisgestuurde taak wordt nu gemaakt in de Container Apps-omgeving.

De implementatie controleren

De taak is geconfigureerd om de schaalregel elke 60 seconden te evalueren, waarmee het aantal berichten in de wachtrij wordt gecontroleerd. Voor elke evaluatieperiode wordt een nieuwe taakuitvoering gestart voor elk bericht in de wachtrij, maximaal 10 uitvoeringen.

Als u wilt controleren of de taak correct is geconfigureerd, kunt u enkele berichten naar de wachtrij verzenden, bevestigen dat taakuitvoeringen zijn gestart en worden de berichten geregistreerd in de taakuitvoeringslogboeken.

  1. Een bericht naar de wachtrij verzenden.

    az storage message put \
        --content "Hello Queue Reader Job" \
        --queue-name "$QUEUE_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    
  2. Geef de uitvoeringen van een taak weer.

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output json
    

    Omdat de taak is geconfigureerd om de schaalregel elke 60 seconden te evalueren, kan het tot een volledige minuut duren voordat de taak wordt uitgevoerd. Herhaal de opdracht totdat u de taakuitvoering ziet en de status ervan is Succeeded.

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

    LOG_ANALYTICS_WORKSPACE_ID=`az containerapp env show --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
    
    az monitor log-analytics query \
        --workspace "$LOG_ANALYTICS_WORKSPACE_ID" \
        --analytics-query "ContainerAppConsoleLogs_CL | where ContainerJobName_s == '$JOB_NAME' | order by _timestamp_d asc"
    

    Totdat de ContainerAppConsoleLogs_CL tabel gereed is, retourneert de opdracht een fout: BadArgumentError: The request had some invalid properties. Wacht een paar minuten en probeer het opnieuw.

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

Volgende stappen