标签: azure-blob-storage

如何集成测试Azure Blob存储?

我正在开发一个企业业务项目,需要将应用程序从本地迁移到 Azure 云。

某些应用程序需要 Azure Blob 存储。所有 Azure 云基础设施都可以使用 Manage Identity 进行访问,业务要求是在无法访问 Azure 门户的情况下测试和验证 Azure Blob 方法,开发人员只能访问任何非生产或生产的存储资源。也就是说,该公司要求我们在将代码推送到云之前通过在本地和 GitHub 工作流程上进行测试来使所有存储功能正常工作。

当然,我可以启动我的个人 Azure 帐户并使用它,但仍然会使用我的帐户作为游乐场进行测试,但并不是真正可用的测试。

通用测试 Azure Blob 存储的整个想法,无需对 Blob 存储有任何类型的访问权限。

这可能吗?我怎样才能实现这一目标?

以下是我针对 Azure Blob 的工作 POC 方法:

private readonly BlobContainerClient _blobContainerClient;

public AzureBlobStorage(string connectionString, string container)
{
    _blobContainerClient = new BlobContainerClient(connectionString, container);
    _blobContainerClient.CreateIfNotExists();
}

public async Task<string> ReadTextFile(string filename)
{
    var blob = _blobContainerClient.GetBlobClient(filename);
    if (!await _blobContainerClient.ExistsAsync()) return string.Empty;
    var reading = await blob.DownloadStreamingAsync();
    StreamReader reader = new StreamReader(reading.Value.Content);
    return await reader.ReadToEndAsync(); …
Run Code Online (Sandbox Code Playgroud)

.net c# azure azure-blob-storage

5
推荐指数
1
解决办法
3974
查看次数

如何验证 Azure Blob 存储共享访问签名 (SAS) URL?

我的应用程序允许用户输入 Azure Blob 存储 SAS URL。我将如何去验证它?我正在使用Azure 存储 Blob 客户端库,并且似乎没有任何方法可以在不实际执行 Blob 操作(我不想这样做)的情况下验证 SAS URL。

验证操作可以是异步的,并在必要时涉及 API 调用(即可以通过按钮触发)。

public class SASURLValidator
{
    public async Task<bool> ValidateSASURL(string sasURL)
    {
        // What goes here?
    }

    public async Task Test()
    {
        var result = await ValidateSASURL("https://blobstorageaccountname.blob.core.windows.net/containerName?sp=w&st=2022-02-15T02:07:49Z&se=2022-03-15T10:07:49Z&spr=https&sv=2020-08-04&sr=c&sig=JDFJEF342JDSFJIERJsdjfkajiwSKDFJIQWJIFJSKDFJWE%3D")
        // result should be true if the above is a valid SAS
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# azure-storage azure-blob-storage shared-access-signatures

5
推荐指数
1
解决办法
3293
查看次数

无法通过 ARM 模板在 Azure 存储中创建容器

使用arm模板,我能够创建存储帐户、队列、文件服务。但是当我也尝试创建容器时,azure devops 任务失败。

  "resources": [
    {
      "name": "[parameters('storageAccountName')]",
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-08-01",
      "location": "[parameters('location')]",
      "properties": {
        "accessTier": "[parameters('accessTier')]",
        "minimumTlsVersion": "TLS1_2",
        "supportsHttpsTrafficOnly": true,
        "allowBlobPublicAccess": true,
        "allowSharedKeyAccess": true,
        "allowCrossTenantReplication": true,
        "defaultToOAuthAuthentication": false,
        "networkAcls": {
          "bypass": "AzureServices",
          "defaultAction": "Allow",
          "ipRules": []
        },
        "isHnsEnabled": "[parameters('isHnsEnabled')]"
      },
      "dependsOn": [],
      "sku": {
        "name": "[parameters('accountType')]"
      },
      "kind": "[parameters('kind')]",
      "tags": {
        "InstanceId": "[parameters('instanceId')]"
      }
    },
    {
      "name": "[concat(parameters('storageAccountName'), '/default')]",
      "type": "Microsoft.Storage/storageAccounts/blobServices",
      "apiVersion": "2021-08-01",
      "properties": {
        "restorePolicy": {
          "enabled": false
        },
        "deleteRetentionPolicy": {
          "enabled": true,
          "days": 7
        },
        "containerDeleteRetentionPolicy": …
Run Code Online (Sandbox Code Playgroud)

azure azure-storage azure-blob-storage azure-devops

5
推荐指数
1
解决办法
1385
查看次数

公共访问级别:Blob 与容器

在公共访问级别方面,ContainerBlob有什么区别 ?(见下图蓝色框)

根据微软的定义

容器组织一组 blob,类似于文件系统中的目录。存储帐户可以包含无限数量的容器,并且容器可以存储无限数量的 Blob。

但我不明白这与公共访问级别有什么关系。

在此输入图像描述

blob azure azure-blob-storage azure-storage-account

5
推荐指数
1
解决办法
6425
查看次数

使用 Azure powershell 列出容器上的现有 SASToken

通过 powershell 创建 SASToken 时,它会从 New-AzureStorageContainerSASToken comdlet 返回创建的 SAS 令牌 URL。

$Context = New-AzureStorageContext -StorageAccountName $StorageAccount -StorageAccountKey $StorageAccountKey                                                        
$now = Get-Date

$sasUrl = New-AzureStorageContainerSASToken -Name mycontainer -Permission rwdl -StartTime $now.AddHours(-1) -ExpiryTime $now.AddMonths(1) -Context $context -FullUri  
echo $sasUrl 
Run Code Online (Sandbox Code Playgroud)

但是现在万一我丢失了它,我该如何列出现有的 SASToken?您可能在同一个容器上有几个。

尝试了 Get-AzureStorageContainer,但此信息不可用。
与其他 Get-AzureStorage* 一起玩,但未能找到它。
是否通过 powershell 支持此操作?

powershell azure azure-storage azure-powershell azure-blob-storage

4
推荐指数
1
解决办法
4377
查看次数

最佳实践:对 eventhub 数据进行分区并通过 azure eventhub 到外部存储(azure blob)实现大规模、低延迟和高吞吐量

作为安全产品的一部分,我拥有大规模云服务(azure worker 角色),它从事件中心读取事件,将它们分批处理到 ~2000 并存储在 blob 存储中。每个事件都有一个 MachineId(发送它的机器)。事件以随机顺序来自事件中心,我以随机顺序将它们存储在 blob 存储中。吞吐量高达 125K 事件/秒,每个事件约为 2K,因此我们有高达 250MB/秒的流量。我们有大约 100 万台机器...

稍后,另一个云服务下载 blob 并对事件运行一些检测逻辑。他按 MachineId 对事件进行分组,并尝试从机器时间线中了解某些内容

问题是今天来自同一台机器的事件被填充到不同的 blob。如果我可以通过它们的 MachineId 以某种方式对事件进行分组,并确保机器的某个时间窗口填充到相同的 blob,这将增加我可以在云中进行的检测。

我们确实将事件写入另一个 Map reduce 系统,并且在那里我们正在做很多复杂的检测,但那些当然具有高延迟。如果我可以在云中更好地对事件进行分组,我就可以实时捕获更多信息

我有什么技术可以帮助我吗?

提前致谢

azure data-partitioning azure-eventhub azure-blob-storage

4
推荐指数
1
解决办法
2651
查看次数

有没有办法使用逻辑应用程序创建一个新的blob作为文件夹?

我已经设置了一个逻辑应用程序来将我的FTP服务器上的新文件移动到我的azure存储容器中,该容器具有我的文件的blob.我找到了一种使用存储资源管理器创建新文件夹的方法,但有没有办法可以使用逻辑应用程序自动执行此操作?例如,如果在我的FTP中创建了一个新文件夹并添加了文件,我想创建一个blob文件夹并将这些文件移动到该blob中.

azure azure-logic-apps azure-blob-storage

4
推荐指数
1
解决办法
916
查看次数

Azure blob 文件名中的模式搜索

我正在尝试搜索与我的搜索模式匹配的文件。

static void ListBlobsInFolder() {
            var account = <MyStorageAccount>
            var blobClient = account.CreateCloudBlobClient();
            var containerName = "importcontainer";
            var folderName = "subfolder";
            var container = blobClient.GetContainerReference(containerName);
            var query = container.ListBlobs(prefix: folderName, useFlatBlobListing: true, blobListingDetails: BlobListingDetails.None);
            foreach(var item in query) {
                Console.WriteLine(item.Uri.Segments.Last());
            }
        }
Run Code Online (Sandbox Code Playgroud)

这让我得到子文件夹中存在的文件列表。

有没有办法返回只匹配模式的文件。示例我想检索其中包含“abc”的文件名。

这在 Azure 中可能吗?

c# search azure azure-blob-storage

4
推荐指数
1
解决办法
5102
查看次数

使用适用于 Python 的 Azure 存储 SDK 将多个文件从文件夹上传到 Azure Blob 存储

我的 Windows 机器上的本地文件夹中有一些图像。我想将所有图像上传到同一个容器中的同一个 blob。

我知道如何使用Azure 存储 SDK 上传单个文件BlockBlobService.create_blob_from_path(),但我看不到一次上传文件夹中所有图像的可能性。

但是,Azure 存储资源管理器为此提供了一个功能,因此它必须以某种方式成为可能。

是否有提供此服务的功能,或者我是否必须遍历文件夹中的所有文件并create_blob_from_path()为同一个 blob 多次运行?

python azure azure-storage azure-blob-storage

4
推荐指数
1
解决办法
4974
查看次数

在写入期间锁定 Azure blob

我必须更新存储为 Azure blob 的大文件。此更新将需要几秒钟,我需要确保没有其他客户端获得部分更新的文件。

https://docs.microsoft.com/en-us/azure/storage/common/storage-concurrency 中所述,锁定文件进行写入应该很容易,但据我所知,其他客户端仍然可以读取文件。我可以使用读锁,但这意味着只有一个客户端可以读取文件,这不是我想要的。

根据防止 azure blob 在创建时被其他服务访问,似乎至少会在上传结束时“提交”新文件,但我找不到更新现有文件时会发生什么的信息。

所以,问题是:在更新(替换)操作期间其他客户端会读取什么?

  • 他们会在提交新数据之前读取旧文件还是
  • 他们会读取部分更新的文件内容吗?

c# azure azure-blob-storage

4
推荐指数
1
解决办法
1246
查看次数