如何获得“真实的” Azure App Service插槽实例名称?

时间:2019-10-06 06:48:35

标签: azure azure-web-sites azure-web-app-service

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

请注意,我不是是指广告位的名称。

例如:

  • 我的Azure App Service有两个名为“ App”(生产)和“ App-Staging”(登台)的插槽。
  • 然后我将项目的版本1部署到“应用”插槽。
  • 然后我将项目的版本2部署到“ App-Staging”插槽中。
  • 然后我从Azure门户执行插槽交换操作:

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

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

这是Production和Staging插槽中的两个Kudu Environment页面-请注意,这些值是相同的(例如Machine name),特定于插槽的值,或者是引用已部署的应用程序代码,而没有一个引用了它们所在的文件系统/容器实例:

enter image description here

是否有任何方法可以在不使用我的SlotName.txt技巧的情况下获取此信息?

2 个答案:

答案 0 :(得分:1)

答案隐藏在我的鼻子底下-以及不同的术语。

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

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

WEBSITE_DEPLOYMENT_ID的格式为{SiteName}[__{Random}],第一个部署空间的前缀为__{Random}

如果仔细查看我发布的屏幕截图,您会注意到左侧屏幕截图的名称为Site1__e928,而右侧屏幕截图的名称为“第一个”所以它的名字叫Site1

不幸的是,此信息未由Microsoft公开记录-至少在Google可以看到的范围内{searching for the term right now yields zero useful relevant results):

谜底解决了!

答案 1 :(得分:0)

您有一个称为部署槽设置值的东西,如下图所示:

在每个插槽中将一个键值对附加不同的值。

here
  在这里,即使您进行了交换,此设置也将坚持特定的应用程序。
 这可能是您要找的把戏。

Source

相关问题