【问题标题】:Azure Storage Account gets created without "blob.core.windows.net" endpointAzure 存储帐户在没有“blob.core.windows.net”端点的情况下创建
【发布时间】:2021-11-22 11:19:54
【问题描述】:

我有一个az cli 脚本来为我们的应用程序及其数据创建资源,我们经常使用它来拆除和重建我们的开发环境。 最近这部分停止工作,即使我们没有更改脚本。具体来说,我们这样做:

az storage account create -g <my-rg-name> --name <my-storage-account-name> --sku Standard_RAGRS --kind StorageV2 --hns --min-tls-version TLS1_2 --access-tier Hot

紧随其后

az storage container create --auth-mode login -g <my-rg-name> --account-name <my-storage-account-name> --name documents --public-access off

我最后一次成功运行它是在 9 月 15 日。下次我尝试是 9 月 27 日,但失败了,此后一直失败。

创建存储容器时的错误信息包括:

azure.common.AzureException: HTTPSConnectionPool(host='<my-account-name>.blob.core.windows.net', port=443):
 Max retries exceeded with url: /documents?restype=container (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x04D38928>:
 Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))

所以这里很有趣 - 它正在尝试 &lt;my-account-name&gt;.blob.core.windows.net 但实际上如果我查看新创建的存储帐户上的端点,它们是:

 "primaryEndpoints": {
    "blob": "https://<my-account-name>.z47.blob.storage.azure.net/",
    "dfs": "https://<my-account-name>.z47.dfs.storage.azure.net/",
    "file": "https://<my-account-name>.z47.file.storage.azure.net/",
    "internetEndpoints": null,
    "microsoftEndpoints": null,
    "queue": "https://<my-account-name>.z47.queue.storage.azure.net/",
    "table": "https://<my-account-name>.z47.table.storage.azure.net/",
    "web": "https://<my-account-name>.z47.web.storage.azure.net/"
  },

所以我们期待“xxx.blob.core.windows.net”,我们得到“xxx.z47.blob.storage.azure.net”。 这可能很好,我想我们可以查询该名称并使用它 - 但我不能轻易修复 az cli,而且他们对 blob.core.windows 抱有强烈期望的事实。 net 域名的存在让我觉得很多其他尝试使用它的东西都会被破坏(我消耗存储帐户的 ADF 管道肯定是 - 但也许我会修复它们以应对不同的url 如果仅此而已 - 但我怀疑这是不正常的,想了解原因)。

我已经确认它不是 az cli 特定的 - 如果我在门户中创建存储帐户,我们仍然会获得非标准端点。所以它在我们的订阅/资源组中,但我只是不知道它为什么会这样或如何处理它。 当然,微软的文档明确规定我们将获得一个 blob.core.windows.net 端点(例如https://docs.microsoft.com/en-us/azure/storage/common/storage-account-overview)。

有谁知道什么会导致 Azure 出现这种行为?

【问题讨论】:

  • @GauravMantri 通过门户获得相同的结果。这在我的公司客户的订阅中。如果我去个人订阅并创建一个新的 RG 和存储帐户,我会得到正常的行为。
  • az cli 版本为 2.28.0。我在星期一更新了它,看看是不是这个问题!
  • 在这种情况下,我建议您联系 Azure 支持。通常你会看到像 z47 这样的东西被嵌入到端点中,仅用于静态网站端点。

标签: azure command-line-interface azure-storage


【解决方案1】:

按照@Gaurav Mantri 的建议,请向 azure 支持团队提交票证。

转到 azure 门户>>帮助+支持>>单击创建新的支持票并填写所需的详细信息并提交票

【讨论】:

  • Gaurav 的评论就足够了。这不是答案,也不应该这样发布。
【解决方案2】:

事实证明,获得这些看起来很奇怪的端点的原因是我们最近启用了一个名为“分区 DNS”的私有预览功能。此功能允许我们超越每个区域每个订阅 250 个存储帐户的正常限制。

SDK 中的支持不完整。目前不支持的有 AZ CLI。因此,我们看到了问题(特别是 - 无法创建存储容器,az storage account show-connection-string 返回一个谎言)。 JS 和 Powershell 也不支持。

目前的标题是,我们可以通过使用最新的 SDK 和正确的连接字符串来解决大部分这些问题。但我根本无法让 Azure 存储事件工作 - 这很不幸,因为这是我们应用程序的一个非常基本的部分。

详情

以下是我们发现的一些细节,以及我们已经采取的措施。

  • az CLI - 无法修复,但可以做不同的事情
    • 使用 arm 模板创建容器 - 这是我们采用的方法
    • azcopy 包含容器创建功能 - 我没有探索该选项
    • 在门户中做所有事情
  • .NET - 更改连接字符串以明确指定端点 - 一切正常
  • Python - 更改了连接字符串,明确指定端点 - 一切正常
  • Devops Pipelines (AzureFileCopy@3) - 如果您指定 'destType:blob' 命令行参数,则可以使用
  • Azure 数据工厂
    • 可以通过为链接服务提供 dfs 端点的完整 URL,使涉及以 Azure 存储作为源和/或接收器的复制任务的管道工作。
    • 在任何情况下都无法使存储事件触发器工作

为了尝试解决存储事件触发器问题,我尝试从 Azure 存储端创建存储事件,而不是让 ADF 来做(认为 ADF 可能有 core.windows.net 假设,如果我创建我可以将它们分开放置),但是,可惜,没有运气。我找不到使用这些分区 DNS 终结点创建 Azure 存储事件的方法。 目前,我们在 ADF 中实现了一个临时解决方法,它是按计划触发的,并轮询 Azure 存储中的文件(即使这也不容易——没有列出 blob 的 ADF 块,我们必须编写一个 Azure 函数) .呸。希望微软能尽快缩小这一差距。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 2022-01-02
    • 2014-10-31
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    相关资源
    最近更新 更多