问题标签 [azure-deployment-slots]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
azure-web-app-service - 在一个应用服务计划下托管多个网站的 Azure 部署槽
我正在根据一个高级应用服务计划将多个网站迁移到 Azure。按照此处提供的说明https://dotnetthoughts.net/deploying-multiple-application-in-webapp/我能够在一个应用服务计划下托管多个站点,但我很难弄清楚如何使用部署槽对于多个站点。看起来每个应用服务计划只有一个“生产”插槽,这意味着我只能将部署插槽与唯一的生产插槽交换。有人知道每个网站如何拥有一个生产槽和一个相应的“测试”槽吗?
azure - 我们如何在 azure 中将整个 web.config 从暂存槽转换为生产槽?
我在我的 azure 应用服务中创建了多个插槽(测试、阶段和产品)。同样,我为每个环境创建了各自的 web.config 文件。我正在通过测试环境槽中的章鱼部署工具部署我的应用程序,所以最初它正在选择 web.test.config 文件并且它工作正常。
但是,当我在通过 azure 门户进行交换时将其交换到阶段或 Prod 插槽时,我想交换 web.config 文件的完整转换部分。有什么办法吗?
使用应用程序设置和配置设置的连接字符串,我可以分离每个插槽的设置。但我不确定如何为 system.identityModel、system.web system.identityModel.services 等其他部分执行此操作。因此我想在交换时根据环境替换完整的转换部分。
azure - 在 Azure 应用服务中为我的测试/暂存槽创建测试/暂存数据库
Azure 和应用服务的新手。如果我为测试创建一个部署槽,有没有办法为测试/登台数据库创建一个“槽”?因此,如果我更改测试/暂存槽中的数据,它只会更改测试/暂存数据库中的数据,而不是生产数据库中的数据?
azure - 是否可以使用 AZ powershell 脚本发布云服务包?
我想知道是否可以使用 AZ powershell 将经典云服务包(Microsoft.ClassicCompute)部署到 Azure 部署槽。
在 Azure 中已创建的资源组中有一个经典服务。将要部署的包将上传到单独的存储配置文件 blob。
目前,webroles 是使用REST API部署的。在 post 请求的元素中指定了 blob 中包的适当路径,这可以正常工作。
我正在尝试使用 AZ powershell 做同样的事情,特别是通过调用 New-AzResource cmdlet 并指定如下的“-PropertyObject”参数:
但返回错误:
请求内容无效,无法反序列化:“在“DeploymentSlotProperties”类型的对象上找不到成员“packageUrl”。路径'properties.packageUrl'
如果要从对象中删除“packageUrl”属性并再次执行 cmdlet,则会显示另一个错误:
部署请求缺少包链接。
不幸的是,我找不到任何有关“-PropertyObject”参数格式的信息。或者也许有更好的方法通过 AZ 部署包?
azure - 静态托管 - 单个 blob 存储帐户中的多个网站
我希望能够在单个 $web 容器中托管网站的多个版本,并使用某种路由方法来指定默认文件夹。
我尝试在 $web 容器内创建 2 个文件夹(WEB1 和 WEB2),并将网站的不同版本上传到每个文件夹(生产版本到 WEB1,暂存版本到 WEB2)。然后我显式访问 URL 中的文件夹(如 STATIC-WEB-URL/WEB1)并查看我的网站。
问题是,只要我访问 STATIC-WEB-URL/WEB1,网站就会被下载(这很棒),但 URL 会立即更改为 STATIC-WEB-URL/#
这是一个问题,就像我再次刷新页面一样,它会导致 404。
仅针对某些情况:我正在尝试模仿应用服务中的部署槽选项。能够有一个登台和一个生产槽。
azure - Azure webapi 预热
阅读文档时:https ://docs.microsoft.com/en-us/azure/app-service/deploy-staging-slots#swap-operation-steps ,第 4 步,这是指定的:
如果通过自定义预热启用自动交换,则通过向源插槽的每个实例上的应用程序根 ("/") 发出 HTTP 请求来触发应用程序启动。
如果未指定 applicationInitialization,则触发对每个实例上源槽的应用程序根的 HTTP 请求。
如果实例返回任何 HTTP 响应,则认为它已预热。
这是否意味着 1)必须启用自定义预热才能使交换调用 root(或任何其他 url),或者 2)如果未启用自定义预热,它会调用 root?不管 1) 还是 2):如果没有指定,返回的所有状态码都告诉交换进程该插槽已预热?
更新 我阅读文档的方式(https://docs.microsoft.com/en-us/azure/app-service/deploy-staging-slots#swap-operation-steps):
但似乎我读错了?
azure - 用于 Azure Functions 的 ARM 模板,其中包含适用于不同环境和插槽的许多 appSettings
我有两个使用部署槽、阶段和生产的 Azure Function 应用程序。这两个 Azure Function 应用程序在应用程序设置中有大约 50~ 个键:值对,用于定义各种 API 键、应用程序行为、连接字符串等。
我想将这两个 Azure Function 应用程序部署到五个不同的环境(CI、DEV、QA、STG、PROD)。我相信使用 ARM 模板将这些资源部署到 Azure 是比 Azure CLI 更好的选择。我将在我的 Azure DevOps 发布管道中创建任务来实现这一点。
为了将 ARM 模板分解为易于维护的东西,我想为每个环境创建一个 ARM 模板参数文件。为 Azure 函数定义部署文件时,要定义的属性之一是siteConfig 对象,您可以在其中使用 NameValuePair 对象定义 appSettings 对象。对于每个环境,阶段和生产槽将具有不同的 API 密钥、连接字符串和应用程序行为。我的部署文件使用生产槽和阶段槽创建 Azure Function 应用程序。在部署文件中,我必须提供两次 appSettings NameValuePair 对象。然后,我必须为每个环境创建 5 个不同的参数文件。将其乘以 2,因为我有两个插槽。
参数文件中定义的所有参数是否也必须在参数对象的部署模板文件中定义?
我可以只从参数文件中传入一个带有 NameValuePairs 的对象数组,这样我就不必在顶部的部署文件中以及函数应用程序的 siteConfig.appSettings 下定义整个参数列表吗?
此处的文档显示您只能提供字符串数组或具有许多键:值的单个对象。但是 appSettings 是一个对象数组,其中每个对象都有 3 个键:值对。
这是资源在部署文件中的样子。我想简单地从参数文件中引用整个对象数组,但看起来文档指出我在部署文件的顶部定义了所有 50~ 参数,然后当由 Azure CLI 或执行时,参数文件将覆盖这些参数Azure DevOps 任务。
除了我的抱怨......我不敢相信我将不得不为所有五个环境及其两个具有两个插槽的 Azure 函数创建 20 个参数文件。使用 ARM 模板和参数文件及其独特的应用程序设置,是否有更好的方法来部署到我的所有环境及其部署槽?
更新:
我能够拼凑各种方法来创建特定于环境的 ARM 模板,并得出以下结果,但存在一些不方便的问题。首先,我将解释我现在所处的位置,然后提出与设计相关的问题。
在我的部署模板中,我定义了两个参数。他们来了:
我的 function.parameters.json 具有这样的结构:
对于每个环境,我都放置了我的所有连接字符串、apikey 和应用程序设置。
对于函数应用程序的生产槽,您可以添加一个“资源”属性来应用配置。这是整个函数应用部署:
接下来是定义阶段槽部署资源。这里是:
使用此解决方案,我不必为每个环境都拥有一堆 parameters.json 文件。
问题...
在 parameters.json 中定义所有应用程序设置意味着我不能使用模板函数来获取连接字符串或 Azure Key Vault 值。
这是我开始将一些应用程序设置移动到部署模板以使用模板功能的时候。因此,我没有在 parameters.json 文件中使用 APPINSIGHTS_INSTRUMENTATIONKEY 和其他 AzureWebJobs* 应用程序设置,而是在Microsoft.Web/Sites 资源和Microsoft.Web/Sites/Slots 资源的“properties”对象中提供了siteConfig 对象。
这才是真正的失败 - 部署运行时,它将 siteConfig.appsettings 值与函数应用程序一起应用,然后当它应用 parameters.json 文件时,它删除了应用程序设置并仅应用了 json 中的设置,而不是合并他们在一起。这是一个巨大的失望。在我使用 AzureCLI 进行的初始测试中,我使用此命令az functionapp config appsettings set --name $functionAppName --resource-group $resourceGroupName --settings $settingsFile --slot $slot
来测试不在 json 文件中的应用程序设置会发生什么,并且很高兴它从未删除应用程序设置。powershell 命令获取和设置值,很好地合并它并且永远不会删除。但是 ARM API 会删除所有这些名称值对并仅应用定义的内容。这意味着我不能使用模板函数来创建动态应用程序设置和 json 文件来应用静态应用程序设置。
到目前为止,我觉得进行体面的 ARM 模板部署的唯一方法是部署没有 siteConfig 对象或配置资源的资源来应用应用程序设置,然后使用 Azure CLI 来部署应用程序设置。我想我可以学习如何使用 Azure CLI 或 Azure DevOps 管道任务来检索 Key Vault 机密,但将它们全部放在一个 ARM 模板中会更好。
作为参考,当我尝试使用动态生成的 appSettings 和配置资源来定义更多 appsettings 时,这是我的整个部署模板。
更新 2:
我提出了一个 github 问题,让他们用 ARM 模板替换每个部署上的所有应用程序设置来解决问题。 FWIW -我还对一些 Azure 反馈帖子进行了投票。
azure - 应用服务生产流量进入阶段槽
我有一个 Azure 应用服务,它有一个阶段插槽,仅用于部署。我设置了 100% 的流量到生产槽。但有时我的生产流量会随机重定向到舞台广告位,我的所有用户都宕机了。几分钟后,流量回到生产槽,一切恢复正常。
IMG:阶段槽的请求。我最后一次部署(和阶段使用)是在那之前的 1 天 。
有没有人经历过这样的事情?
json - 获取 ARM 模板中的对象属性名称数组
在 ARM 模板中,有没有办法获取包含 JSON 对象属性名称的数组?我在文档中看不到任何明显的东西。我看到的最接近的是length(object)
获取对象的属性计数,但我认为我什至不能使用复制循环来获取属性名称。
我要实现的特定场景是将appsettings
具有附加插槽粘性设置的 Web 部署到暂存插槽: