uncategorized

使用PowerShell設定Azure Blob檔案內的max-age值

為什麼要替blob內的檔案設定max-age,如果你網站相關的靜態檔案是放在blob,那樣設定max-age的值是比較好的,什麼是max-age?主要是在網頁中一些靜態檔案的Cache,是透過Http header中的cache control作為控制,通常我們可以設定是屬性有privateno-cachemax-agemust-revalidate這幾種可以設定,一般你設定private、no-cache、must-revalidate這屬性,進入網站時候都會在讀取一下靜態檔案,若是設定max-age,則是在一個範圍時間內都不會去讀取這個靜態檔案,但是,你若是按下重新整理,不管設定哪一種屬性都會去讀取檔案,也因此設定max-age就有其必要性

通常你靜態檔案跟網站放在一起,可以透過web.config方式去設定http header或是透過程式去控制,不過,若是靜態檔案是放在Azure Blob中,就沒有這樣方便,如果你要透過azure exploer去設定也是可以,但是檔案一多,或是你是透過其他方式將檔案放入時候,就有可能會沒設定到,因此,可以透過Powershell一次都幫你設定完成,甚至你也可以作到自動化方式去設定

  1. 首先必須取得blob讀寫權限

    1
    2
    3
    4
    5
    $targetSubscription="XXX"
    $storageAccountsName="AAA"
    $storageContainers="ABC"
    #存取帳戶金鑰
    $storagekey="plVh13GipfmA4k7YaPFf0fUXbRLfrHs1ojjEkB3i5dCgV+oRpDey+hasY/5atBt8P2KozbC6MNCImURwUHu3gg=="
  2. 取得blob內所有檔案,並設定max-age值

    1
    2
    3
    4
    5
    $sourceFile = @()
    $sourceFile = Get-AzureStorageBlob -Container $storageContainers -Blob "*"
    $totalCount = $sourceFile.Count
    $cacheControlValue ="max-age=43200"
    $ctx = New-AzureStorageContext -StorageAccountName $storageAccountsName -StorageAccountKey $storagekey
  3. 用迴圈方式每一筆去設定就可以

    1
    2
    3
    4
    5
    6
    7
    8
    foreach($file in $sourceFile)
    {
    $Blob = Get-AzureStorageBlob -Context $ctx -Container $storageContainers -Blob $file.Name
    $CloudBlockBlob = [Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob] $Blob.ICloudBlob
    $CloudBlockBlob.Properties.CacheControl=$cacheControlValue
    $CloudBlockBlob.SetProperties()
    Write-Host $CloudBlockBlob.Properties.CacheControl
    }

這樣檔案中的Cache control就會被設定max-age了,後續也可以把這powershell去做排程或是其他自動化的設定,就可以達到cache效果