亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Azure 函數 - 觸發包含 Azure CLI 命令的 Python 腳本

Azure 函數 - 觸發包含 Azure CLI 命令的 Python 腳本

三國紛爭 2022-04-27 16:04:22
我有一個用于在 Azure 中預配基礎架構的 python 腳本 - IaC。此腳本主要使用 Python SDK,但也運行多個 Azure CLI 命令 - 當我在 Python SDK 中找不到等效命令時,有時需要它。我的目標是使用 Azure Functions 按需觸發此腳本。在本地測試 Azure 函數時,一切正常,因為我的機器上安裝了 Azure CLI,但是,當我將其發布到 Azure 函數時,我會遇到以下錯誤:/bin/sh: 1: az: not found下面是我在 Azure 函數中觸發的示例 python 函數(請注意,腳本的其余部分工作正常,所以我可以創建 RG、SQL 服務器等,問題只是az命令)。我想知道,我是否以及如何在 Azure Function 上安裝 Azure CLI 以便能夠運行 CLI 命令?這是導致錯誤的python函數:    # Loging to AZ    call("az login --service-principal -u '%s' -p '%s' --tenant '%s'" % (client_id, client_secret, tenant_id), shell=True)    b2c_id = check_output("az resource show -g '<rg_name>' -n '<b2c_name>' --resource-type 'Microsoft.AzureActiveDirectory/b2cDirectories' --query id --output tsv", shell=True)    print("The B2C ID is: %s" % b2c_id)```
查看完整描述

2 回答

?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

我嘗試使用 HttpTrigger 創建一個簡單的 Azure 函數,以通過不同方式調用 Azure CLI 工具,但發布后從未在云上工作。

似乎唯一的解決方案是在將所需的包添加到文件中后,將該功能發布為帶有--build-native-deps命令選項的docker 鏡像,如下圖所示,func azure functionapp publish <your function app name>azure-clirequirements.txt

http://img1.sycdn.imooc.com//6268f91d00019cc709660251.jpg

恢復依賴項時出錯。錯誤:無法安裝 antlr4-python3-runtime-4.7.2 依賴項:不支持沒有輪子的二進制依賴項。 使用 --build-native-deps 選項使用 Docker 容器自動構建和配置依賴項。更多信息,請訪問https://aka.ms/func-python-publish


由于我本地沒有 docker 工具,我沒有成功運行func azure functionapp publish <your function app name> --build-native-deps.


同時,運行 Azure CLI 命令并不是使用 Azure CLI 功能的唯一方式。該az命令只是一個可運行的腳本文件,而不是二進制執行文件。在我查看az了一些包的源代碼之后azure-cli,我認為您可以直接通過導入包from azure.cli.core import get_default_cli并使用它來執行與下面代碼相同的操作。


from azure.cli.core import get_default_cli


az_cli = get_default_cli()

exit_code = az_cli.invoke(args)

sys.exit(exit_code)

代碼是參考包的源碼編寫的azure/cli/__main__.py,azure-cli你可以從lib/python3.x/site-packages你的虛擬環境的路徑中看到。


希望能幫助到你。


查看完整回答
反對 回復 2022-04-27
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

謝謝,彼得,我最后使用了類似的東西并讓它工作。我有這個函數,它將運行 AZ CLI 命令并在需要時返回結果(例如,如果我需要運行 cli 命令但還存儲輸出,例如,如果我想知道服務的對象 ID主要是,我可以得到像這個例子中的結果:


def az_cli (args):

    cli = get_default_cli()

    cli.invoke(args)

    if cli.result.result:

        return cli.result.result

    elif cli.result.error:

        raise cli.result.error

    return True

現在,我可以這樣調用(client_id是 ServicePrincipal ID):


ob_id = az_cli(['ad', 'sp', 'show', '--id', client_id])

print(ob_id["objectId"])


查看完整回答
反對 回復 2022-04-27
  • 2 回答
  • 0 關注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號