Öğ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. Ancak, 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.

Azure Cloud Shell

Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı olan Azure Cloud Shell'i barındırıyor. Azure hizmetleriyle çalışmak için Cloud Shell ile Bash veya PowerShell kullanabilirsiniz. Yerel ortamınıza herhangi bir şey yüklemek zorunda kalmadan bu makaledeki kodu çalıştırmak için Cloud Shell önceden yüklenmiş komutlarını kullanabilirsiniz.

Azure Cloud Shell'i başlatmak için:

Seçenek Örnek/Bağlantı
Kodun veya komut bloğunun sağ üst köşesindeki Deneyin'i seçin. Deneyin seçildiğinde kod veya komut otomatik olarak Cloud Shell'e kopyalanmaz. Screenshot that shows an example of Try It for Azure Cloud Shell.
https://shell.azure.comadresine gidin veya Cloud Shell'i tarayıcınızda açmak için Cloud Shell'i Başlat düğmesini seçin. Button to launch Azure Cloud Shell.
Azure portalının sağ üst kısmındaki menü çubuğunda Cloud Shell düğmesini seçin. Screenshot that shows the Cloud Shell button in the Azure portal

Azure Cloud Shell'i kullanmak için:

  1. Cloud Shell'i başlatın.

  2. Kodu veya komutu kopyalamak için kod bloğundaki (veya komut bloğundaki) Kopyala düğmesini seçin.

  3. Windows ve Linux'ta Ctrl+Shift V'yi seçerek veya macOS üzerinde Cmd+Shift++V'yi seçerek kodu veya komutu Cloud Shell oturumuna yapıştırın.

  4. Kodu veya komutu çalıştırmak için Enter'ı seçin.

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 kaydederken, Azure CLI bunu yapmaz.

# 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 kapsam parametresini aboneliğinizin kimliğiyle, <resource_group_name> resource-group parametresini ise daha önce 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 uygulanacaksa 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üleyin bir önceden oluşturulmuş web uygulaması dağıtırsı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ı bir DNS girdisinin 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. Dağıtım başarıyla gerçekleştirildikten sonra, web uygulamanızı görüntüleyip çalıştığından emin olun. 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 buna 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.

Screenshot of the Event Grid subscription validation event in the pre-built web app.

İ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. <Kapsam> 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 microsoft.policy Analizler bekleyin. PolicyStateCreated event notification to appear in the web app. Oluşturduğumuz kaynak grubu Başlatılamayan değerini gösterirdata.complianceState.

Screenshot of the Event Grid subscription Policy State Created event for the resource group in the pre-built web app.

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 microsoft.policy Analizler bekleyin. Web uygulamasında görüntülenecek PolicyStateChanged olay bildirimi. 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 lütfen 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.

<resource_group_name> değerini yukarıda oluşturduğunuz kaynak grubuyla değiştirin.

az group delete --name <resource_group_name>

Sonraki adımlar

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