Öğ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, kaynak temizleme 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:
- Kuyruktan bir ileti alır.
- İletiyi iş yürütme günlüklerine kaydeder.
- İletiyi kuyruktan siler.
- Çı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
- Etkin aboneliği olan bir Azure hesabı.
- Kuruluşunuz yoksa şimdi ücretsiz olarak bir tane oluşturabilirsiniz.
- Azure CLI’yi yükleyin.
- Sınırlama listesi için iş kısıtlamalarına bakın.
Ayarlama
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
Yükseltme komutuyla CLI'nın en son sürümünü çalıştırdığınızdan emin olun.
az upgrade
Azure Container Apps CLI uzantısının en son sürümünü yükleyin.
az extension add --name containerapp --upgrade
Microsoft.App
Azure aboneliğinizde henüz kaydetmediyseniz ,Microsoft.OperationalInsights
veMicrosoft.Storage
ad alanlarını kaydedin.az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights az provider register --namespace Microsoft.Storage
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.
Aşağıdaki komutu kullanarak bir kaynak grubu oluşturun.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"
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.
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 hesabı 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.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
Bu komut şu hatayı döndürür:
(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.
Ad alanını Azure aboneliğinize kaydettiğinizden
Microsoft.Storage
emin olun.az provider register --namespace Microsoft.Storage
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)
İleti kuyruğu oluşturun.
az storage queue create \ --name "$QUEUE_NAME" \ --account-name "$STORAGE_ACCOUNT_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
Kullanıcı tarafından atanan yönetilen kimlik oluşturma
Yönetici kimlik bilgilerini kullanmaktan kaçınmak için, kimlik doğrulaması için yönetilen kimlikleri kullanarak Microsoft Azure Container Registry'deki özel depolardan görüntüleri çekin. Mümkün olduğunda, görüntüleri çekmek için kullanıcı tarafından atanan yönetilen kimliği kullanın.
Kullanıcı tarafından atanmış bir yönetilen kimlik oluşturun. Aşağıdaki komutları çalıştırmadan önce yönetilen kimliğiniz için bir ad seçin ve öğesini adıyla değiştirin
\<PLACEHOLDER\>
.IDENTITY="<YOUR_IDENTITY_NAME>"
az identity create \ --name $IDENTITY \ --resource-group $RESOURCE_GROUP
Kimliğin kaynak kimliğini alın.
IDENTITY_ID=$(az identity show \ --name $IDENTITY \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
İş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.
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.Kapsayıcı kayıt defteri oluşturun.
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Basic
Kapsayıcı kayıt defterinizin, görüntüleri çekmek için yönetilen kimliği kullanabilmesi için kimlik doğrulaması için Azure Resource Manager (ARM) hedef kitle belirteçlerine izin vermesi gerekir.
ARM belirteçlerinin Azure Container Registry'nize (ACR) erişmesine izin verilip verilmediğini denetlemek için aşağıdaki komutu kullanın.
az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"
ARM belirteçlerine izin veriliyorsa komut aşağıdaki çıkışları oluşturur.
{ "status": "enabled" }
status
isedisabled
, aşağıdaki komutla ARM belirteçlerine izin verin.az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabled
İş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.
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" \ --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"
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. --mi-user-assigned
İşe atanacak kullanıcı tarafından atanan yönetilen kimliğin kaynak kimliği. --registry-identity
Kullanıcı adı ve parola kullanmak yerine kayıt defteri sunucusuyla kimlik doğrulaması yapmak için yönetilen kimliğin kaynak kimliği. Mümkünse, kimlik için otomatik olarak bir 'acrpull' rol ataması oluşturulur. --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.
Kuyruğa bir ileti gönderin.
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
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
Succeeded
görene kadar komutunu yineleyin.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 --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"
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