【问题标题】:Azure storage : find if account is premium or notAzure 存储:查找帐户是否为高级帐户
【发布时间】:2017-08-20 19:42:43
【问题描述】:

有没有办法确定一个帐户是高级帐户还是不使用 Azure Storage Java API 或 Azure REST API?

如果我有存储帐户名称和密钥,有没有办法确定存储帐户类型?

【问题讨论】:

    标签: azure azure-storage


    【解决方案1】:

    您可以通过 REST API 在 sku.tier 中检索此信息:

    请求

    GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}?api-version=2016-12-01
    

    回应

    {
        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}",
        "name": "accountName",
        "location": "account geo region",
        "tags": {
            "key1": "value1", 
            "key2": "value2"
        },
        "type": "Microsoft.Storage/StorageAccount",
        "properties": {
            "provisioningState": "status",
            "encryption": {
                    "services": {
                            "blob": {
                                    "enabled": true,
                                    "lastEnabledTime": dateTime}
                    }
                    "keySource": "Microsoft.Storage"
            }
            "primaryEndpoints": {
                "blob": "blob endpoint",
                "queue": "queue endpoint",
                "table": "table endpoint",
                 "file": "file endpoint"
            },
            "primaryLocation": "primary geo region",
            "statusOfPrimary": "available|unavailable",
            "lastGeoFailoverTime": "dateTime",
            "secondaryLocation": "secondary geo region",
            "statusOfSecondary": "available|unavailable",
            "secondaryEndpoints": {
                "blob": "secondary blob endpoint",
                "queue": "secondary queue endpoint",
                "table": "secondary table endpoint",
            },
            "creationTime": "dateTime",
            "customDomain": {
                    "name": "user domain”
             },
            "accessTier": "Cool|Hot"
        },
        "sku": {
                "name": "Standard_LRS|Standard_ZRS|Standard_GRS|Standard_RAGRS|Premium_LRS"
                "tier": "Standard|Premium"
        }
        "kind": "Storage|BlobStorage"
    }
    

    https://docs.microsoft.com/en-us/rest/api/storagerp/storageaccounts

    https://docs.microsoft.com/en-us/rest/api/storagerp/srp_json_get_storage_account_properties

    【讨论】:

    • 这需要存储帐户的权限。我正在寻找一种仅适用于存储帐户名称和密钥的解决方案。
    【解决方案2】:

    如果您知道subscriptionId,请使用@Thiago Custodio 提供的REST 解决方案。

    如果您不知道订阅 ID,请查看我的以下解决方法。

    根据this thread,我们知道高级存储帐户不支持 CORS 和 Storage Analytics,因此我们可以根据此获取帐户类型。如果 downloadServiceProperties 方法没有抛出异常,则账户类型为 Standard。否则,帐户类型为高级。以下代码供您参考。

    public string getAccountType(string accountName, string accountKey)
    {
        string connectionString = "DefaultEndpointsProtocol=http;AccountName=" + accountName + ";AccountKey=" + accountKey + ";";
        // Setup the cloud storage account.
        CloudStorageAccount account = CloudStorageAccount.parse(connectionString);
        // Create a blob service client
        CloudBlobClient blobClient = account.createCloudBlobClient();
        try
        {
            bloblClient.downloadServiceProperties();
            return "Standard";
        }
        catch(StorageException e)
        {
            return "Premium";
        }
    }
    

    【讨论】:

    • 我已经通过线程,但解决方案需要依靠 MSFT 不将上述服务添加到高级存储。我不确定这样做是否正确。
    • 帐户名称和密钥是访问存储内容的凭据,而不是存储帐户属性本身。我们只能根据标准存储和高级存储的区别来确定账户类型。我们还可以发现高级存储不支持块 blob。如果抛出任何异常,我们可以编写将一些字节上传到 blob 的代码。存储类型为高级存储。
    • 有道理,如果 MSFT 计划将上述服务添加到高级存储中会很有趣。
    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 2017-06-28
    • 2021-01-19
    • 2017-01-03
    • 1970-01-01
    • 2019-10-29
    • 2020-10-04
    • 2017-05-09
    相关资源
    最近更新 更多