如何使用Azure C# SDK启停Azure SWA或设置离线重定向
使用Azure C# SDK管理静态Web应用(SWA)的临时停止、重定向及恢复方案
一、临时停止静态Web应用
Azure静态Web应用没有直接的"停止"API,但可以通过禁用托管状态或修改配置阻断请求实现类似效果。基于你已有的GenericResource实例,可通过更新资源属性操作:
方法:设置托管状态为禁用
部分Azure区域支持通过更新properties.state属性禁用SWA,代码示例:
using Azure.ResourceManager; using Azure.ResourceManager.Resources; // 假设已获取到GenericResource实例swaResource var updateParams = new GenericResourcePatch(); updateParams.Properties = new Dictionary<string, object> { ["state"] = "Disabled" }; // 执行更新 await swaResource.UpdateAsync(WaitUntil.Completed, updateParams);
注意:若所在区域不支持该属性,可改用下方的重定向方案替代停止效果。
二、将所有请求重定向至offline.html
通过修改SWA的路由规则配置,添加一条最高优先级的重定向规则,实现全局跳转:
// 获取当前SWA的配置信息 var currentProps = swaResource.Data.Properties as Dictionary<string, object>; var config = currentProps["configuration"] as Dictionary<string, object>; var routes = config["routes"] as List<object> ?? new List<object>(); // 插入优先级最高的重定向路由 routes.Insert(0, new Dictionary<string, object> { ["route"] = "/*", ["redirect"] = "/offline.html", ["statusCode"] = 302, // 临时重定向,恢复时移除即可 ["priority"] = 1 // 确保优先级高于其他路由 }); // 准备更新参数 var updateParams = new GenericResourcePatch(); updateParams.Properties = new Dictionary<string, object> { ["configuration"] = new Dictionary<string, object> { ["routes"] = routes } }; // 提交配置更新 await swaResource.UpdateAsync(WaitUntil.Completed, updateParams);
恢复时,只需删除这条新增的路由,重新执行配置更新即可。
三、删除后快速恢复SWA
若需要删除SWA后快速恢复,建议先导出ARM模板,删除后通过模板重新部署:
1. 导出SWA的ARM模板
// 导出资源模板 var exportResult = await swaResource.GetClient<ResourcesManagementClient>() .Resources.ExportTemplateAsync(swaResource.Data.ResourceGroupName, swaResource.Data.ResourceType, swaResource.Data.Name); // 将模板保存到本地或云存储(示例:保存到本地文件) string templateJson = exportResult.Template.ToString(); File.WriteAllText("swa-backup-template.json", templateJson);
2. 删除SWA资源
// 执行删除操作 await swaResource.DeleteAsync(WaitUntil.Completed);
3. 通过模板快速恢复
using Azure.ResourceManager.Resources.Models; // 加载备份的模板 string templateJson = File.ReadAllText("swa-backup-template.json"); var deploymentContent = new DeploymentContent { Template = BinaryData.FromString(templateJson), Parameters = new Dictionary<string, DeploymentParameter>() { // 若模板包含参数,需设置对应值(例如资源名称) ["name"] = new DeploymentParameter { Value = swaResource.Data.Name } } }; // 在原资源组部署模板恢复SWA var resourceGroup = await swaResource.GetResourceGroupAsync(); await resourceGroup.GetDeployments().CreateOrUpdateAsync( WaitUntil.Completed, "RestoreSwaDeployment", deploymentContent);
注意:导出模板时需确保包含所有关联资源(如存储账户、CDN)的配置,否则恢复后可能无法正常运行。
内容的提问来源于stack exchange,提问作者Cara Wilderman
相关产品推荐
相关产品推荐

