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 a tárolóalapú feladatok futtatását, amelyek véges ideig futnak, majd leállnak. 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.

  • Tárolóalkalmazások környezetének 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. Megáll.

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 fejezi be a feldolgozást.

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

Előfeltételek

Azokról a funkciókról, amelyeket a Container Apps-feladatok nem támogatnak, tekintse meg a feladatokra vonatkozó korlátozásokat.

A környezet előkészítése

  1. Ha az Azure CLI-ből szeretne bejelentkezni az Azure-ba, futtassa az alábbi 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 az Azure CLI legújabb verzióját futtatja a az upgrade parancson keresztül.

    az upgrade
    
  3. Telepítse a 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 nincs regisztrálva az Azure-előfizetésben.

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    az provider register --namespace Microsoft.Storage
    
  5. Határozza meg a 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

A Container Apps-környezet elkülönítési 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. Hozzon létre egy erőforráscsoportot az alábbi paranccsal.

    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árolófiókot és egy várólistát.

  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. 3 és 24 karakter közötti hosszúságúak lehetnek, és csak számokat és kisbetűket tartalmazhatnak.

  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, győződjön meg arról, hogy regisztrálta a névteret az Microsoft.Storage Azure-előfizetésében.

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

    Ezzel a paranccsal regisztrálhatja a névteret:

    az provider register --namespace Microsoft.Storage
    
  3. Mentse az üzenetsor kapcsolati sztringjét 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. Üzenetsor létrehozása:

    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 az Azure Container Registry privát adattáraiból. Felügyelt identitások használata 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 hozza létre a következő változót:

    IDENTITY="<YOUR_IDENTITY_NAME>"
    
    az identity create \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP
    
  2. Az identitás erőforrás-azonosítójának lekérése:

    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, és le kell küldenie a tárolót egy beállításjegyzékbe. Ezután üzembe helyezheti a feladatot a Container Apps-környezetben.

  1. Adjon nevet a tárolólemezké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. 5 és 50 karakter közötti hosszúságúak lehetnek, és csak számokat és kisbetűket tartalmazhatnak.

  2. Tárolóregisztrációs adatbázis létrehozása:

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic
    
  3. A konténerregisztrációnak engedélyeznie kell az Azure Resource Manager (ARM) célcsoport-jogkivonatokat a hitelesítéshez és ahhoz, hogy felügyelt identitással képeket tudjon lekérni.

    Az alábbi paranccsal ellenőrizheti, hogy az ARM-jogkivonatok hozzáférhetnek-e az Azure-tárolóregisztrációs adatbázishoz:

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

    Ha ARM-jogkivonatok engedélyezettek, a következő kimenet jelenik meg:

    {
      "status": "enabled"
    }
    

    Ha a statusdisabled, engedélyezze az ARM tokeneket 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:

    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 az előző parancsban használt kulcsparamétereket ismerteti.

    Paraméter Leírás
    --replica-timeout Egy replika maximálisan futtatható 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-tárolóregisztrációs adatbázis 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. Minden egyes lekérdezési időközön megvizsgálják és meghatározzák, hogy hány feladat végrehajtását 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.

A telepítés ellenőrzése

A feladat úgy van konfigurálva, hogy 60 másodpercenként kiértékelje a méretezési szabályt. Ez az értékelés 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.

Annak ellenőrzéséhez, hogy a feladat megfelelően van-e konfigurálva, elküldhet néhány üzenetet az üzenetsorba, és ellenőrizheti, hogy a feladatvégrehajtások elindultak-e, és hogy az üzenetek naplózva vannak-e a feladat végrehajtási naplóiban.

  1. Küldjön üzenetet a sorba:

    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 a Log Analytics-bővítmény szükséges, ezért fogadja el a bővítmény telepítésére vonatkozó kérést.

    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 tisztí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 az abban található összes erőforrást. Ha a megadott erőforráscsoportban az oktatóanyag hatókörén kívül eső erőforrások is vannak, azok is törlődnek.

az group delete \
    --resource-group $RESOURCE_GROUP

Következő lépés