使用 .NET 管理存储帐户资源

本文介绍如何使用适用于 .NET 的 Azure 存储管理库管理存储帐户资源。 你可以创建和更新存储帐户、列出订阅或资源组中的存储帐户、管理存储帐户密钥以及删除存储帐户。 你还可以将客户端选项配置为使用自定义重试策略或设置其他选项。

先决条件

设置你的环境

如果你没有现有项目,本部分将指导你逐步准备一个项目,使其与适用于 .NET 的 Azure 存储管理库配合使用。 若要详细了解项目设置,请参阅开始使用 .NET 的 Azure 存储管理库

安装包

从项目目录中,使用 dotnet add package 命令安装 Azure 存储资源管理器的包和 Azure 标识客户端库的包。 与 Azure 服务的无密码连接需要 azure-identity 包。

dotnet add package Azure.Identity
dotnet add package Azure.ResourceManager.Storage

添加 using 指令

将这些 using 指令添加到代码文件的顶部:

using Azure.Identity;
using Azure.ResourceManager;

创建 ArmClient 对象

若要连接应用程序并管理存储帐户资源,请创建 ArmClient 对象。 此客户端对象是所有 ARM 客户端的入口点。 由于所有管理 API 都经过同一终结点,因此只需创建一个顶级 ArmClient 即可与资源交互。

以下示例会创建一个使用 DefaultAzureCredential 授权的 ArmClient对象,然后获取指定订阅 ID 的订阅资源:

ArmClient armClient = new ArmClient(new DefaultAzureCredential(), new ArmClientOptions { Environment = ArmEnvironment.AzureChina });

// Create a resource identifier, then get the subscription resource
ResourceIdentifier resourceIdentifier = new($"/subscriptions/{subscriptionId}");
SubscriptionResource subscription = armClient.GetSubscriptionResource(resourceIdentifier);

若要了解如何为资源组或存储帐户资源创建客户端对象,请参阅“创建用于管理存储帐户资源的客户端”。

授权

Azure 提供用于授权调用管理操作的内置角色。 Azure 存储还提供专用于 Azure 存储资源提供程序的内置角色。 有关详细信息,请参阅“管理操作的内置角色”。

创建存储帐户

你可以异步创建具有指定参数的存储帐户。 如果存储帐户已存在,并且后续创建请求使用相同的参数发出,则请求会成功。 如果参数不同,则会更新存储帐户属性。 有关更新现有存储帐户的示例,请参阅“更新存储帐户 SKU”。

每个存储帐户名称在 Azure 中都必须是唯一的。 若要检查存储帐户名称的可用性,可以使用以下方法:

以下代码示例演示如何检查存储帐户名称的可用性:

// Check if the account name is available
bool? nameAvailable = subscription
    .CheckStorageAccountNameAvailability(new StorageAccountNameAvailabilityContent(storageAccountName)).Value.IsNameAvailable;

你可以使用 StorageAccountCollection 类中的以下方法创建存储帐户:

创建存储帐户资源时,可以通过在 content 参数中添加 StorageAccountCreateOrUpdateContent 实例来设置存储帐户的属性。

以下代码示例会创建存储帐户,并为 SKU、类型、位置、访问层和共享密钥访问配置属性:

public static async Task<StorageAccountResource> CreateStorageAccount(
    ResourceGroupResource resourceGroup,
    string storageAccountName)
{
    // Define the settings for the storage account
    AzureLocation location = AzureLocation.ChinaEast2;
    StorageSku sku = new(StorageSkuName.StandardLrs);
    StorageKind kind = StorageKind.StorageV2;

    // Set other properties as needed
    StorageAccountCreateOrUpdateContent parameters = new(sku, kind, location)
    {
        AccessTier = StorageAccountAccessTier.Cool,
        AllowSharedKeyAccess = false,
    };

    // Create a storage account with defined account name and settings
    StorageAccountCollection accountCollection = resourceGroup.GetStorageAccounts();
    ArmOperation<StorageAccountResource> accountCreateOperation = 
        await accountCollection.CreateOrUpdateAsync(WaitUntil.Completed, storageAccountName, parameters);
    StorageAccountResource storageAccount = accountCreateOperation.Value;

    return storageAccount;
}

列出存储器帐户

你可以列出订阅或资源组中的存储帐户。 以下代码示例采用 SubscriptionResource 实例,并列出订阅中的存储帐户:

public static async Task ListStorageAccountsForSubscription(SubscriptionResource subscription)
{
    await foreach (StorageAccountResource storageAccount in subscription.GetStorageAccountsAsync())
    {
        Console.WriteLine($"\t{storageAccount.Id.Name}");
    }
}

以下代码示例采用 ResourceGroupResource 实例,并列出资源组中的存储帐户:

public static async Task ListStorageAccountsInResourceGroup(ResourceGroupResource resourceGroup)
{
    await foreach (StorageAccountResource storageAccount in resourceGroup.GetStorageAccounts())
    {
        Console.WriteLine($"\t{storageAccount.Id.Name}");
    }
}

管理存储帐户密钥

你可以使用以下方法获取存储帐户访问密钥:

此方法会返回 StorageAccountKey 实例的可迭代集合。

以下代码示例会获取存储帐户的密钥,并将名称和值写入控制台,以作为示例:

public static async Task GetStorageAccountKeysAsync(StorageAccountResource storageAccount)
   {
    AsyncPageable<StorageAccountKey> acctKeys = storageAccount.GetKeysAsync();
    await foreach (StorageAccountKey key in acctKeys)
    {
        Console.WriteLine($"\tKey name: {key.KeyName}");
        Console.WriteLine($"\tKey value: {key.Value}");
    }
}

你可以使用以下方法再生成存储帐户访问密钥:

此方法重新生成存储帐户密钥,并将新密钥值作为 StorageAccountKey 实例的可迭代集合的一部分返回。

以下代码示例会重新生成存储帐户密钥:

public static async Task RegenerateStorageAccountKey(StorageAccountResource storageAccount)
{
    StorageAccountRegenerateKeyContent regenKeyContent = new("key1");
    AsyncPageable<StorageAccountKey> regenAcctKeys = storageAccount.RegenerateKeyAsync(regenKeyContent);
    await foreach (StorageAccountKey key in regenAcctKeys)
    {
        Console.WriteLine($"\tKey name: {key.KeyName}");
        Console.WriteLine($"\tKey value: {key.Value}");
    }
}

更新存储帐户 SKU

你可以通过将更新的参数传递给以下任一方法来更新现有存储帐户设置:

以下代码示例将存储帐户 SKU 从 Standard_LRS 更新为 Standard_GRS

public static async Task UpdateStorageAccountSkuAsync(
    StorageAccountResource storageAccount,
    StorageAccountCollection accountCollection)
{
    // Update storage account SKU
    var currentSku = storageAccount.Data.Sku.Name;  // capture the current SKU value before updating
    var kind = storageAccount.Data.Kind ?? StorageKind.StorageV2;
    var location = storageAccount.Data.Location;
    StorageSku updatedSku = new(StorageSkuName.StandardGrs);
    StorageAccountCreateOrUpdateContent updatedParams = new(updatedSku, kind, location);
    await accountCollection.CreateOrUpdateAsync(WaitUntil.Completed, storageAccount.Data.Name, updatedParams);
    Console.WriteLine($"SKU on storage account updated from {currentSku} to {storageAccount.Get().Value.Data.Sku.Name}");
}

删除存储帐户

你可以使用以下方法删除存储帐户:

以下代码示例演示如何删除存储帐户:

public static async Task DeleteStorageAccountAsync(StorageAccountResource storageAccount)
{
    await storageAccount.DeleteAsync(WaitUntil.Completed);
}

配置 ArmClient 选项

创建 ArmClient 对象时,可以传递 ArmClientOptions 实例。 此类允许你为客户端对象的诊断、环境、传输和重试选项配置值。

以下代码示例演示如何配置 ArmClient 对象以更改默认重试策略:

// Provide configuration options for the ArmClient
ArmClientOptions armClientOptions = new()
{
    Retry = {
        Delay = TimeSpan.FromSeconds(2),
        MaxRetries = 5,
        Mode = RetryMode.Exponential,
        MaxDelay = TimeSpan.FromSeconds(10),
        NetworkTimeout = TimeSpan.FromSeconds(100)
    },
    Environment = ArmEnvironment.AzureChina
};

// Authenticate to Azure and create the top-level ArmClient
ArmClient armClient = new(new DefaultAzureCredential(), subscriptionId, armClientOptions);

资源

若要详细了解如何使用适用于 .NET 的 Azure 管理库来管理资源,请参阅以下资源。

代码示例

REST API 操作

Azure SDK for .NET 包含基于存储资源提供程序 REST API 而生成的库,允许你通过熟悉的 .NET 范例与 REST API 操作进行交互。 用于管理存储帐户资源的管理库方法使用以下文章中所述的 REST API 操作: