To clarify, `LifecyclePolicyCompleted` is an Event Grid System Topic:
Here is a sample script:
param (
[string]$subscriptionId = "XXXXX-XXX-XXX-XXX-XXXXX",
[string]$resourceGroupName = "YOUR-RG",
[array]$excludedStorageAccounts = @("SOME-EXCLUDED-STORAGE-ACCOUNT"),
[string]$userAssignedIdentity = "/subscriptions/XXXXX-XXX-XXX-XXX-XXXXX/resourcegroups/MY-RG/providers/microsoft.managedidentity/userassignedidentities/MY-MANAGED-IDENTITY",
[string]$eventEndpoint = "/subscriptions/XXXXX-XXX-XXX-XXX-XXXXX/resourceGroups/MY-RG/providers/Microsoft.Storage/storageAccounts/MY-STORAGE-ACCOUNT/queueServices/default/queues/MY-QUEUE"
)
$ErrorActionPreference = "Stop"
Select-AzSubscription -SubscriptionId $subscriptionId
$storageAccounts = Get-AzStorageAccount -ResourceGroupName $resourceGroupName
$filteredStorageAccounts = $storageAccounts | Where-Object { $excludedStorageAccounts -notcontains $_.StorageAccountName }
foreach ($storageAccount in $filteredStorageAccounts) {
$systemTopicName = "lifecycle-$($storageAccount.StorageAccountName)"
$resourceId = $storageAccount.Id
New-AzEventGridSystemTopic -ResourceGroupName $resourceGroupName `
-Name $systemTopicName `
-Location $storageAccount.Location `
-Source $resourceId `
-UserAssignedIdentity $userAssignedIdentity `
-TopicType "Microsoft.Storage.StorageAccounts"
$destination = New-AzEventGridStorageQueueEventSubscriptionDestinationObject -QueueName "storageevents" -ResourceId $eventEndpoint
New-AzEventGridSubscription -Name "lcmmonitor" `
-Destination $destination `
-FilterIncludedEventType @("Microsoft.Storage.BlobCreated", "Microsoft.Storage.BlobDeleted", "Microsoft.Storage.BlobTierChanged", "Microsoft.Storage.LifecyclePolicyCompleted", "Microsoft.Storage.AsyncOperationInitiated") `
-Scope $resourceId
}