azure - 无法通过 Bicep 部署具有生命周期管理规则的 Azure 存储帐户

标签 azure azure-blob-storage azure-bicep

当我尝试通过 Bicep 部署具有生命周期管理规则的存储帐户时,出现错误。假设说要创建两条新规则,但实际应用失败。

错误:

{
  "code": "DeploymentFailed",
  "message": "At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-deployment-operations for usage details.",
  "details": [
    {
      "code": "HttpResourceNotFound",
      "message": "The request url https://management.azure.com/subscriptions/xxxxxxxxxxxxxxxx/resourcegroups/xxxxxxxxx/providers/Microsoft.Storage/storageAccounts/xxxxxxxxxxx/managementPolicies/Rule2?api-version=2022-09-01 is not found."
    },
    {
      "code": "HttpResourceNotFound",
      "message": "The request url https://management.azure.com/subscriptions/xxxxxxxxxxxxxxxx/resourcegroups/xxxxxxxxx/providers/Microsoft.Storage/storageAccounts/xxxxxxxxxxx/managementPolicies/Rule1?api-version=2022-09-01 is not found."
    }
  ]
}

二头肌:

resource blob_storage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: sku
  }
  kind: 'StorageV2'
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    azureFilesIdentityBasedAuthentication: {
      directoryServiceOptions: 'None'
    }
    minimumTlsVersion: tlsVersion
    isHnsEnabled: true
    networkAcls: {
      bypass: 'AzureServices'
      virtualNetworkRules: [for subnet in subnetList: {
        id: subnet
        action: 'Allow'
        state: 'Succeeded'
      }]
      ipRules: []
      defaultAction: 'Deny'
    }
    supportsHttpsTrafficOnly: true
    encryption: {
      services: {
        file: {
          keyType: 'Account'
          enabled: true
        }
        blob: {
          keyType: 'Account'
          enabled: true
        }
      }
      keySource: 'Microsoft.Storage'
    }
    accessTier: 'Hot'
  }
}

resource default_blob 'Microsoft.Storage/storageAccounts/blobServices@2022-09-01' = {
  parent: blob_storage
  name: 'default'
  properties: {
    deleteRetentionPolicy: {
      enabled: true
      days: retentionDays
    }
  }
}

resource containers 'Microsoft.Storage/storageAccounts/blobServices/containers@2022-09-01' = [for containerName in containerList: {
  parent: default_blob
  name: containerName
}]

resource lifecycleRule 'Microsoft.Storage/storageAccounts/managementPolicies@2022-09-01' = [for lifecycleRule in lifecycleManagementRules: {
  name: '${lifecycleRule.ruleName}'
  parent: blob_storage
  properties: {
    policy: {
      rules: lifecycleRule
    }
  }
}]

参数:

"lifecycleManagementRules": {
            "value": [
            {
              "ruleName": "Rule1",
              "enabled": true,
              "type": "Lifecycle",
              "definition": {
                "actions": {
                  "baseBlob": {
                    "delete": {
                      "daysAfterLastAccessTimeGreaterThan": 30
                    }
                  }
                },
                "filters": {
                  "blobTypes": [
                    "blockBlob",
                    "pageBlob"
                  ],
                  "prefixMatch": "logs/"
                }
              }
            },
            {
              "ruleName": "Rule2",
              "enabled": true,
              "type": "Lifecycle",
              "definition": {
                "actions": {
                  "baseBlob": {
                    "delete": {
                      "daysAfterLastAccessTimeGreaterThan": 60
                    }
                  }
                },
                "filters": {
                  "blobTypes": [
                    "blockBlob"
                  ],
                  "prefixMatch": "backups/"
                }
              }
            }
            ]
        }
    }

我尝试了不同 Bicep API 版本的管理策略,并确认子 ID、资源组名称和存储帐户名称均正确。

最佳答案

该错误表明部署期间未创建或识别这两条新规则,并且无法找到请求 URL。我认为您的代码似乎是正确的,但请确保您对管理策略使用有效且受支持的Api 版本。我使用 Api 版本 @2021-09-01 并且能够正确部署规则和存储帐户。

我对您的二头肌代码做了一些修改并附在下面。

param location string
param sku string
resource blob_storage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'newcarolinestore'
  location: location
  sku: {
    name: sku
  }
  kind: 'StorageV2'
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    azureFilesIdentityBasedAuthentication: {
      directoryServiceOptions: 'None'
    }
    minimumTlsVersion: 'TLS1_2'
    isHnsEnabled: true
    supportsHttpsTrafficOnly: true
    encryption: {
      services: {
        file: {
          keyType: 'Account'
          enabled: true
        }
        blob: {
          keyType: 'Account'
          enabled: true
        }
      }
      keySource: 'Microsoft.Storage'
    }
    accessTier: 'Hot'
  }
}

resource default_blob 'Microsoft.Storage/storageAccounts/blobServices@2022-09-01' = {
  parent: blob_storage
  name: 'default'
  properties: {
    deleteRetentionPolicy: {
      enabled: true
      days: 90
    }
  }
}

resource container   'Microsoft.Storage/storageAccounts/blobServices/containers@2022-09-01' = {
  name: 'newcarolinestore/default/mycontainer'
  dependsOn: [
      blob_storage
  ]
}

resource lifecycleRule 'Microsoft.Storage/storageAccounts/managementPolicies@2021-09-01' = {
  name: 'default'
  parent: blob_storage
  properties: {
    policy: {
      rules: [
        {
          enabled: true
          name: 'Rule1'
          type: 'Lifecycle'
          definition: {
            actions: {
              baseBlob: {
                tierToCool: {
                  daysAfterModificationGreaterThan: 30
                }
                tierToArchive: {
                  daysAfterLastTierChangeGreaterThan: 7
                  daysAfterModificationGreaterThan: 100
                }
                delete: {
                  daysAfterModificationGreaterThan: 60
                }
              }
            }
            filters: {
              blobTypes: [
                'blockBlob'
              ]
              "prefixMatch": "backups/"
            }
          }
        }
      ]
    }
  }
}

在 Azure CLI 中部署上述二头肌代码,如下所示。

az deployment group create --resource-group caroline --name rollout03 --template-file jb.bicep

enter image description here

enter image description here

引用article作者:@Massimo Bonanni,了解有关生命周期管理规则的更多相关信息。

关于azure - 无法通过 Bicep 部署具有生命周期管理规则的 Azure 存储帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76671939/

相关文章:

Azure:无法将存档 blob 从一个存储帐户复制到另一个存储帐户?

java - 如何在 Azure 队列存储中绑定(bind)事件监听器

azure - 在 Azure 管道上使用 `originalSwaggerUrl` 进行自定义 API 连接器部署期间,API 定义不会更新

azure - 如何删除 MS Graph PowerShell 模块中的目录角色成员?

python - 从 Azure Key Vault 下载 .PEM 格式的公钥

Azure 语音转文本 REST API V3 二进制数据

Azure PUT BlockList 返回 400( block ID 无效。 block ID 必须采用 Base64 编码。)

azure - 从 Bicep 获取 Log Analytics 工作区 key

azure - Bicep - 将数组与循环配对

azure - 通过 REST API 的 Cosmos DB IN 子句