你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azurite 模拟器进行本地 Azure 存储开发

Azurite 开源模拟器提供了一个免费的本地环境,用于测试基于云的应用程序。 如果对应用程序在本地工作方式感到满意,请切换到在云中使用 Azure 存储帐户。

Azurite 是一种以 JavaScript 编写的轻型存储模拟器,在模拟 Azure 存储服务进行本地开发的 Node.js 上运行。 它支持 Blob、队列和表存储服务,并在 Windows、Linux 和 macOS 上提供跨平台支持。 有关安装和运行 Azurite 的帮助,请参阅 安装和运行 Azurite 模拟器

Azurite 还允许开发人员针对本地存储环境运行测试,模拟 Azure 的行为,这对集成和端到端测试至关重要。 若要详细了解如何使用 Azurite 进行自动测试,请参阅 使用 Azurite 运行自动测试

Azurite 取代 了 Azure 存储模拟器,并继续更新以支持最新版本的 Azure 存储 API。

Azurite 与 Azure 存储之间的差异

Azurite 的本地实例与云中的 Azure 存储帐户之间存在功能差异。

重要

Azurite 仅支持 Blob、队列和表存储服务。 它不支持 Azure 文件存储或 Azure Data Lake Storage Gen2,但在 Windows、Linux 和 macOS 上提供跨平台支持。

终结点和连接 URL

Azurite 的服务终结点不同于 Azure 存储帐户的终结点。 本地计算机不执行域名解析,要求 Azurite 终结点是本地地址。

在 Azure 存储帐户中处理资源时,帐户名称是 URI 主机名的一部分。 要寻址的资源是 URI 路径的一部分:

<http|https>://<account-name>.<service-name>.core.windows.net/<resource-path>

以下 URI 是 Azure 存储帐户中 Blob 的有效地址:

https://myaccount.blob.core.windows.net/mycontainer/myblob.txt

IP 样式 URL

由于本地计算机不解析域名,因此帐户名称是 URI 路径的一部分,而不是主机名。 对 Azurite 中的资源使用以下 URI 格式:

http://<local-machine-address>:<port>/<account-name>/<resource-path>

以下地址可用于访问 Azurite 中的 Blob:

http://127.0.0.1:10000/myaccount/mycontainer/myblob.txt

生产样式 URL

(可选)可以修改主机文件,以访问具有 生产样式 URL 的帐户。

首先,向主机文件添加一行或多行。 例如:

127.0.0.1 account1.blob.localhost
127.0.0.1 account1.queue.localhost
127.0.0.1 account1.table.localhost

接下来,设置环境变量以启用自定义存储帐户和密钥:

set AZURITE_ACCOUNTS="account1:key1:key2"

可以添加更多帐户。 请参阅“连接到 Azurite”一文的“自定义存储帐户和密钥”部分。

启动 Azurite 并使用自定义连接字符串访问帐户。 在以下示例中,连接字符串假定使用默认端口。

DefaultEndpointsProtocol=http;AccountName=account1;AccountKey=key1;BlobEndpoint=http://account1.blob.localhost:10000;QueueEndpoint=http://account1.queue.localhost:10001;TableEndpoint=http://account1.table.localhost:10002;

不要以这种方式使用 Azure 存储资源管理器访问默认帐户。 存储资源管理器始终在 URL 路径中添加帐户名称,导致失败。

默认情况下,将 Azurite 与生产样式 URL 一起使用时,帐户名称应为完全限定域名中的主机名,例如 http://devstoreaccount1.blob.localhost:10000/container。 若要在 URL 路径 http://foo.bar.com:10000/devstoreaccount1/container中使用具有帐户名称的生产样式 URL,请确保在启动 Azurite 时使用 --disableProductStyleUrl 参数。

如果使用 host.docker.internal 请求 URI 主机(例如: http://host.docker.internal:10000/devstoreaccount1/container),Azurite 将从请求 URI 路径获取帐户名称。 无论在启动 Azurite 时是否使用 --disableProductStyleUrl 参数,此行为都是真实的。

可扩展性和性能

Azurite 不支持大量连接的客户端。 无法保证性能。 Azurite 用于开发和测试目的。

错误处理

Azurite 与 Azure 存储错误处理逻辑保持一致,但存在差异。 例如,错误消息可能有所不同,而错误状态代码则保持一致。

RA-GRS

Azurite 支持读取访问异地冗余复制(RA-GRS)。 对于存储资源,通过追加 -secondary 到帐户名称来访问辅助位置。 例如,以下地址可用于使用 Azurite 中的只读辅助数据库访问 Blob:

http://127.0.0.1:10000/devstoreaccount1-secondary/mycontainer/myblob.txt

表支持

对 Azurite 中的表的支持目前为预览版。 有关详细信息,请参阅 Azurite V3 表 项目。

对持久函数的支持需要表。

重要

对表存储的 Azurite 支持目前为 预览版。 有关适用于 Beta 版、预览版或尚未正式发布的 Azure 功能的法律条款,请参阅 适用于 Microsoft azure 预览版的补充使用条款

Azurite 是开源的

欢迎对阿祖利的贡献和建议。 转到 Azurite GitHub 项目 页或 GitHub 问题 ,获取要跟踪的里程碑和工作项,以获取即将推出的功能和 bug 修复。 GitHub 中还会跟踪详细的工作项。

工作区结构

初始化 Azurite 时,可能会在工作区位置创建以下文件和文件夹。

  • __blobstorage__ - 包含 Azurite blob 服务持久化二进制数据的目录
  • __queuestorage__ - 包含 Azurite 队列服务持久化二进制数据的目录
  • __tablestorage__ - 包含 Azurite 表服务持久化二进制数据的目录
  • __azurite_db_blob__.json - Azurite Blob 服务元数据文件
  • __azurite_db_blob_extent__.json - Azurite Blob 服务盘区元数据文件
  • __azurite_db_queue__.json - Azurite 队列服务元数据文件
  • __azurite_db_queue_extent__.json - Azurite 队列服务范围元数据文件
  • __azurite_db_table__.json - Azurite 表服务元数据文件
  • __azurite_db_table_extent__.json - Azurite 表服务盘区元数据文件

若要清理 Azurite,请删除文件和文件夹并重启模拟器。

后续步骤