Aracılığıyla paylaş


Öğretici: Azure CLI ile ilke durumu değişiklik olaylarını Event Grid'e yönlendirme

Bu makalede, bir web uç noktasına ilke durumu değişiklik olayları göndermek için Azure İlkesi olay aboneliklerini ayarlamayı öğreneceksiniz. Azure İlkesi kullanıcılar, kaynaklarda ilke durumu değişiklikleri gerçekleştiğinde ortaya çıkan olaylara abone olabilir. Bu olaylar web kancalarını, Azure İşlevleri, Azure Depolama Kuyruklarını veya Azure Event Grid tarafından desteklenen diğer olay işleyicilerini tetikleyebilir. Normalde olayları, olay verilerini işleyen ve eylemler gerçekleştiren bir uç noktaya gönderirsiniz. Bu öğreticiyi basitleştirmek için, olayları iletileri toplayan ve görüntüleyen bir web uygulamasına gönderirsiniz.

Önkoşullar

  • Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Bu hızlı başlangıç için Azure CLI 2.0.76 veya sonraki bir sürümü çalıştırmanız gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

Kaynak grubu oluşturma

Event Grid konuları Azure kaynaklarıdır ve bir Azure kaynak grubuna yerleştirilmelidir. Kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal koleksiyondur.

az group create komutuyla bir kaynak grubu oluşturun.

Aşağıdaki örnek westus konumunda adlı <resource_group_name> bir kaynak grubu oluşturur. <resource_group_name> değerini kaynak grubunuz için benzersiz bir adla değiştirin.

# Log in first with az login if you're not using Cloud Shell

az group create --name <resource_group_name> --location westus

Event Grid sistem konusu oluşturma

Artık bir kaynak grubumuz olduğuna göre bir sistem konusu oluşturacağız. Event Grid'deki bir sistem konusu, Azure İlkesi ve Azure Event Hubs gibi Azure hizmetleri tarafından yayımlanan bir veya daha fazla olayı temsil eder. Bu sistem konusu, Azure İlkesi durum değişiklikleri için konu türünü kullanırMicrosoft.PolicyInsights.PolicyStates.

İlk olarak, ve EventGrid kaynak sağlayıcılarını (RP) uygun yönetim kapsamına kaydetmeniz PolicyInsights gerekir. Azure portalı, ilk kez çağırdığınız TÜM IP'leri otomatik olarak kaydettirse de Azure CLI kaydetmez.

# Log in first with az login if you're not using Cloud Shell

# Register the required RPs at the management group scope
az provider register --namespace Microsoft.PolicyInsights -m <managementGroupId>
az provider register --namespace Microsoft.EventGrid -m <managementGroupId>

# Alternatively, register the required RPs at the subscription scope (defaults to current subscription context)
az provider register --namespace Microsoft.PolicyInsights
az provider register --namespace Microsoft.EventGrid

Ardından parametresini scope aboneliğinizin kimliğiyle ve <resource_group_name> parametresini resource-group önceden oluşturulan kaynak grubuyla değiştirin<subscriptionId>.

az eventgrid system-topic create --name PolicyStateChanges --location global --topic-type Microsoft.PolicyInsights.PolicyStates --source "/subscriptions/<subscriptionId>" --resource-group "<resource_group_name>"

Event Grid sistem konunuz yönetim grubu kapsamına uygulanmışsa Azure CLI --source parametre söz dizimi biraz farklıdır. Bir örnek aşağıda verilmiştir:

az eventgrid system-topic create --name PolicyStateChanges --location global --topic-type Microsoft.PolicyInsights.PolicyStates --source "/tenants/<tenantID>/providers/Microsoft.Management/managementGroups/<management_group_name>" --resource-group "<resource_group_name>"

İleti uç noktası oluşturma

Konuya abone olmadan önce olay iletisi için uç noktayı oluşturalım. Normalde, olay verileri temelinde uç nokta eylemleri gerçekleştirir. Bu hızlı başlangıcı basitleştirmek için, olay iletilerini görüntüleyen önceden oluşturulmuş bir web uygulaması dağıtacaksınız. Dağıtılan çözüm bir App Service planı, App Service web uygulaması ve GitHub'dan kaynak kod içerir.

<your-site-name> değerini web uygulamanız için benzersiz bir adla değiştirin. Web uygulaması adı, Etki Alanı Adı Sistemi (DNS) girişinin bir parçası olduğundan benzersiz olmalıdır.

# Log in first with az login if you're not using Cloud Shell

az deployment group create \
  --resource-group <resource_group_name> \
  --template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \
  --parameters siteName=<your-site-name> hostingPlanName=viewerhost

Dağıtımın tamamlanması birkaç dakika sürebilir. Başarılı bir dağıtımdan sonra çalıştığından emin olmak için web uygulamanızı görüntüleyin. Web tarayıcısında şu adrese gidin: https://<your-site-name>.azurewebsites.net

Şu anda iletilerin görüntülenmediği siteyi görüyor olmalısınız.

Sistem konusuna abone olma

Event Grid’e hangi olayları izlemek istediğinizi ve bu olayların nereye gönderileceğini bildirmek için bir konuya abone olursunuz. Aşağıdaki örnek, oluşturduğunuz sistem konusuna abonedir ve web uygulamanızdaki URL'yi olay bildirimlerini almak için uç nokta olarak geçirir. Olay aboneliğiniz için <event_subscription_name> öğesini bir ad ile değiştirin. <resource_group_name> ve <your-site-name> için daha önce oluşturduğunuz değerleri kullanın.

Web uygulamanızın uç noktası /api/updates/ sonekini içermelidir.

# Log in first with az login if you're not using Cloud Shell

# Create the subscription
az eventgrid system-topic event-subscription create \
  --name <event_subscription_name> \
  --resource-group <resource_group_name> \
  --system-topic-name PolicyStateChanges \
  --endpoint https://<your-site-name>.azurewebsites.net/api/updates

Web uygulamanızı yeniden görüntüleyin ve bir abonelik doğrulama olayının gönderildiğine dikkat edin. Göz simgesini seçerek olay verilerini genişletin. Uç noktanın olay verilerini almak istediğini doğrulayabilmesi için Event Grid doğrulama olayını gönderir. Web uygulaması aboneliği doğrulamak için kod içerir.

Önceden oluşturulmuş web uygulamasında Event Grid aboneliği doğrulama olayının ekran görüntüsü.

İlke ataması oluşturma

Bu hızlı başlangıçta bir ilke ataması oluşturacak ve Kaynak gruplarında etiket gerektir tanımını ataacaksınız. Bu ilke tanımı, ilke ataması sırasında yapılandırılan etiketi eksik olan kaynak gruplarını tanımlar.

Event Grid konusunu tutmak için oluşturduğunuz kaynak grubu kapsamında bir ilke ataması oluşturmak için aşağıdaki komutu çalıştırın:

# Log in first with az login if you're not using Cloud Shell

az policy assignment create --name 'requiredtags-events' --display-name 'Require tag on RG' --scope '<resourceGroupScope>' --policy '<policy definition ID>' --params '{ \"tagName\": { \"value\": \"EventTest\" } }'

Yukarıdaki komutta aşağıdaki bilgiler kullanılmaktadır:

  • Ad - Atamanın gerçek adı. Bu örnekte requiredtags-events kullanılmıştır.
  • Görünen Ad - Bu ilke atamasının görünen adı. Bu durumda, RG'de Require etiketini kullanıyorsunuz.
  • Kapsam - Kapsam, ilke atamasının hangi kaynaklarda veya kaynak gruplarında uygulanacağını belirler. Bir abonelikten kaynak gruplarına kadar değişiklik gösterebilir. <scope> yerine kaynak grubunuzun adını yazdığınızdan emin olun. Kaynak grubu kapsamının biçimi şeklindedir /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>.
  • İlke - Atamayı oluşturmak için kullandığınız ilke tanımı kimliği. Bu durumda, kaynak gruplarında etiket gerektir ilke tanımının kimliğidir. İlke tanımı kimliğini almak için şu komutu çalıştırın: az policy definition list --query "[?displayName=='Require a tag on resource groups']"

İlke atamasını oluşturduktan sonra, web uygulamasında bir Microsoft.PolicyInsights.PolicyStateCreated olay bildiriminin görünmesini bekleyin. Oluşturduğumuz kaynak grubu Başlatılamayan değerini gösterirdata.complianceState.

Önceden oluşturulmuş web uygulamasında kaynak grubu için Event Grid aboneliği İlke Durumu Oluşturuldu olayının ekran görüntüsü.

Not

Kaynak grubu diğer ilke atamalarını abonelikten veya yönetim grubu hiyerarşisinden devralıyorsa, her biri için olaylar da görüntülenir. Özelliğini değerlendirerek data.policyDefinitionId olayın bu öğreticideki atama için olduğunu onaylayın.

Kaynak grubunda değişiklik tetikleme

Kaynak grubunu uyumlu hale getirmek için EventTest adlı bir etiket gereklidir. Aşağıdaki komutun yerine <subscriptionId> abonelik kimliğinizi ve <resourceGroup> kaynak grubunun adını yazarak etiketi kaynak grubuna ekleyin:

# Log in first with az login if you're not using Cloud Shell

az tag create --resource-id '/subscriptions/<SubscriptionID>/resourceGroups/<resourceGroup>' --tags EventTest=true

Gerekli etiketi kaynak grubuna ekledikten sonra, web uygulamasında bir Microsoft.PolicyInsights.PolicyStateChanged olay bildiriminin görünmesini bekleyin. Olayı genişletir ve data.complianceState değeri artık Uyumlu olarak gösterilir.

Sorun giderme

Aşağıdakilerden birine benzer bir hata görürseniz, abone olduğunuz kapsamda her iki kaynak sağlayıcısını da kaydettiğinizden emin olun (yönetim grubu veya abonelik):

  • Deployment has failed with the following error: {"code":"Publisher Notification Error","message":"Failed to enable publisher notifications.","details":[{"code":"Publisher Provider Error","message":"GET request for <uri> failed with status code: Forbidden, code: AuthorizationFailed and message: The client '<identifier>' with object id '<identifier>' does not have authorization to perform action 'microsoft.policyinsights/eventGridFilters/read' over scope '<scope>/providers/microsoft.policyinsights/eventGridFilters/_default' or the scope is invalid. If access was recently granted, please refresh your credentials.."}]}
  • Deployment has failed with the following error: {'code':'Publisher Notification Error','message':'Failed to enable publisher notifications.','details':[{'code':'ApiVersionNotSupported','message':'Event Grid notifications are currently not supported by microsoft.policyinsights in global. Try re-registering Microsoft.EventGrid provider if this is your first event subscription in this region.'}]}

Kaynakları temizleme

Bu web uygulamasıyla çalışmaya devam etmek istiyorsanız ve olay aboneliği Azure İlkesi, bu makalede oluşturulan kaynakları temizlemeyin. Devam etmek istemiyorsanız, bu makalede oluşturduğunuz kaynakları silmek için aşağıdaki komutu kullanın.

değerini, oluşturduğunuz kaynak grubuyla değiştirin <resource_group_name> .

az group delete --name <resource_group_name>

Sonraki adımlar

artık Azure İlkesi için konu ve olay abonelikleri oluşturmayı bildiğinize göre, ilke durumu değişiklik olayları ve Event Grid hakkında daha fazla bilgi edinin: