Azure AutomationでCDN Purge

Azure Storage BlobをMicrosoft CDNで使っている際に、Blobが更新されたらCDNをパージするようにしたい。

  1. Azure Automationを作成する

  2. 作成したAzureAutomationにRunbookを作成する

  3. 作成したRunbookにWebhookを追加する

  4. ストレージアカウント(v2)のイベントサブスクリプションでRunbookのWebhook URLに通知する


Runbookには以下のスクリプトをかく

<#
    .DESCRIPTION
        CDNをパージする
    .NOTES
        AUTHOR: iwate
        LASTEDIT: Nov 11, 2024
#>
param(
    [Parameter(Mandatory = $false)]
    [object] $WebhookData
)

$Prefix = "https://<storage_account_name>.blob.core.windows.net/"

Import-Module -Name Az.Cdn

if ($WebhookData) {

    if (-not $WebhookData.RequestBody) {
        $WebhookData = (ConvertFrom-Json -InputObject $WebhookData)
    }

    $Payload = ConvertFrom-Json -InputObject $WebhookData.RequestBody
    $ContentUrl = $Payload.data.url

    if ($ContentUrl.StartsWith($Prefix)) {
        $ContentPath = $ContentUrl.Substring($Prefix.Length - 1)

        try
        {
            "Logging in to Azure..."
            Connect-AzAccount -Identity
        }
        catch {
            Write-Error -Message $_.Exception
            throw $_.Exception
        }

        Clear-AzCdnEndpointContent -NoWait -EndpointName "<endpoint name>" -ProfileName "<profile name>" -ResourceGroupName "<rg name>" -SubscriptionId "<subscription id>" -ContentPath $ContentPath
    }
}


参考文献

https://learn.microsoft.com/ja-jp/azure/automation/automation-webhooks?tabs=portal