首页 > 解决方案 > 如何在 Azure Function App 中使用 AZ Cli 或 Bash?

问题描述

是否可以在 Azure Function App 中调用 AZ Cli / Bash?

我的目标是在办公时间之后自动关闭 ADX 集群,因为这样可以节省成本。

在身份验证方法使用用户分配的身份(UAI)的情况下调用类似的方法会很好:

https://docs.microsoft.com/en-us/cli/azure/kusto/cluster?view=azure-cli-latest#az_kusto_cluster_stop

我会使用 python.mgmt.kusto API,但它缺少与 UAI 的连接:

https://docs.microsoft.com/de-de/python/api/azure-mgmt-kusto/azure.mgmt.kusto.kustomanagementclient?view=azure-python

编辑: KustoManagementClient 中没有接口是不正确的。您需要使用具有接口(ManagedIdentityCredential、DefaultAzureCredential)的包 python-identity 从默认标识方法或通过传递 UAI id 显式生成凭据实例。KustoManagementClients 可以使用这些凭据。

Edit2:我想与您分享我的经验和我的最终解决方案。

如果您想在本地测试或云中使用相同的代码,例如在开发功能应用程序期间,生成凭证实例是最好的方法。通常 API 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
                        )

在我不得不去的云网站上

credentials = ManagedIdentityCredential(client_id="******")

最后我的集群终于关闭了:

mclient = KustoManagementClient(credentials, SUBSCRIPTION_ID)
cluster_operations = mclient.clusters
cluster_operations.begin_start(RG, ADX)

我必须承认我最后没有检查 python CLI 界面,但是这个线程中接受的答案显示了你如何做到这一点。

谢谢!

标签: azure-functionsazure-cliazure-data-explorerazure-python-sdk

解决方案


是的,您可以在函数应用中运行 Azure CLI。Azure CLI 是一个可执行的 Python 包,您可以从其PyPI 页面找到它。

如果按照官方教程快速入门:在 Azure 中创建 HTTP 触发 Python 函数创建 Azure Function App for Python,可以尝试通过 将 Azure CLI 安装为 Python 包pip install azure-cli,然后参考其他 SO 线程Azure Function - trigger包含 Azure CLI 命令的 Python 脚本,可使用参数调用它以根据需要创建资源。

或者,要安装 Azure CLI,您可以将整个 Azure CLI 目录从本地计算机复制到 kudu 控制台,如下所示SO 参考线程


推荐阅读