从c#创建Azure生命周期管理规则



是否有办法直接从c#创建Azure存储帐户的生命周期管理规则?

我知道如何在Azure Portal或Terraform上做到这一点,我在Java上看到了同样的问题,答案是直接调用API。如果没有其他方法,我将恢复此方法,但我感兴趣的是是否有"开箱即用"的方法。这个问题的解决方案,很可能来自某个Azure包。

根据@GauravMantri的回答,我使用了Microsoft.Azure.Management.Storage包,并使用以下代码创建了管理策略:

var credential = new DefaultAzureCredential();
var token = await credential.GetTokenAsync(new TokenRequestContext(new[] { "https://management.azure.com/.default" }));
var storageClient = new StorageManagementClient(new TokenCredentials(token.Token))
{
SubscriptionId = "InsertSubscriptionId"
};
// Defining the lifecycle management policy
var baseBlob = new ManagementPolicyBaseBlob(delete: new DateAfterModification() { DaysAfterModificationGreaterThan = 365 });
var action = new ManagementPolicyAction(baseBlob);
var filter = new ManagementPolicyFilter(new List<string> { "blockBlob" }, new List<string> { "test/" });
var definition = new ManagementPolicyDefinition(action, filter);
var rule = new ManagementPolicyRule(lifecycleManagementRuleName, definition);
var schema = new ManagementPolicySchema(new List<ManagementPolicyRule> { rule });
// Creating policy
await storageClient.ManagementPolicies.CreateOrUpdateWithHttpMessagesAsync("InsertResourceGroup", options.StorageAccount.Name, schema);

上面定义的规则在最后一次修改的365天后删除test容器中的blob。

让我用管理Azure资源的新方法来更新这个答案,使用NuGet Azure. resourcemanager . storage包。在本例中,我将删除test容器

中仅存在一个月以上的blob。
var credential = new DefaultAzureCredential(includeInteractiveCredentials: true);
ArmClient armClient = new(credential);
SubscriptionResource? subscription = await armClient.GetSubscriptions().FirstOrDefaultAsync(x => x.Id.SubscriptionId == "xxxx-xxxx-xxxx-xxxx");

var storageAccount = subscription.GetStorageAccounts(cancellationToken).FirstOrDefault(x => x.Id.Name == "YourAccountStorageName");

var policy = storageAccount.GetStorageAccountManagementPolicy();

var data = new StorageAccountManagementPolicyData();
data.Rules = new List<ManagementPolicyRule>();

var dateAfter = new DateAfterModification();
dateAfter.DaysAfterCreationGreaterThan= 30;
var baseBlob = new ManagementPolicyBaseBlob();
baseBlob.Delete = dateAfter;

var action = new ManagementPolicyAction();
action.BaseBlob = baseBlob;

var filter = new ManagementPolicyFilter(new List<string> { "blockBlob" });
filter.PrefixMatch.Add("test/");

var definition = new ManagementPolicyDefinition(action);
definition.Filters = filter;

var rule = new ManagementPolicyRule(ruleName, ManagementPolicyRuleType.Lifecycle, definition);
rule.IsEnabled = true;

data.Rules.Add(rule);

policy.CreateOrUpdate(WaitUntil.Completed, data, cancellationToken);

最新更新