Öğretici: Azure Container Apps ile arka plan işleme uygulaması dağıtma

Azure Container Apps'i kullanmak, genel uç noktaların kullanıma açık olmasını gerektirmeden uygulamaları dağıtmanıza olanak tanır. Container Apps ölçek kurallarını kullanarak uygulama, Azure Depolama kuyruğu uzunluğuna göre ölçeği genişletebilir ve daraltabilir. Kuyrukta ileti olmadığında kapsayıcı uygulaması sıfıra ölçeklendirilir.

Şunları yapmayı öğ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
  • Arka plan işleme uygulamanızı kapsayıcı uygulaması olarak dağıtma
  • Kuyruk iletilerinin kapsayıcı uygulaması tarafından işlendiğini doğrulayı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

CLI'nın en son sürümünü çalıştırdığınızdan emin olmak için yükseltme komutunu çalıştırın.

az upgrade

Ardından CLI için Azure Container Apps uzantısını yükleyin veya güncelleştirin.

az extension add --name containerapp --upgrade

Geçerli uzantı veya modül yüklendikten sonra ve Microsoft.OperationalInsights ad alanlarını kaydedinMicrosoft.App.

Not

Azure Container Apps kaynakları ad alanından Microsoft.Web ad alanına Microsoft.App geçirildi. Daha fazla ayrıntı için Microsoft.Web'den Mart 2022'de Microsoft.App ad alanı geçişi bölümüne bakın.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Ortam değişkenlerini belirleme

Aşağıdaki ortam değişkenlerini ayarlayın. PLACEHOLDERS> değerini değerlerinizle değiştirin<:

RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"

Azure kaynak grubu oluşturma

Kapsayıcı uygulaması dağıtımınızla ilgili hizmetleri düzenlemek için bir kaynak grubu oluşturun.

az group create \
  --name $RESOURCE_GROUP \
  --location "$LOCATION"

Ortam oluşturun

Azure Container Apps'teki bir ortam, bir grup kapsayıcı uygulaması çevresinde güvenli bir sınır oluşturur. Aynı ortama dağıtılan Container Apps aynı sanal ağa dağıtılır ve günlükleri aynı Log Analytics çalışma alanına yazar.

Ortamı oluşturmak için aşağıdaki komutu çalıştırın:

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

Depolama kuyruğu ayarlama

Depolama hesabı için bir ad tanımlayarak başlayın. 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.

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

Bir Azure Depolama hesabı oluşturun.

az storage account create \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

Ardından, kuyruğun bağlantı dizesi alın.

QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --out json | tr -d '"'`

Artık ileti kuyruğu oluşturabilirsiniz.

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

Son olarak kuyruğa ileti gönderebilirsiniz.

az storage message put \
  --content "Hello Queue Reader App" \
  --queue-name "myqueue" \
  --connection-string $QUEUE_CONNECTION_STRING

Arka plan uygulamasını dağıtma

queue.json adlı bir dosya oluşturun ve aşağıdaki yapılandırma kodunu dosyaya yapıştırın.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "defaultValue": "canadacentral",
            "type": "String"
        },
        "environment_name": {
            "type": "String"
        },
        "queueconnection": {
            "type": "secureString"
        }
    },
    "variables": {},
    "resources": [
    {
        "name": "queuereader",
        "type": "Microsoft.App/containerApps",
        "apiVersion": "2022-03-01",
        "kind": "containerapp",
        "location": "[parameters('location')]",
        "properties": {
            "managedEnvironmentId": "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]",
            "configuration": {
                "activeRevisionsMode": "single",
                "secrets": [
                {
                    "name": "queueconnection",
                    "value": "[parameters('queueconnection')]"
                }]
            },
            "template": {
                "containers": [
                    {
                        "image": "mcr.microsoft.com/azuredocs/containerapps-queuereader",
                        "name": "queuereader",
                        "env": [
                            {
                                "name": "QueueName",
                                "value": "myqueue"
                            },
                            {
                                "name": "QueueConnectionString",
                                "secretRef": "queueconnection"
                            }
                        ]
                    }
                ],
                "scale": {
                    "minReplicas": 1,
                    "maxReplicas": 10,
                    "rules": [
                        {
                            "name": "myqueuerule",
                            "azureQueue": {
                                "queueName": "myqueue",
                                "queueLength": 100,
                                "auth": [
                                    {
                                        "secretRef": "queueconnection",
                                        "triggerParameter": "connection"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }]
}

Artık kapsayıcı uygulamanızı oluşturabilir ve dağıtabilirsiniz.

az deployment group create --resource-group "$RESOURCE_GROUP" \
  --template-file ./queue.json \
  --parameters \
    environment_name="$CONTAINERAPPS_ENVIRONMENT" \
    queueconnection="$QUEUE_CONNECTION_STRING" \
    location="$LOCATION"

Bu komut adlı mcr.microsoft.com/azuredocs/containerapps-queuereader genel kapsayıcı görüntüsünden tanıtım uygulamasını dağıtır ve uygulama tarafından kullanılan gizli dizileri ve ortam değişkenlerini ayarlar.

Uygulama, ARM şablonunun bölümünde tanımlanan scale kuyruk uzunluğuna göre ölçeği 10 çoğaltmaya genişletmektedir.

Sonucu doğrulama

Kapsayıcı uygulaması arka plan işlemi olarak çalışır. Azure Depolama Kuyruğu'ndan iletiler geldikçe uygulama Log Analytics'te günlük girdileri oluşturur. Günlüğe kaydedilen verileri sorgulayabilmeniz için önce analizin ilk kez gelmesi için birkaç dakika beklemeniz gerekir.

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

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`

az monitor log-analytics query \
  --workspace $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
  --analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'queuereader' and Log_s contains 'Message ID' | project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Container=ContainerName_s, Message=Log_s | take 5" \
  --out table

İ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