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 boyunca çalışan kapsayıcılı görevleri çalıştırmanızı ve ardından durdurmanızı sağlar. 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ğıtacağınız bir Container Apps ortamı oluşturma
- Kapsayıcı uygulamasına ileti göndermek için Azure Depolama kuyruğu oluşturma
- Bir iş çalıştıran kapsayıcı görüntüsü oluşturun
- İş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.
- Durur.
Ö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 tamamlanıncaya 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ı. Eğer yoksa ü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şturun
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"<STORAGE_ACCOUNT_NAME>ifadesini depolama hesabınız için benzersiz bir adla değiştirin. Depolama hesabı adları Azure içinde benzersiz olmalıdır. Bunlar 3 ila 24 karakter uzunluğunda olmalı ve yalnızca sayı ve küçük harf içermelidir.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 aşağıdaki hatayı döndürürse, ad alanını Azure aboneliğinize kaydettiğinizden
Microsoft.Storageemin olun.(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.Ad alanını kaydetmek için şu komutu kullanın:
az provider register --namespace Microsoft.StorageKuyruğun bağlantı dizesini 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 Azure Container Registry'deki özel depolardan görüntüleri çekin. Kimlik doğrulaması için yönetilen kimlikleri kullanın. 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 aşağıdaki değişkeni oluşturun:
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)
Görevi oluşturma ve dağıtma
İşi kurmak için, önce bir kapsayıcı görüntüsü oluşturup, bu kapsayıcıyı bir kayıt defterine göndermeniz gerekir. Daha sonra 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>"<CONTAINER_REGISTRY_NAME>değerini, kapsayıcı kayıt defteriniz için benzersiz bir adla değiştirin. Kapsayıcı kayıt defteri adları Azure içinde benzersiz olmalıdır. Bunlar 5 ila 50 karakter uzunluğunda olmalı ve yalnızca sayı ve küçük harf içermelidir.Kapsayıcı kayıt defteri oluşturma:
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 kapsayıcı kayıt defterinize 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 aşağıdaki çıkışı görürsünüz:
{ "status": "enabled" }statusisedisabled, aşağıdaki komutu kullanarak 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 kapsayıcı görüntüsünü bulutta 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, önceki komutta kullanılan anahtar parametreleri açıklanmaktadır.
Parametre Açıklama --replica-timeoutÇoğaltmanın çalıştırılabileceğ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ına yönelik kimlik doğrulaması. --secretsİş için kullanılacak sırlar. --registry-serverİş için kullanılacak kapsayıcı kayıt defteri sunucusu. Azure kapsayıcı kayıt defteri 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 acrpullrol 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 başlatılması gereken iş çalıştırma sayısını belirler. Daha fazla bilgi için bkz. Ölçeklendirme kurallarını ayarlama.
Olay temelli iş artık Container Apps ortamında oluşturulur.
Dağıtımı doğrula
İş, ölçek kuralını her 60 saniyede bir değerlendirecek şekilde yapılandırılır. Bu değerlendirme, kuyruktaki iletilerin sayısını denetler. 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 ve iş yürütmelerinin başlatıldığını ve iletilerin iş yürütme günlüklerine kaydedildiğini onaylayabilirsiniz.
Kuyruğa ileti gönderme:
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. Komutun yürütülmesini ve durumunu
Succeededgörene kadar komutu tekrar edin.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 uzantıyı 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"ContainerAppConsoleLogs_CLtablosu hazır olana kadar, komut şu hatayı verir: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, Container Apps kaynaklarınızı içeren kaynak grubunu silmek için aşağıdaki komutu çalıştırın.
Dikkat
Aşağıdaki komut, belirtilen kaynak grubunu ve içindeki tüm kaynakları siler. Belirtilen kaynak grubunda bu öğreticinin kapsamı dışında kaynaklar varsa, bunlar da silinir.
az group delete \
--resource-group $RESOURCE_GROUP