在 App Service 中将Azure 存储装载为本地共享

Azure 存储是微软的云存储解决方案,适用于现代数据存储场景。 Azure 存储为云中的数据对象提供高度可用、大规模可缩放、持久且安全的storage。 本指南介绍如何将 Azure 存储 文件装载为 Azure 应用服务 中的 Windows 代码(非容器)中的网络共享。

Azure 存储支持 Azure 文件存储 Shares 和 Premium Files Shares for App Service。 Azure 存储不是App Service的默认storage。 这是单独计费的。 还可以在 ARM 模板中配置Azure 存储。

自定义安装的存储的优点包括:

  • 为您的 App Service 应用配置持久存储,并单独管理该存储。
  • 使静态内容(如视频和图像)随时可用于App Service应用。
  • 将应用程序日志文件或存档较旧的应用程序日志写入Azure文件共享。
  • 跨多个应用或其他Azure服务共享内容。

Windows 代码支持以下功能:

  • 对存储帐户的安全访问通过密钥保管库、专用终结点和服务终结点(使用虚拟网络集成时)进行保护。
  • Azure 文件存储(读/写).
  • 每个应用最多 5 个装入点。
  • 使用 /mounts/<path-name> 装载 Azure 存储 文件共享。

下面是将Azure storage装载到应用的三个选项:

装载选项 使用情况
基本 在使用 Azure 门户装载存储时选择此选项。 您可以使用基本选项,只要存储帐户不使用服务终结点、专用终结点或Azure 密钥保管库。 在这种情况下,门户会为您获取和存储访问密钥。
访问密钥 如果计划使用 Azure CLI 装载存储,则需要获取访问密钥。 如果storage帐户不使用 service endpoints、private endpoints 或 Azure 密钥保管库,请选择此选项。
密钥保管库 如果您计划使用 Azure CLI 挂载存储,并且需要使用访问密钥,请使用此选项。 使用Azure 密钥保管库安全地存储和检索access密钥时,选择此选项。 Azure 密钥保管库可以集中安全地存储应用程序机密,并能够监视、管理和集成其他Azure服务,例如Azure 应用服务。

先决条件

限制

  • Storage防火墙 仅支持通过 专用终结点 和 服务终结点 使用 虚拟网络集成。
  • 当您为部署到 App Service 的 Windows 代码应用配置 Azure 存储挂载时,不支持 Azure Blob。
  • 不支持 FTP/FTPS 访问已挂载的存储。 使用 Azure 存储资源管理器。
  • 不支持将 /mounts、mounts/name1/name2、/ 和 /mounts/name.ext/ 映射到自定义装载的存储。 只能使用 /mounts/pathname 来将自定义存储装载到 Web 应用。
  • 存储挂载不包括在 备份 中。 请务必遵循最佳做法来备份Azure 存储帐户。
  • 在应用程序中进行虚拟网络集成后,挂载的驱动器使用的是 RFC1918 IP 地址,而不是来自虚拟网络的 IP 地址。
  • 禁用基于密钥的认证的存储账户不被支持。

准备装载

无需执行额外的步骤,因为门户会为你获取和存储access密钥。

将存储装载到 Windows 代码中

若要使用 Azure portal 将存储挂载到 Windows 代码,

  1. 在 Azure portal 中,转到应用。

  2. 在左侧导航中,选择 “设置>配置”。 选择 路径映射,然后选择新建 Azure 存储 挂载。

  3. 根据下表配置存储挂载。 完成后,选择“确定”。

    设置 说明
    名称 装载配置的名称。 不要使用空格。
    配置选项 如果存储帐户不使用专用终结点或Azure 密钥保管库,请选择Basic。 否则,选择“高级”。
    存储帐户 Azure 存储帐户。 它必须包含 Azure 文件存储 共享。
    共享名 要装载的文件存储共享。
    存储访问 为 Azure 密钥保管库 选择密钥保管库引用。 否则,请选择 “手动输入”。
    访问密钥(仅限高级) 访问密钥为您的存储帐户。
    装载路径 要挂载的应用服务中的目录。 仅支持 /mounts/pathname 。
    应用程序设置 使用Azure 密钥保管库机密选择应用设置。
    部署槽位设置 选中后,存储挂载设置也适用于部署槽位。

注意

当您添加、编辑或删除存储挂载时,应用将会重启。

最佳实践

  • Azure 存储挂载可以配置为虚拟目录,以提供静态内容。 若要配置虚拟目录,请在左侧导航中选择 “设置>配置”。 然后选择 “路径映射”,然后选择 “新建虚拟应用程序”或“目录”。 将 物理路径 设置为在 Azure 存储 装载中定义的 挂载路径。

  • 若要避免延迟问题,请将应用和Azure 存储帐户置于同一区域。 如果应用和 Azure 存储 帐户位于同一区域,在 Azure 存储 防火墙配置中授予 App Service IP 地址访问权限时,这些 IP 限制将不被遵循。

  • 在 Azure 存储 帐户中,请避免 重新生成用于在应用中装载存储的访问密钥。 存储帐户包含两个密钥。 Azure 应用服务存储Azure storage帐户密钥。 使用分步方法确保存储挂载在密钥重建期间应用程序仍可使用。 例如,假设你使用了 key1 在应用中配置存储挂载:

    1. 重新生成“密钥 2”。
    2. 在存储挂载配置中,更新访问密钥以使用重新生成的 key2。
    3. 重新生成“密钥1”。
  • 如果删除Azure 存储帐户、容器或共享,请删除应用中相应的storage装载配置,以避免可能出现的错误情况。

  • 装载Azure 存储帐户可以是标准层或高级性能层。 根据应用容量和吞吐量要求,为storage帐户选择适当的性能层。 请参阅 文件的可拓展性和性能目标。

  • 如果应用缩放到多个实例,则所有实例都连接到同一装载Azure 存储帐户。 若要避免性能瓶颈和吞吐量问题,请为storage帐户选择适当的性能层。

  • 我们不建议对本地数据库(如 SQLite)或任何其他依赖文件句柄和锁的应用程序和组件使用存储挂载。

  • 如果在存储帐户挂载到应用时进行存储故障转移,则需要重新启动应用或移除并重新添加存储挂载后,挂载才会连接。

  • 使用具有virtual network集成的Azure 文件存储时,请确保端口 445 处于打开状态。 此外,请确保将应用设置 WEBSITE_CONTENTOVERVNET 设置为 1。

  • 装载Azure 存储帐户可以是标准层或高级性能层。 根据应用容量和吞吐量要求,为storage帐户选择适当的性能层。 请参阅 Files 的可伸缩性和性能目标。

Azure 存储是微软的云存储解决方案,适用于现代数据存储场景。 Azure 存储为云中的数据对象提供高度可用、大规模可缩放、持久且安全的storage。 本指南介绍如何将 Azure 存储 文件装载为 App Service Windows 容器中的网络共享。

Azure 存储支持 Azure 文件存储 Shares 和 Premium Files Shares。 Azure 存储不是App Service的默认storage。 这是单独计费的。 还可以在 ARM 模板中配置Azure 存储。

自定义安装的存储的优点包括:

  • 为您的 App Service 应用配置持久存储,并单独管理该存储。
  • 使静态内容(如视频和图像)随时可用于App Service应用。
  • 将应用程序日志文件或存档较旧的应用程序日志写入Azure文件共享。
  • 跨多个应用或其他Azure服务共享内容。
  • 在 Windows 容器(包括隔离容器)中装载 Azure 存储。 有关详细信息,请参阅 App Service environment v3。

Windows 容器支持以下功能:

下面是将Azure storage装载到应用的三个选项:

装载选项 使用情况
基本 在使用 Azure 门户挂载存储时选择此选项。 您可以使用基本选项,只要存储帐户不使用服务终结点、专用终结点或Azure 密钥保管库。 在这种情况下,门户会为您获取和存储访问密钥。
访问密钥 如果计划使用Azure CLI装载存储,则需要获取访问密钥。 如果存储帐户不使用 服务端点、私有端点 或 Azure 密钥保管库,请选择此选项。
密钥保管库 如果计划使用 Azure CLI 挂载存储,需要访问密钥,请使用此选项。 使用Azure 密钥保管库安全地存储和检索access密钥时,选择此选项。 Azure 密钥保管库可以集中安全地存储应用程序机密,并能够监视、管理和集成其他Azure服务,例如Azure 应用服务。

先决条件

限制

准备装载

无需执行额外的步骤,因为门户会为你获取和存储access密钥。

将存储挂载到 Windows 容器

若要使用 Azure portal 将存储挂载到 Windows 容器,

  1. 在 Azure portal 中,转到应用。

  2. 在左侧导航中,选择 “设置>配置”。 选择 路径映射,然后选择新建 Azure 存储 挂载。

  3. 根据下表配置存储挂载。 完成后,选择“确定”。

    设置 说明
    名称 装载配置的名称。 不要使用空格。
    配置选项 选择基本。
    存储帐户 Azure 存储帐户。 它必须包含 Azure 文件存储 共享。
    共享名 要装载的文件存储共享。
    装载路径 要装载的 Windows 容器内的目录。 请勿使用根目录([C-Z]:*或) 或/主目录([C-Z]:\home* 或 /home)。
    部署槽位设置 选中后,存储挂载设置也适用于部署槽位。

注意

添加、编辑或删除存储挂载将重启应用。

最佳实践

  • 若要避免延迟问题,请将应用和Azure 存储帐户置于同一区域。 如果应用和 Azure 存储 帐户位于同一区域,在 Azure 存储 防火墙配置中授予 App Service IP 地址访问权限时,这些 IP 限制将不被遵循。

  • 在 Azure 存储 帐户中,请避免 重新生成用于在应用中装载存储的访问密钥。 存储帐户包含两个密钥。 Azure 应用服务存储Azure storage帐户密钥。 使用分步方法确保存储挂载在密钥重建期间应用程序仍可使用。 例如,假设你使用了 key1 在应用中配置存储挂载:

    1. 重新生成“密钥 2”。
    2. 在存储挂载配置中,更新访问密钥以使用重新生成的 key2。
    3. 重新生成“密钥1”。
  • 如果删除Azure 存储帐户、容器或共享,请删除应用中相应的storage装载配置,以避免可能出现的错误情况。

  • 装载Azure 存储帐户可以是标准层或高级性能层。 根据应用容量和吞吐量要求,为storage帐户选择适当的性能层。 请参阅 文件的可拓展性和性能目标。

  • 如果应用缩放到多个实例,则所有实例都连接到同一装载Azure 存储帐户。 若要避免性能瓶颈和吞吐量问题,请为storage帐户选择适当的性能层。

  • 不要将存储挂载用于本地数据库(例如 SQLite),也不要用于依赖文件句柄和锁定的任何其他应用程序和组件。

  • 使用具有virtual network集成的Azure 文件存储时,请确保端口 445 处于打开状态。

  • 如果在存储帐户挂载到应用时进行存储故障转移,则需要重新启动应用或移除并重新添加存储挂载后,挂载才会连接。

后续步骤

注意

NFS 支持现已可用于Linux 上的应用服务。

本指南介绍如何将Azure 存储装载为内置 Linux 容器中的网络共享或App Service中的自定义 Linux 容器。 Azure 存储是微软的云存储解决方案,适用于现代数据存储场景。 Azure 存储为云中的数据对象提供高度可用、大规模可缩放、持久且安全的storage。 Azure 存储不是App Service的默认storage。 这是单独计费的。 还可以在 ARM 模板中配置Azure 存储。

自定义安装的存储的优点包括:

  • 为您的 App Service 应用配置持久存储,并单独管理该存储。
  • 使静态内容(如视频和图像)随时可用于App Service应用。
  • 将应用程序日志文件或存档较旧的应用程序日志写入Azure文件共享。
  • 跨多个应用或其他Azure服务共享内容。
  • 支持 Azure 文件存储 NFS 和 Azure 文件存储 SMB。
  • 支持 Azure Blob 存储(只读访问)。
  • 每个应用最多支持五个装入点。

自定义安装存储的限制包括:

  • 存储防火墙仅在使用虚拟网络集成时,通过服务端点和私有端点支持。
  • 不支持 FTP/FTPS 访问权限到自定义挂载的存储。 使用 Azure 存储资源管理器。
  • 存储帐户共享访问密钥是唯一受到支持的身份验证方法。 不支持 Entra ID 和 RBAC 角色。
  • Azure CLI、Azure PowerShell和Azure SDK 支持处于预览状态。
  • 不支持将 / 或 /home 映射到自定义挂载的存储。
  • 不要将存储装载映射到 /tmp 或其子目录。 此操作可能会导致应用启动时超时。
  • Azure 存储 不支持 Docker Compose 方案。
  • 存储挂载不包括在 备份 中。 请务必遵循最佳做法来备份Azure 存储帐户。
  • NFS 支持仅适用于Linux 上的应用服务。 Windows 代码和 Windows 容器不支持 NFS。 需要在 NFS 的同一虚拟网络上配置网络应用和存储帐户。 用于文件共享的storage帐户应具有 Premium 性能层,并将 File storage 用作帐户类型。 使用 NFS 协议时,Azure 密钥保管库不适用。
  • 在应用程序中进行虚拟网络集成后,挂载的驱动器使用的是 RFC1918 IP 地址,而不是来自虚拟网络的 IP 地址。

装载选项

需要将存储装载到应用。 下面是三个用于Azure storage的装载选项:

装载选项 使用情况
基本 选择此选项可以通过 Azure 门户装载存储。 您可以使用基本选项,只要存储帐户不使用服务终结点、专用终结点或Azure 密钥保管库。 在这种情况下,门户会为您获取和存储访问密钥。
访问密钥 如果计划使用 Azure CLI 装载存储,则需要获取访问密钥。 如果存储帐户不使用 服务端点、私有端点 或 Azure 密钥保管库,请选择此选项。
密钥保管库 如果计划使用 Azure CLI 挂载存储,需要访问密钥,请使用此选项。 使用Azure 密钥保管库安全地存储和检索access密钥时,请选择此选项。 Azure 密钥保管库可以集中安全地存储应用程序机密,并能够监视、管理和集成其他Azure服务,例如Azure 应用服务。

先决条件

准备装载

无需执行额外的步骤,因为门户会为你获取和存储access密钥。

将存储装载到 Linux 容器

挂载存储的方式取决于存储访问选项,以及您是使用门户还是Azure CLI。

  1. 在 Azure portal 中,转到应用。

  2. 在左侧导航中,选择 “设置>配置”。 选择 路径映射,然后选择新建 Azure 存储 挂载。

  3. 根据下表配置存储挂载。 完成后,选择“确定”。

    设置 说明
    名称 装载配置的名称。 不要使用空格。
    配置选项 如果存储帐户未使用 服务终结点、私有终结点 或 Azure 密钥保管库,请选择 Basic。 否则,选择“高级”。
    存储帐户 Azure 存储帐户。
    存储类型 根据要装载的storage选择类型。 Azure Blobs 仅支持只读访问。
    Storage container 或 Share name 要装载的文件存储共享或 Blob 容器。
    装载路径 要装载到 Azure 存储 的 Linux 容器内的目录。 请勿使用 / 或 /home。
    部署槽位设置 选中后,存储挂载设置也适用于部署槽。

注意

添加、编辑或删除存储挂载将重启应用。

验证已挂载的存储

若要验证是否已为应用成功装载Azure 存储,请执行以下作:

  1. 在容器中打开 SSH 会话。

  2. 在 SSH 终端中执行以下命令:

    df –h 
    
  3. 检查是否已挂载存储共享。 如果不存在,则说明在装载存储共享时出现问题。

  4. 使用以下命令检查该存储挂载的延迟或一般可达性:

    tcpping Storageaccount.file.core.chinacloudapi.cn 
    

存储装载点健康检查和自动恢复

Azure 应用服务 包括内置的健康检查机制,以确保挂载的 Azure 存储 卷(Azure 文件存储 或 Azure Blob)保持可访问且响应迅速。 此系统有助于防止因存储挂载过时或断开连接而导致的应用程序挂起。

运行状况检查的工作原理

  1. 定期 I/O 测试
    App Service定期对名为 __lastCheckTime.txt 的标记文件执行文件 I/O。

    • 位置:LogFiles装载路径下的子目录(例如/mount/path/LogFiles/__lastCheckTime.txt)。
    • 行为:
      • 尝试对此文件执行读取操作。
      • 该文件不需要存在 - “找不到文件”被视为成功检查。
  2. 频率
    默认情况下,检查每 5 秒 运行一次。

  3. 失败处理

    • 每个失败或超时的检查会增加故障 ping 计数器的数值。
    • 失败超过配置的阈值时:
      • Azure 文件存储: 18 次 ping 失败
      • Azure Blob: 15 次 ping 失败
    • 装载标记为发生故障,App Service会自动重启应用以恢复与共享的连接。

通过应用设置进行配置

可以使用以下应用设置自定义健康检查行为。

存储类型 设置名称 默认值 说明
Azure 文件存储 WEBSITE_BYOS_FILES_HEALTH_CHECK_FREQUENCY 5 健康检查的时间间隔(以秒为单位)。
Azure 文件存储 WEBSITE_BYOS_FILES_MAX_FAILED_PINGS 18 将卷标记为故障前的连续失败次数。
Azure 文件存储 WEBSITE_BYOS_FILES_AUTO_RECOVERY_ENABLED true 设置为 false 禁用自动恢复逻辑。
Azure Blob WEBSITE_BYOS_BLOB_HEALTH_CHECK_FREQUENCY 5 健康检查的时间间隔(以秒为单位)。
Azure Blob WEBSITE_BYOS_BLOB_MAX_FAILED_PINGS 15 将卷标记为故障前的连续失败次数。
Azure Blob WEBSITE_BYOS_BLOB_AUTO_RECOVERY_ENABLED true 设置为 false 禁用自动恢复逻辑。
Azure Blob WEBSITE_BYOS_BLOB_DIRECT_IO false 如果启用该功能,所有事务将直接查询远程存储,并且将绕过缓存。 此设置在应用程序级别应用,因此会影响应用程序装载的所有 Blob 共享。

注释

  • 自动恢复功能有助于防止由存储路径无响应引起的长时间运行应用程序挂起。
  • 除非对特定的装载行为进行故障排除,否则不要禁用自动恢复。

最佳实践

性能

  • 若要避免延迟问题,请将应用和Azure 存储帐户置于同一区域。 如果应用和 Azure 存储 帐户位于同一区域,在 Azure 存储 防火墙配置中授予 App Service IP 地址访问权限时,这些 IP 限制将不被遵循。

  • 装载Azure 存储帐户可以是标准层或高级性能层。 根据应用容量和吞吐量要求,为storage帐户选择适当的性能层。 请参阅对应于storage类型的可伸缩性和性能目标:Files 和 Blobs。

  • 如果应用缩放到多个实例,则所有实例都连接到同一装载Azure 存储帐户。 若要避免性能瓶颈和吞吐量问题,请为storage帐户选择适当的性能层。

安全性

  • 在 Azure 存储 帐户中,请避免 重新生成用于在应用中装载存储的访问密钥。 存储帐户包含两个密钥。 Azure 应用服务存储Azure storage帐户密钥。 使用分步方法确保存储挂载在密钥重建期间应用程序仍可使用。 例如,假设你使用了 key1 在应用中配置存储挂载:

    1. 重新生成“密钥 2”。
    2. 在存储挂载配置中,更新访问密钥以使用重新生成的 key2。
    3. 重新生成“密钥1”。

配置

  • 如果需要使用实时文件系统(希望快速更改、添加或删除文件),请在装载storage时使用Azure 文件存储作为storage类型。 当文件是静态的并且你不希望它们发生更改时,请使用 Azure Blob。

故障排除

  • 自定义容器中的装载目录应为空。 例如,如果指定/home下的目录,则装载Azure 存储时,将删除存储在此路径上的任何内容。 如果迁移现有应用的文件,请在开始之前备份应用及其内容。
  • 装载 NFS 共享时,需要在 storage 帐户上禁用安全传输要求。 启用此设置时,App Service不支持装载 NFS 共享。 它使用端口 2049 和虚拟网络集成和专用终结点作为安全措施。
  • 如果删除Azure 存储帐户、容器或共享,请删除应用中相应的storage装载配置,以避免可能出现的错误情况。
  • 不要将存储挂载用于本地数据库(例如 SQLite),也不要用于依赖文件句柄和锁定的任何其他应用程序和组件。
  • 使用virtual network集成时,请确保打开以下端口:Azure 文件存储:80 和 445。 Azure Blob:80 和 443。
  • 如果在存储帐户挂载到应用时进行存储故障转移,则需要重新启动应用或移除并重新添加存储挂载后,挂载才会连接。