我正在使用 Azure Data Lake Storage (ADLS),并拥有多租户设置,其中每个租户都有一个单独的容器。每个租户容器内的文件夹结构都是标准化的,并包含一个 Processed 目录,其结构如下:
<tenantIdContainer>\Processed
我正在尝试跨这些容器实施生命周期管理规则。目标是在特定时间段后自动将 Processed 目录中的文件移至冷存储。我最初尝试创建此规则涉及使用以 * 开头的通配符模式,但此方法不起作用。
我正在寻求有关如何在 ADLS 中为此类特定于租户的容器设置正确设置这些生命周期规则的指导。您能否就此提供一些指导?
为特定于租户的容器实施 Azure Data Lake 存储生命周期规则
我认为您不能在单个规则中应用此条件。您可以通过使用容器名称创建多个规则来应用此条件。
您可以使用下面的PowerShell脚本;它将为每个容器创建每个规则以实现 Azure 生命周期规则。
脚本:
Connect-AzAccount
Select-AzSubscription -SubscriptionId "xxxxx"
$ctx = New-AzStorageContext -StorageAccountName 'xxxx' -UseConnectedAccount
$containers = Get-AzStorageContainer -Context $ctx
$rules = @()
foreach ($container in $containers) {
$path = "$($container.Name)/Processed/"
$action = Add-AzStorageAccountManagementPolicyAction -BaseBlobAction TierToCool -DaysAfterModificationGreaterThan 30
$filter = New-AzStorageAccountManagementPolicyFilter -PrefixMatch $path -BlobType BlockBlob
$rule = New-AzStorageAccountManagementPolicyRule -Name "Move to cold storage-$($container.Name)" -Action $action -Filter $filter
$rules += $rule
}
# Apply all the rules after the loop
Set-AzStorageAccountManagementPolicy -ResourceGroupName "xxxx" -StorageAccountName 'xxx' -Rule $rules
上述脚本为存储帐户中的每个容器创建单独的规则。这些规则存储在一个名为
$rules
的数组中,并且每个规则都在一个循环内添加到该数组中,该循环遍历存储帐户中的所有容器。创建所有规则后,脚本使用 Set-AzStorageAccountManagementPolicy
cmdlet 将它们应用到存储帐户。
输出:
ResourceGroupName : xxxx
StorageAccountName : xxxx
Id : /subscriptions/xxx/resourceGroups/xxxx/providers/Microsoft.Storage/storageAccounts/xxx/managementPolicies/default
Type : Microsoft.Storage/storageAccounts/managementPolicies
LastModifiedTime : 23-01-2024 06:29:48
Rules : [
{
"Enabled": true,
"Name": "Move to cold storage-3efaxxxx",
"Definition": {
"Actions": {
"BaseBlob": {
"TierToCool": {
"DaysAfterModificationGreaterThan": 30,
"DaysAfterLastAccessTimeGreaterThan": null,
"DaysAfterCreationGreaterThan": null,
"DaysAfterLastTierChangeGreaterThan": null
},
"TierToArchive": null,
"Delete": null,
"TierToCold": null,
"TierToHot": null,
"EnableAutoTierToHotFromCool": null
},
"Snapshot": null,
"Version": null
},
"Filters": {
"PrefixMatch": [
"3xxxx/Processed/"
],
"BlobTypes": [
"blockBlob"
],
"BlobIndexMatch": null
}
}
},
{
"Enabled": true,
"Name": "Move to cold storage-72f98xxx",
"Definition": {
"Actions": {
"BaseBlob": {
"TierToCool": {
"DaysAfterModificationGreaterThan": 30,
"DaysAfterLastAccessTimeGreaterThan": null,
"DaysAfterCreationGreaterThan": null,
"DaysAfterLastTierChangeGreaterThan": null
},
"TierToArchive": null,
"Delete": null,
"TierToCold": null,
"TierToHot": null,
"EnableAutoTierToHotFromCool": null
},
"Snapshot": null,
"Version": null
},
"Filters": {
"PrefixMatch": [
"7xxxx/Processed/"
],
"BlobTypes": [
"blockBlob"
],
"BlobIndexMatch": null
}
}
},
{
"Enabled": true,
"Name": "Move to cold storage-da10xxxxx",
"Definition": {
"Actions": {
"BaseBlob": {
"TierToCool": {
"DaysAfterModificationGreaterThan": 30,
"DaysAfterLastAccessTimeGreaterThan": null,
"DaysAfterCreationGreaterThan": null,
"DaysAfterLastTierChangeGreaterThan": null
},
"TierToArchive": null,
"Delete": null,
"TierToCold": null,
"TierToHot": null,
"EnableAutoTierToHotFromCool": null
},
"Snapshot": null,
"Version": null
},
"Filters": {
"PrefixMatch": [
"dxxxx/Processed/"
],
"BlobTypes": [
"blockBlob"
],
"BlobIndexMatch": null
}
}
}
]
参考: