Azure CLI 创建存储 Blob 容器 - 随机错误“未找到对象”

问题描述 投票:0回答:1

我有一个bash脚本,它使用Azure CLI在Azure中创建一组资源(总共大约10个)。在某一时刻,脚本创建一个存储帐户,然后创建各种 Blob 容器、共享和队列。有时一切正常,有时脚本无法创建列表中的第一个 Blob 容器或队列或共享,指示“未找到对象”。这是代码(名称已修改):

az storage account create -g $GROUP --name $NAME --public-network-access Enabled --location $LOCATION --sku Standard_LRS --output none

containers=("container1" "container2" "container3" "container4" "container5")
for container in ${containers[@]}; do
  echo Creating $container blob container in $NAME storage account...
  $AZ storage container create --account-name $NAME --name $container --auth-mode login --output none
done

有时,这可以正常工作,但大多数时候它无法创建一些(通常是第一个,但不一定)容器,并出现以下错误:

Client-Request-ID=3ec920ce-3205-11ee-b1e8-10510731bfcc Retry policy did not allow for a retry: Server-Timestamp=Thu, 03 Aug 2023 13:54:21 GMT, Server-Request-ID=9a20e545-3003-0085-7212-c6adf3000000, HTTP status code=404, Exception=The specified resource does not exist. ErrorCode: ResourceNotFound<?xml version="1.0" encoding="utf-8"?><Error><Code>ResourceNotFound</Code><Message>The specified resource does not exist.RequestId:9a20e545-3003-0085-7212-c6adf3000000Time:2023-08-03T13:54:21.3663492Z</Message></Error>.
The specified resource does not exist. ErrorCode: ResourceNotFound
<?xml version="1.0" encoding="utf-8"?><Error><Code>ResourceNotFound</Code><Message>The specified resource does not exist.
RequestId:9a20e545-3003-0085-7212-c6adf3000000
Time:2023-08-03T13:54:21.3663492Z</Message></Error>

创建队列和文件共享时会观察到类似的行为。

没有任何迹象表明未找到什么资源或原因。我也不明白为什么这有时有效,有时却无效。我正在循环中创建容器,因此如果存在语法错误,则将无法创建所有容器,而不仅仅是某些容器。

为了消除容器名称可能出现的任何问题,我尝试了上面的字面意思 - container1、container2、container2 等 - 相同的结果:无法创建其中一些,通常是第一个。

然后我想,也许存在计时/传播问题,所以我在创建容器后添加了 10 秒的睡眠 - 这又没有帮助。

还有其他想法吗?

已编辑添加

我几乎可以肯定这是一个时间问题。将睡眠时间更改为 60 秒后,大多数情况下脚本都可以正常工作,但有时它仍然会失败并出现相同的错误。根据评论,这可能是由于 ARM 在内部需要一些时间来配置新的存储帐户。然而,如果我查看此存储帐户的属性,我只能看到这些:

"provisioningState" : "Succeeded",
"statusOfPrimary" : "available"

我没有其他可以依赖的属性。然而,即使这两个显示如上,问题仍然存在。是否有明确的方法来验证存储帐户是否已“准备好”并且我可以开始创建内容?

bash azure azure-blob-storage azure-storage azure-cli
1个回答
0
投票

同样的事情。尝试编写一个快速脚本来创建资源组、存储帐户和用于保存我的 terraform 状态文件的容器。我确实在遵循 Azure 指南

发现这个已关闭的问题没有实际答案。

当我在帐户和容器创建之间睡眠时间少于 60 秒时,它几乎总是失败:

  ....other props truncated.....
  "primaryLocation": "centralus",
  "privateEndpointConnections": [],
  "provisioningState": "Succeeded",
  "publicNetworkAccess": null,
  "resourceGroup": "my-rg",
  "routingPreference": null,
  "sasPolicy": null,
  "secondaryEndpoints": null,
  "secondaryLocation": "eastus2",
  "sku": {
    "name": "Standard_GRS",
    "tier": "Standard"
  },
  "statusOfPrimary": "available",
  "statusOfSecondary": "available",
  "storageAccountSkuConversionStatus": null,
  "tags": {},
  "type": "Microsoft.Storage/storageAccounts"
}

+ sleep 10
+ az storage container create --name tfstate --account-name blah --auth-mode login

The specified resource does not exist.
RequestId:<some worthless UUID>
Time: ...
ErrorCode:ResourceNotFound (what resource!!!!!!)

当睡眠时间达到 60 秒或更长时,它似乎起作用了。

我得到了整个最终一致性的事情......但是轮询帐户并确定容器创建是否有效的正确方法是什么?

© www.soinside.com 2019 - 2024. All rights reserved.