如何在Azure Function App中调用AZ Cli/Bash实现ADX集群定时关停?
是否可以在Azure Function App内部调用AZ Cli / Bash?
需求背景
- 核心目标:在办公时间结束后自动关停ADX集群,以此节省使用成本
- 首选认证方式:用户分配标识(User Assigned Identity, UAI)
- 预期能力:可调用ADX集群的停止操作接口
认知纠偏
原本认为python.mgmt.kusto的KustoManagementClient缺少UAI对接能力,该说法并不正确。只需搭配azure-identity包,即可通过其提供的ManagedIdentityCredential、DefaultAzureCredential等接口生成符合要求的凭据实例,支持显式传入UAI ID生成凭据,生成的凭据可直接被KustoManagementClient使用。
落地实践方案
如果需要同一套代码同时兼容本地测试和云端部署,按需生成凭据实例是最优方案。通常DefaultAzureCredential接口可以满足需求,若实际运行异常,可按场景显式指定认证来源:
本地测试场景
指定使用本地CLI登录凭据,代码示例:
from azure.identity import DefaultAzureCredential credentials = DefaultAzureCredential( exclude_environment_credential=True, exclude_managed_identity_credential=True, exclude_powershell_credential=True, exclude_visual_studio_code_credential=True, exclude_shared_token_cache_credential=True, exclude_interactive_browser_credential=True, exclude_cli_credential=False )
云端运行场景
直接通过UAI的client_id生成凭据,代码示例:
credentials = ManagedIdentityCredential(client_id="******")
集群操作执行代码
凭据生成完成后即可调用Kusto SDK执行集群启停操作,示例代码:
mclient = KustoManagementClient(credentials, SUBSCRIPTION_ID) cluster_operations = mclient.clusters # 启停操作可按需替换,示例为启动操作,停止可调用begin_stop方法 cluster_operations.begin_start(RG, ADX)
本方案未验证在函数中直接调用AZ CLI的实现方式,该路径已有成熟的可落地实现方案,如有需要也可选择该技术路线。
内容的提问来源于stack exchange,提问作者Andre
相关产品推荐
相关产品推荐

