Power BI Embedded自动缩放容量,为公司每个月节省上万元


哎,不知道今年行情怎么就这样了,大厂一边大批毕业生,一边大量招人。难道是今年的新人便宜?就连道哥(吴翰清,阿里P10,中国顶级黑客)都从阿里离职了,当年年少不懂学计算机,就是想当一名白帽子的。。。
在上一篇文章[[Power BI许可证差异(免费、Pro、PPU、Embedded、Premium)]]中有介绍Power BI各个版本的功能差异,其中有介绍当人数超过80人时,从成本上讲是推荐Power BI Embedded的,Power BI Embedded不同的SKU价格也是不同的,具体使用哪个SKU价位层不止和使用人数有关,和报告的模型复杂度也是有关的,具体哪个容量符合使用,可以进行压力测试,可参考以下博客:Power BI Embedded: Stress Testing & Capacity Planning – Data on Wheels – Steve & Kristyna Hughes — Power BI Embedded: Stress Testing & Capacity Planning – Data on Wheels – Steve & Kristyna Hughes (wordpress.com)
image.png

比如高峰期有1000人同时访问,这时可能至少要A3容量才符合,但是下班时间,或者周末,可能最多才会有几十个人同时访问,这时可能A1容量就可以满足要求。微软Azure云服务最大的好处就是弹性的,可缩放,当需求量大量采用A3,需求量低时采用A1甚至暂时关闭都是可以的。我们可以手动在网页端进行容量的更改,但这并不够智能,人也不可能总是记得去更改容量。
image.png
Power BI Premium是支持自动缩放容量的,但是也是单独收费的Using Autoscale with Power BI Premium – Power BI | Microsoft Learn — 将自动缩放与 Power BI 高级版结合使用 – Power BI |微软学习
image.png
那么Power BI Embedded要怎么自动缩放容量呢?继续查找微软的文档,缩放 Power BI Embedded 容量 – Power BI | Microsoft Learn文档显示是有REST API可供调用的
image.png
继续查看文档Capacities – Update – REST API (Azure Power BI Embedded) | Microsoft Learn — 容量 – 更新 – REST API(Azure Power BI Embedded) |微软学习那么剩下的问题就是调用API时相应的世纪互联相应的URL的是什么了,具体的对应可查看以下文档
中国区 Azure 开发人员指南 | Azure Docs
这里主要用的就是management.chinacloudapi.cn这个url来更改Power BI Embedded的容量。
image.png
这里其实还走了弯路,因为一开始缩放容量时总是不成功,在Azure门户中查看活动日志,日志中显示的是https://management.core.chinacloudapi.cn这个地址,我就一直使用这个地址来请求缩放容量,其结果就是一直失败。。。
image.png

新建应用

登录Azure门户,进入到Azure Active Directory,然后选择应用注册
image.png
进行创建的应用,选择证书和密码,新建客户端密码,这里一定要注意及时保存,密码只在第一次创建时显示
image.png

创建安全组

同样进行Azure Active Directory,选择组,进去之后新建安全组
image.png
新建组之后,进去组,然后添加成员,成员即为上面创建的应用
image.png

Power BI Embedded资源添加管理权限

进行到Power BI Embedded资源界面,选择Power BI容量管理员,然后添加安全组为管理员
image.png
切换到访问控制,点击添加角色分配
image.png
我这里使用的是所有者角色,可根据具体需要选择合适的角色 ,之后在成员中添加上面创建的安全组,完成创建即可
image.png

Power BI中添加安全组

在Power BI门户中进入到管理门户,然后在允许服务主体使用Power BI API中加入上面创建的安全组
image.png

使用python来缩放容量

首先是获取token,获取token需要一些参数,比如租户id(租户id在Azure Active Directory的概述中可以查看,也可参考[[PowerBI REST API 进阶]]),应用id和应用密码用上面创建应用时的即可。这里还参考了 Assign Power BI workspaces to a capacity automatically – PBI Guy — 自动将 Power BI 工作区分配给容量 – PBI Guy (pbi-guy.com) 该博客的博主是微软的员工,去年有问题时也有邮件向他提问,他也是有邮件回复的,这里推荐下他的博客,很多干货的。
image.png

import requests

token_endpoint = 'https://login.chinacloudapi.cn//{tenant_id}/oauth2/token'
tenant_id = ''
client_id = ''
client_secret = ''
data = {
    'grant_type': 'client_credentials',
    'client_id': client_id,
    'client_secret': client_secret,
    'resource': 'https://management.chinacloudapi.cn/'
}

response = requests.post(token_endpoint.format(tenant_id=tenant_id), data=data)
access_token = response.json()
token = access_token['access_token']

获取token后就可以缩入容量了,相关参数可在Power BI Embedded订阅概述中查看,这里要注意代码中body参数添加了位置,位置也要改成自己的服务所在的位置
image.png

subscription_id = ""   #订阅id
resource_group = ""    #资源名称
capacity_name = ""     #资源组
new_size = "A3"
url = f"https://management.chinacloudapi.cn/subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.PowerBIDedicated/capacities/{capacity_name}?api-version=2021-01-01"
headers = {
        'Content-Type': 'application/json',
        "Authorization": "Bearer " + token
    }
body = {
    "sku": {
        "name": new_size,
        "tier": "PBIE_Azure"
    },
    "location": "chinaeast"
}

response = requests.put(url, json=body,headers=headers)
if response.status_code == 200:
    print("Capacity size updated successfully")
else:
    print(f"Error: {response.text}")
image.png

数据工厂中设置定时任务

在[[数据工厂中刷新PowerBI数据集]]中就介绍当处理完ETL任务后,就刷新Power BI数据集,其中就有介绍怎么获取token,然后再调用REST API刷新Power BI数据集,那么同样的,我们也可以在数据工厂中使用同样的方法来缩放Power BI Embedded容量,并且可以设置解发器,不同时间段调整为不同的容量。
image.png

类似文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注