Share via


Öğretici: Azure Container Apps ile olay odaklı iş dağıtma

Azure Container Apps işleri , sınırlı bir süre ve çıkış için yürütülen kapsayıcılı görevleri çalıştırmanıza olanak tanır. bir iş yürütmesini el ile, zamanlamaya göre veya olaylara göre tetikleyebilirsiniz. İşler, veri işleme, makine öğrenmesi veya sunucusuz kısa ömürlü işlem kaynakları gerektiren herhangi bir senaryo gibi görevler için idealdir.

Bu öğreticide, olay temelli işlerle çalışmayı öğreneceksiniz.

  • Kapsayıcı uygulamalarınızı dağıtmak için bir Container Apps ortamı oluşturma
  • Kapsayıcı uygulamasına ileti göndermek için Azure Depolama Kuyruğu oluşturma
  • İş çalıştıran bir kapsayıcı görüntüsü oluşturma
  • İşi Container Apps ortamına dağıtma
  • Kuyruk iletilerinin kapsayıcı uygulaması tarafından işlendiğini doğrulayın

Oluşturduğunuz iş, bir Azure Depolama kuyruğuna gönderilen her ileti için bir yürütme başlatır. Her iş yürütme aşağıdaki adımları gerçekleştiren bir kapsayıcı çalıştırır:

  1. Kuyruktan bir ileti alır.
  2. İletiyi iş yürütme günlüklerine kaydeder.
  3. İletiyi kuyruktan siler.
  4. Çıkar.

Önemli

Ölçekleyici, kaç işin başlatileceğini belirlemek için kuyruğun uzunluğunu izler. Doğru ölçeklendirme için, iş yürütme işlemi tamamlanana kadar kuyruktan bir iletiyi silmeyin.

Bu öğreticide çalıştırdığınız işin kaynak kodu bir Azure Örnekleri GitHub deposunda kullanılabilir.

Önkoşullar

Ayarlama

  1. CLI'dan Azure'da oturum açmak için aşağıdaki komutu çalıştırın ve istemleri izleyerek kimlik doğrulama işlemini tamamlayın.

    az login
    
  2. Yükseltme komutuyla CLI'nın en son sürümünü çalıştırdığınızdan emin olun.

    az upgrade
    
  3. Azure Container Apps CLI uzantısının en son sürümünü yükleyin.

    az extension add --name containerapp --upgrade
    
  4. Microsoft.App Ve Microsoft.OperationalInsights ad alanlarını Azure aboneliğinize henüz kaydetmediyseniz kaydedin.

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    
  5. Azure CLI kurulumunuz tamamlandıktan sonra bu makalenin tamamında kullanılan ortam değişkenlerini tanımlayabilirsiniz.

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

Container Apps ortamı oluşturma

Azure Container Apps ortamı, aynı ağı paylaşabilmeleri ve birbirleriyle iletişim kurabilmeleri için kapsayıcı uygulamaları ve işleri çevresinde güvenli bir sınır işlevi görür.

  1. Aşağıdaki komutu kullanarak bir kaynak grubu oluşturun.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. Aşağıdaki komutu kullanarak Container Apps ortamını oluşturun.

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

Depolama kuyruğu ayarlama

İş, iletileri almak için bir Azure Depolama kuyruğu kullanır. Bu bölümde bir depolama hesabı ve kuyruk oluşturacaksınız.

  1. Depolama hesabınız için bir ad tanımlayın.

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

    değerini depolama hesabınız için benzersiz bir adla değiştirin <STORAGE_ACCOUNT_NAME> . Depolama hesap adları Azure içinde benzersiz olmalı ve yalnızca sayı ve küçük harf içeren 3 ila 24 karakter uzunluğunda olmalıdır.

  2. Bir Azure Depolama hesabı oluşturun.

    az storage account create \
        --name "$STORAGE_ACCOUNT_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Standard_LRS \
        --kind StorageV2
    
  3. Kuyruğun bağlantı dizesi bir değişkene kaydedin.

    QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv`
    
  4. İleti kuyruğu oluşturun.

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

İşi derleme ve dağıtma

İşi dağıtmak için önce iş için bir kapsayıcı görüntüsü oluşturmanız ve bunu bir kayıt defterine göndermeniz gerekir. Ardından, işi Container Apps ortamına dağıtabilirsiniz.

  1. Kapsayıcı görüntünüz ve kayıt defteriniz için bir ad tanımlayın.

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

    değerini kapsayıcı kayıt defteriniz için benzersiz bir adla değiştirin <CONTAINER_REGISTRY_NAME> . Kapsayıcı kayıt defteri adları Azure içinde benzersiz olmalı ve yalnızca sayı ve küçük harf içeren 5 ila 50 karakter uzunluğunda olmalıdır.

  2. Kapsayıcı kayıt defteri oluşturun.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic \
        --admin-enabled true
    
  3. İşin kaynak kodu GitHub'da kullanılabilir. Depoyu kopyalamak ve komutunu kullanarak az acr build bulutta kapsayıcı görüntüsünü oluşturmak için aşağıdaki komutu çalıştırın.

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

    Görüntü artık kapsayıcı kayıt defterinde kullanılabilir.

  4. Container Apps ortamında bir iş oluşturun.

    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" \
        --env-vars "AZURE_STORAGE_QUEUE_NAME=$QUEUE_NAME" "AZURE_STORAGE_CONNECTION_STRING=secretref:connection-string-secret"
    

    Aşağıdaki tabloda, komutunda kullanılan anahtar parametreleri açıklanmaktadır.

    Parametre Açıklama
    --replica-timeout Bir çoğaltmanın yürütebileceği en uzun süre.
    --min-executions Yoklama aralığı başına çalıştırılacak en az iş yürütme sayısı.
    --max-executions Yoklama aralığı başına çalıştırılacak en fazla iş yürütme sayısı.
    --polling-interval Ölçek kuralının değerlendirildiği yoklama aralığı.
    --scale-rule-name Ölçek kuralının adı.
    --scale-rule-type Kullanılacak ölçek kuralı türü.
    --scale-rule-metadata Ölçek kuralının meta verileri.
    --scale-rule-auth Ölçek kuralı için kimlik doğrulaması.
    --secrets İş için kullanılacak gizli diziler.
    --registry-server İş için kullanılacak kapsayıcı kayıt defteri sunucusu. Azure Container Registry için komut kimlik doğrulamasını otomatik olarak yapılandırır.
    --env-vars İş için kullanılacak ortam değişkenleri.

    Ölçek kuralı yapılandırması, izlenecek olay kaynağını tanımlar. Her yoklama aralığında değerlendirilir ve tetiklenmesi gereken iş yürütme sayısını belirler. Daha fazla bilgi edinmek için bkz . Ölçeklendirme kurallarını ayarlama.

Olay temelli iş artık Container Apps ortamında oluşturulur.

Dağıtımı doğrulama

İş, kuyruktaki iletilerin sayısını denetleyen ölçek kuralını her 60 saniyede bir değerlendirecek şekilde yapılandırılır. Her değerlendirme dönemi için, kuyruktaki her ileti için en fazla 10 yürütme olacak şekilde yeni bir iş yürütmesi başlatır.

İşin doğru yapılandırıldığını doğrulamak için kuyruğa bazı iletiler gönderebilir, iş yürütmelerinin başlatıldığını ve iletilerin iş yürütme günlüklerine kaydedildiğini onaylayabilirsiniz.

  1. Kuyruğa bir ileti gönderin.

    az storage message put \
        --content "Hello Queue Reader Job" \
        --queue-name "$QUEUE_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    
  2. bir işin yürütmelerini listeleme.

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

    İş her 60 saniyede bir ölçek kuralını değerlendirecek şekilde yapılandırıldığından, iş yürütme işleminin başlaması bir dakika kadar sürebilir. İş yürütmesini ve durumunu Succeededgörene kadar komutunu yineleyin.

  3. Günlüğe kaydedilen iletileri görmek için aşağıdaki komutları çalıştırın. Bu komutlar Log Analytics uzantısı gerektirir, bu nedenle istendiğinde uzantı yükleme istemini kabul edin.

    LOG_ANALYTICS_WORKSPACE_ID=`az containerapp env show --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out 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"
    

    Tablo hazır olana ContainerAppConsoleLogs_CL kadar komut şu hatayı döndürür: BadArgumentError: The request had some invalid properties. Birkaç dakika bekleyin ve tekrar deneyin.

İpucu

Sorun mu yaşıyorsunuz? Azure Container Apps deposunda bir sorun açarak GitHub'da bize bildirin.

Kaynakları temizleme

İşiniz bittiğinde aşağıdaki komutu çalıştırarak Container Apps kaynaklarınızı içeren kaynak grubunu silin.

Dikkat

Aşağıdaki komut, belirtilen kaynak grubunu ve içindeki tüm kaynakları siler. Bu öğreticinin kapsamı dışındaki kaynaklar belirtilen kaynak grubunda varsa, bunlar da silinir.

az group delete \
    --resource-group $RESOURCE_GROUP

Sonraki adımlar