NodeJS Azure跨存储帐户复制blob的函数



我有一个容器的私人存储帐户。当我上传一个blob到容器时,我触发一个带有事件网格的'BlobCreated'事件,然后由一个函数拾取。

该函数的目的是将源blob复制到另一个"备份"存储帐户。

我正在使用新的@azure/storage-blob &@azure/identity NodeJS package .

const {BlobServiceClient} = require('@azure/storage-blob');
const {ManagedIdentityCredential} = require('@azure/identity');

创建源blob和目标blob &容器客户端,然后创建目标容器。这些都运行良好:

const sourceBlobServiceClient = new BlobServiceClient(
`https://${sourceAccountName}.blob.core.windows.net`,
new ManagedIdentityCredential()
);
const destBlobServiceClient = new BlobServiceClient(
`https://${destinationAccountName}.blob.core.windows.net`,
new ManagedIdentityCredential()
);
const sourceContainer = sourceBlobServiceClient.getContainerClient(containerName);
const destContainer = destBlobServiceClient.getContainerClient(containerName);
await destContainer.createIfNotExists();

然后我得到source &目标blob客户端并初始化副本:

const sourceBlob = sourceContainer.getBlobClient(blobName);
const destBlob = destContainer.getBlobClient(sourceBlob.name);
const response = await destBlob.beginCopyFromURL(sourceBlob.url);

sourceBlob。url属性是正确的,并且blob存在于源目录中,但是beginCopyFromURL语句失败,出现以下错误:

Result: FailureException: RestError:指定的资源不存在

我已经在我的功能应用程序上启用了managediidentity,并给了它所有者&存储Blob数据所有者在两个源&目标存储帐户。似乎beginCopyFromURL不是身份验证,而是试图访问源blob作为公共。

我错过了什么,或者也许有一个更好的方法来复制跨存储帐户使用节点?

感谢

我在Github上提出了这个问题,结果证明这是设计的。

Copy Blob From URL操作的源可以是任何Azure存储帐户中任何已提交的块Blob,该帐户可以是公共的,也可以是经过共享访问签名授权的。源blob的最大长度为256 MiB。https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url

如果源blob在另一个帐户下,则应该在源URL后面附加SAS。

最新更新