Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
- Hiermee wordt één bericht uit de wachtrij opgehaald.
- Registreert het bericht in de taakuitvoeringslogboeken.
- Hiermee verwijdert u het bericht uit de wachtrij.
- 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
- Een Azure-account met een actief abonnement. Als u geen account hebt, kunt u er gratis een maken.
- De Azure CLI.
Zie Takenbeperkingen voor informatie over functies die Container Apps-taken niet ondersteunen.
De omgeving voorbereiden
Als u zich wilt aanmelden bij Azure vanuit de Azure CLI, voert u de volgende opdracht uit en volgt u de aanwijzingen om het verificatieproces te voltooien.
az loginZorg ervoor dat u de nieuwste versie van de Azure CLI uitvoert via de
az upgradeopdracht.az upgradeInstalleer de nieuwste versie van de Container Apps CLI-extensie.
az extension add --name containerapp --upgradeRegistreer de
Microsoft.App,Microsoft.OperationalInsightsenMicrosoft.Storagenaamruimten als ze nog niet zijn geregistreerd in uw Azure-abonnement.az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights az provider register --namespace Microsoft.StorageDefinieer de omgevingsvariabelen 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 Container Apps-omgeving fungeert als een isolatiegrens rond container-apps en -taken, zodat ze hetzelfde netwerk kunnen delen en met elkaar kunnen communiceren.
Maak een resourcegroep met behulp van de volgende opdracht.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"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.
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.Een Azure Storage-account maken.
az storage account create \ --name "$STORAGE_ACCOUNT_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Standard_LRS \ --kind StorageV2Als deze opdracht de fout retourneert:
(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.Zorg ervoor dat u de
Microsoft.Storagenaamruimte in uw Azure-abonnement hebt geregistreerd.az provider register --namespace Microsoft.StorageSla 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)Maak de berichtenwachtrij.
az storage queue create \ --name "$QUEUE_NAME" \ --account-name "$STORAGE_ACCOUNT_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
Een door de gebruiker toegewezen beheerde identiteit maken
Als u wilt voorkomen dat u beheerdersreferenties gebruikt, haalt u installatiekopieën op uit privéopslagplaatsen in Microsoft Azure Container Registry met behulp van beheerde identiteiten voor verificatie. Gebruik indien mogelijk een door de gebruiker toegewezen beheerde identiteit om installatiekopieën op te halen.
Maak een door de gebruiker toegewezen beheerde identiteit. Voordat u de volgende opdrachten uitvoert, kiest u een naam voor uw beheerde identiteit en vervangt u deze
\<PLACEHOLDER\>door de naam.IDENTITY="<YOUR_IDENTITY_NAME>"az identity create \ --name $IDENTITY \ --resource-group $RESOURCE_GROUPHaal de resource-id van de identiteit op.
IDENTITY_ID=$(az identity show \ --name $IDENTITY \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
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.
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.Maak een containerregister.
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku BasicUw containerregister moet azure Resource Manager-doelgroeptokens (ARM) toestaan voor verificatie om beheerde identiteit te kunnen gebruiken om installatiekopieën op te halen.
Gebruik de volgende opdracht om te controleren of ARM-tokens toegang hebben tot uw Azure Container Registry (ACR).
az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"Als ARM-tokens zijn toegestaan, voert de opdracht het volgende uit.
{ "status": "enabled" }Als dit het
statusisdisabled, staat u ARM-tokens toe met de volgende opdracht.az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabledDe 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 buildopdracht.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.
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" \ --mi-user-assigned "$IDENTITY_ID" \ --registry-identity "$IDENTITY_ID" \ --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-timeoutDe maximale duur die een replica kan uitvoeren. --min-executionsHet minimale aantal taakuitvoeringen dat moet worden uitgevoerd per polling-interval. --max-executionsHet maximum aantal taakuitvoeringen dat per polling-interval moet worden uitgevoerd. --polling-intervalHet polling-interval waarmee de schaalregel moet worden geëvalueerd. --scale-rule-nameDe naam van de schaalregel. --scale-rule-typeHet type schaalregel dat moet worden gebruikt. --scale-rule-metadataDe metagegevens voor de schaalregel. --scale-rule-authDe verificatie voor de schaalregel. --secretsDe geheimen die voor de taak moeten worden gebruikt. --registry-serverDe containerregisterserver die moet worden gebruikt voor de taak. Voor een Azure Container Registry configureert de opdracht automatisch verificatie. --mi-user-assignedDe resource-id van de door de gebruiker toegewezen beheerde identiteit die aan de taak moet worden toegewezen. --registry-identityDe resource-id van een beheerde identiteit die moet worden geverifieerd met de registerserver in plaats van een gebruikersnaam en wachtwoord te gebruiken. Indien mogelijk wordt er automatisch een 'acrpull'-roltoewijzing gemaakt voor de identiteit. --env-varsDe 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.
Een bericht naar de wachtrij verzenden.
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"Geef de uitvoeringen van een taak weer.
az containerapp job execution list \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --output jsonOmdat 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.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 --output 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_CLtabel 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