Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
Container Apps işlerinin desteklemediği özellikler hakkında bilgi için bkz. İşler kısıtlamaları.
Ortamı hazırlama
Azure 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 loginKomutuyla Azure CLI'nın en son sürümünü çalıştırdığınızdan
az upgradeemin olun.az upgradeContainer Apps CLI uzantısının en son sürümünü yükleyin.
az extension add --name containerapp --upgradeMicrosoft.App,Microsoft.OperationalInsightsveMicrosoft.Storagead alanları hâlihazırda Azure aboneliğinizde kayıtlı değilse kaydedin.az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights az provider register --namespace Microsoft.StorageBu makale boyunca kullanılan ortam değişkenlerini tanımlayın.
RESOURCE_GROUP="jobs-quickstart" LOCATION="northcentralus" ENVIRONMENT="env-jobs-quickstart" JOB_NAME="my-job"
Container Apps ortamı oluşturma
Container Apps ortamı, kapsayıcı uygulamalar ve işler için aynı ağı paylaşabilmeleri ve birbirleriyle iletişim kurabilmeleri amacıyla bir izolasyon 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 StorageV2Bu 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.Storageemin olun.az provider register --namespace Microsoft.StorageKuyruğ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_GROUPKimliğ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 BasicKapsayı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" }statusisedisabled, 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 buildbulutta 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-timeoutBir çoğaltmanın yürütebileceği en uzun süre. --min-executionsYoklama aralığı başına çalıştırılacak en az iş yürütme sayısı. --max-executionsYoklama 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-typeKullanı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-identityKullanı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
Succeededgö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_CLkadar 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