Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
- Egy üzenetet kap az üzenetsorból.
- Naplózza az üzenetet a feladat végrehajtási naplóiba.
- Törli az üzenetet az üzenetsorból.
- 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
- Egy Azure-fiók, aktív előfizetéssel. Ha még nem rendelkezik fiókkal, ingyen létrehozhat egyet.
- Az Azure CLI.
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
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 loginGyőződjön meg arról, hogy az Azure CLI legújabb verzióját futtatja a
az upgradeparancson keresztül.az upgradeTelepítse a Container Apps CLI-bővítmény legújabb verzióját.
az extension add --name containerapp --upgradeRegisztrálja a
Microsoft.App,Microsoft.OperationalInsightsésMicrosoft.Storagea 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.StorageHatá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.
Hozzon létre egy erőforráscsoportot az alábbi paranccsal.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"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.
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.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 StorageV2Ha 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.StorageAzure-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.StorageMentse 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)Ü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.
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_GROUPAz 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.
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.Tárolóregisztrációs adatbázis létrehozása:
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku BasicA 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 enabledA 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.
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-timeoutEgy replika maximálisan futtatható időtartama. --min-executionsA lekérdezési időközönként futtatandó feladatvégrehajtások minimális száma. --max-executionsA lekérdezési időközönként futtatandó feladatvégrehajtások maximális száma. --polling-intervalA skálázási szabály kiértékelésének időköze. --scale-rule-nameA méretezési szabály neve. --scale-rule-typeA használni kívánt méretezési szabály típusa. --scale-rule-metadataA méretezési szabály metaadatai. --scale-rule-authA méretezési szabály hitelesítése. --secretsA feladathoz használandó titkos kódok. --registry-serverA 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-assignedA feladathoz rendelendő, felhasználó által hozzárendelt felügyelt identitás erőforrás-azonosítója. --registry-identityEgy 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 acrpullszerepkör-hozzárendelést az identitáshoz.--env-varsA 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.
Küldjön üzenetet a sorba:
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"Feladat végrehajtásának listázása:
az containerapp job execution list \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --output jsonMivel 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.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_CLtá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