Megosztás a következőn keresztül:


Oktatóanyag: Eseményvezérelt feladat üzembe helyezése az Azure Container Apps használatával

Az Azure Container Apps-feladatok lehetővé teszik olyan tárolóalapú feladatok futtatását, amelyek véges időtartamra és kilépésre hajthatók végre. A feladatok végrehajtását manuálisan, ütemezés szerint vagy események alapján is elindíthatja. A feladatok olyan feladatokhoz ideálisak, mint az adatfeldolgozás, a gépi tanulás, az erőforrás-törlés vagy bármely olyan forgatókönyv, amely kiszolgáló nélküli számítási erőforrásokat igényel.

Ebben az oktatóanyagban megtudhatja, hogyan dolgozhat eseményvezérelt feladatokkal.

  • Container Apps-környezet létrehozása a tárolóalkalmazások üzembe helyezéséhez
  • Azure Storage-üzenetsor létrehozása üzenetek küldéséhez a tárolóalkalmazásba
  • Feladatokat futtató tárolórendszerkép létrehozása
  • A feladat üzembe helyezése a Container Apps-környezetben
  • Ellenőrizze, hogy a tárolóalkalmazás feldolgozta-e az üzenetsor-üzeneteket

A létrehozott feladat végrehajtást indít el az Azure Storage-üzenetsorba küldött minden egyes üzenethez. Minden feladat végrehajtása egy tárolót futtat, amely a következő lépéseket hajtja végre:

  1. Egy üzenetet kap az üzenetsorból.
  2. Naplózza az üzenetet a feladat végrehajtási naplóiba.
  3. Törli az üzenetet az üzenetsorból.
  4. Kilép.

Fontos

A skálázó figyeli az üzenetsor hosszát annak meghatározásához, hogy hány feladatot kell kezdeni. A pontos skálázás érdekében ne töröljön üzenetet az üzenetsorból, amíg a feladat végrehajtása nem fejeződött be.

Az oktatóanyagban futtatott feladat forráskódja egy Azure Samples GitHub-adattárban érhető el.

Előfeltételek

Beállítás

  1. Ha a parancssori felületről szeretne bejelentkezni az Azure-ba, futtassa a következő parancsot, és kövesse az utasításokat a hitelesítési folyamat befejezéséhez.

    az login
    
  2. Győződjön meg arról, hogy a parancssori felület legújabb verzióját futtatja a frissítési paranccsal.

    az upgrade
    
  3. Telepítse az Azure Container Apps CLI-bővítmény legújabb verzióját.

    az extension add --name containerapp --upgrade
    
  4. Regisztrálja a Microsoft.App, Microsoft.OperationalInsightsés Microsoft.Storage a névtereket, ha még nem regisztrálta őket az Azure-előfizetésében.

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    az provider register --namespace Microsoft.Storage
    
  5. Most, hogy az Azure CLI beállítása befejeződött, meghatározhatja a jelen cikkben használt környezeti változókat.

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

Container Apps-környezet létrehozása

Az Azure Container Apps-környezet biztonságos határként működik a tárolóalkalmazások és -feladatok körül, így megoszthatják ugyanazt a hálózatot, és kommunikálhatnak egymással.

  1. Az erőforráscsoport létrehozásához használja az alábbi parancsot.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. Hozza létre a Container Apps-környezetet az alábbi paranccsal.

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

Tárolási üzenetsor beállítása

A feladat egy Azure Storage-üzenetsort használ az üzenetek fogadásához. Ebben a szakaszban létrehoz egy tárfiókot és egy üzenetsort.

  1. Adjon nevet a tárfióknak.

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

    Cserélje le <STORAGE_ACCOUNT_NAME> a tárfiók egyedi nevére. A tárfiókok nevének egyedinek kell lennie az Azure-ban , és csak számokból és kisbetűkből álló 3–24 karakter hosszúságúnak kell lennie.

  2. Azure Storage-fiók létrehozása.

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

    Ha ez a parancs a következő hibát adja vissza:

    (SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found.
    Code: SubscriptionNotFound
    Message: Subscription <SUBSCRIPTION_ID> was not found.
    

    Győződjön meg arról, hogy regisztrálta a névteret az Microsoft.Storage Azure-előfizetésében.

    az provider register --namespace Microsoft.Storage
    
  3. Mentse az üzenetsor kapcsolati sztring egy változóba.

    QUEUE_CONNECTION_STRING=$(az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv)
    
  4. Hozza létre az üzenetsort.

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

Felhasználó által hozzárendelt felügyelt identitás létrehozása

A rendszergazdai hitelesítő adatok használatának elkerülése érdekében kérje le a rendszerképeket a Microsoft Azure Container Registry privát adattáraiból felügyelt identitások használatával a hitelesítéshez. Ha lehetséges, a rendszerképek lekéréséhez használjon felhasználó által hozzárendelt felügyelt identitást.

  1. Hozzon létre egy felhasználó által hozzárendelt felügyelt identitást. A következő parancsok futtatása előtt válasszon nevet a felügyelt identitásnak, és cserélje le a \<PLACEHOLDER\> nevet.

    IDENTITY="<YOUR_IDENTITY_NAME>"
    
    az identity create \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP
    
  2. Kérje le az identitás erőforrás-azonosítóját.

    IDENTITY_ID=$(az identity show \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    

A feladat létrehozása és üzembe helyezése

A feladat üzembe helyezéséhez először létre kell készítenie egy tárolórendszerképet a feladathoz, majd le kell küldenie egy beállításjegyzékbe. Ezután üzembe helyezheti a feladatot a Container Apps-környezetben.

  1. Adjon nevet a tárolórendszerképnek és a beállításjegyzéknek.

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

    Cserélje le <CONTAINER_REGISTRY_NAME> a tárolóregisztrációs adatbázis egyedi nevére. A tárolóregisztrációs adatbázis nevének egyedinek kell lennie az Azure-ban , és csak számokból és kisbetűkből álló 5–50 karakter hosszúságúnak kell lennie.

  2. Hozzon létre egy tárolóregisztrációs adatbázist.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic
    
  3. A tárolóregisztrációs adatbázisnak engedélyeznie kell az Azure Resource Manager (ARM) célközönség-jogkivonatait a hitelesítéshez, hogy felügyelt identitással lekérhesse a rendszerképeket.

    Az alábbi paranccsal ellenőrizze, hogy az ARM-jogkivonatok hozzáférnek-e az Azure Container Registryhez (ACR).

    az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"
    

    Ha az ARM-jogkivonatok engedélyezettek, a parancs a következőket adja eredményül.

    {
      "status": "enabled"
    }
    

    Ha igendisabled, engedélyezze az status ARM-jogkivonatokat az alábbi paranccsal.

    az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabled
    
  4. A feladat forráskódja elérhető a GitHubon. Futtassa a következő parancsot az adattár klónozásához és a tárolólemezkép felhőben való létrehozásához a az acr build parancs használatával.

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

    A rendszerkép már elérhető a tárolóregisztrációs adatbázisban.

  5. Hozzon létre egy feladatot a Container Apps-környezetben.

    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"
    

    Az alábbi táblázat a parancsban használt kulcsparamétereket ismerteti.

    Paraméter Leírás
    --replica-timeout A replika végrehajtásának maximális időtartama.
    --min-executions A lekérdezési időközönként futtatandó feladatvégrehajtások minimális száma.
    --max-executions A lekérdezési időközönként futtatandó feladatvégrehajtások maximális száma.
    --polling-interval A skálázási szabály kiértékelésének időköze.
    --scale-rule-name A méretezési szabály neve.
    --scale-rule-type A használni kívánt méretezési szabály típusa.
    --scale-rule-metadata A méretezési szabály metaadatai.
    --scale-rule-auth A méretezési szabály hitelesítése.
    --secrets A feladathoz használandó titkos kódok.
    --registry-server A feladathoz használni kívánt tárolóregisztrációs adatbázis-kiszolgáló. Azure Container Registry esetén a parancs automatikusan konfigurálja a hitelesítést.
    --mi-user-assigned A feladathoz rendelendő, felhasználó által hozzárendelt felügyelt identitás erőforrás-azonosítója.
    --registry-identity Egy felügyelt identitás erőforrás-azonosítója, amely felhasználónév és jelszó használata helyett a beállításjegyzék-kiszolgálóval hitelesíthető. Ha lehetséges, a rendszer automatikusan létrehoz egy "acrpull" szerepkör-hozzárendelést az identitáshoz.
    --env-vars A feladathoz használandó környezeti változók.

    A méretezési szabály konfigurációja határozza meg a figyelendő eseményforrást. Az egyes lekérdezési időközök kiértékelése és annak meghatározása, hogy hány feladatvégrehajtást kell aktiválni. További információ: Méretezési szabályok beállítása.

Az eseményvezérelt feladat most a Container Apps környezetben jön létre.

Az üzemelő példány ellenőrzése

A feladat úgy van konfigurálva, hogy 60 másodpercenként kiértékelje a méretezési szabályt, amely ellenőrzi az üzenetsorban lévő üzenetek számát. Minden egyes értékelési időszakban egy új feladatvégrehajtást indít el az üzenetsor minden üzenetéhez, legfeljebb 10 végrehajtásig.

Ha ellenőrizni szeretné, hogy a feladat megfelelően lett-e konfigurálva, elküldhet néhány üzenetet az üzenetsorba, ellenőrizheti, hogy a feladatvégrehajtások elindultak-e, és az üzeneteket a rendszer naplózza a feladatvégrehajtási naplókba.

  1. Üzenet küldése az üzenetsorba.

    az storage message put \
        --content "Hello Queue Reader Job" \
        --queue-name "$QUEUE_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    
  2. Feladat végrehajtásának listázása.

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

    Mivel a feladat úgy van konfigurálva, hogy 60 másodpercenként kiértékelje a méretezési szabályt, akár egy teljes percet is igénybe vehet a feladat végrehajtása. Ismételje meg a parancsot, amíg meg nem jelenik a feladat végrehajtása, és az állapota .Succeeded

  3. A naplózott üzenetek megtekintéséhez futtassa az alábbi parancsokat. Ezekhez a parancsokhoz szükség van a Log Analytics-bővítményre, ezért fogadja el a bővítmény telepítésére vonatkozó kérést, ha szükséges.

    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"
    

    Amíg a ContainerAppConsoleLogs_CL tábla nem áll készen, a parancs egy hibát ad vissza: BadArgumentError: The request had some invalid properties. Várjon néhány percet, majd próbálkozzon újra.

Tipp.

Problémákat tapasztal? Tudassa velünk a GitHubon, ha megnyit egy hibát az Azure Container Apps adattárában.

Az erőforrások eltávolítása

Ha végzett, futtassa a következő parancsot a Container Apps-erőforrásokat tartalmazó erőforráscsoport törléséhez.

Figyelemfelhívás

Az alábbi parancs törli a megadott erőforráscsoportot és a benne lévő összes erőforrást. Ha az oktatóanyag hatókörén kívül eső erőforrások a megadott erőforráscsoportban találhatók, akkor azok is törlődnek.

az group delete \
    --resource-group $RESOURCE_GROUP

Következő lépések