Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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:
- Egy üzenetet kap az üzenetsorból.
- Naplózza az üzenetet a feladat végrehajtási naplóiba.
- Törli az üzenetet az üzenetsorból.
- 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
- 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árfiókot és egy üzenetsort.
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.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:
(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.StorageAzure-előfizetésében.az provider register --namespace Microsoft.StorageMentse 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)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.
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_GROUPKé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.
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.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 BasicA 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 igen
status, engedélyezze azdisabledARM-jogkivonatokat 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 a
az acr buildparancs 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.
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-timeoutA replika végrehajtásának maximális 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 Container Registry 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 "acrpull" szerepkö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. 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.
Üzenet küldése az üzenetsorba.
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 .
SucceededA 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_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 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