如何获得“真实的”Azure 应用服务槽实例名称?

Dai*_*Dai 6 azure azure-web-app-service

我想知道如何获取 Azure 应用服务插槽已加载到其中的“插槽实例”的唯一标识符。

请注意,我不是指插槽的名称。

例如:

  • 我的 Azure 应用服务有两个名为“App”(生产)和“App-Staging”(暂存)的插槽。
  • 然后我将项目的第 1 版部署到“应用程序”插槽。
  • 然后我将项目的第 2 版部署到“App-Staging”槽。
  • 然后,我从 Azure 门户执行 Slot Swap 操作:

    • 我的应用程序的两个实例同时运行(想象它们在某种容器中运行)。
    • 两个“容器”在仍在运行时立即从其关联的插槽“分离”。
    • 然后立即将两个“容器”重新连接到相对的插槽。
      • 即版本 1 停止接收 HTTP 请求app.azurewebsites.net并突然开始接收app-staging.azurewebsites.net.
      • 并且版本 2 停止接收 HTTP 请求app-staging.azurewebsites.net并突然开始接收app.azurewebsites.net.
  • 为了调查我遇到的一些问题,我在D:\home\SlotName.txt. 在“App”插槽中,我输入了“SlotA”,在“App-Staging”插槽中,我输入了“SlotB”。

  • SlotName.txt与应用程序实例一起移动,并允许我的应用程序检测它所在的文件系统或“容器”实例 - 这在执行插槽交换时不会改变。
  • 在尝试唯一标识部署或调查日志记录连续性问题时(例如,因为暂存槽不会记录生产数据),我发现此信息必不可少。
  • 但是,我的SlotName.txt文件似乎是一个 hack - 但是我在应用程序实例的环境变量中看不到任何显示相同信息的信息。
    • 环境变量确实会显示插槽名称,例如“App”和“App-Staging”,它们是可变的——当然,但它不会唯一标识应用程序部署到的“容器”或文件系统实例。

这是来自 Production 和 Staging 插槽的两个 Kudu Environment 页面 - 请注意,这些值要么相同(如Machine name)、特定于插槽,要么指代已部署的应用程序代码,并且它们都没有指代它们所在的文件系统/容器实例:

在此处输入图片说明

有没有办法在不使用我的SlotName.txt技巧的情况下获得这些信息?

Dai*_*Dai 7

答案就藏在我眼皮子底下——还有不同的术语。

我所说的“插槽实例名称”实际上是指“部署 ID”(我知道这是一个重载的术语,因为它也用在 Azure(现在是旧版)“云服务”PaaS 的上下文中)。

此信息在 Kudu 环境页面中可见,并且也作为环境变量公开:WEBSITE_DEPLOYMENT_ID

WEBSITE_DEPLOYMENT_ID值的形式为{SiteName}[__{Random}]__{Random}第一个部署空间省略前缀。

如果您仔细查看我发布的屏幕截图,您会发现左侧屏幕截图具有站点插槽名称,Site1__e928而右侧屏幕截图具有“第一个”插槽空间,因此其名称只是Site1

不幸的是,微软没有公开记录此信息 - 至少就 Google 而言是这样(现在搜索该术语会产生零有用的相关结果):

谜团已揭开!