如何在 Azure Function App 中使用 AZ Cli 或 Bash?

How to use AZ Cli or Bash inside Azure Function App?

是否可以在 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 可以使用凭据。

编辑2: 我想和你分享我的经验和我最终的解决方案。

如果您想将相同的代码用于本地测试或在云中,例如,生成凭证实例是最好的方法。在功能应用程序的开发过程中。通常 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 CLI 在函数应用程序中。 Azure CLI 是一个可执行 Python 包,您可以从 PyPI page.

中找到它

如果您按照官方教程Quickstart: Create an HTTP triggered Python function in Azure to create an Azure Function App for Python, you can try to install Azure CLI as a Python package via pip install azure-cli, and then refer to the other SO thread 使用您的参数调用它来创建您想要的资源。

或者,要安装 Azure CLI,您可以按照下面的建议将整个 Azure CLI 目录从本地机器复制到 kudu 控制台