我使用DefaultAzureCredential從azure-identity連接到Azure服務主體環境變量(AZURE_CLIENT_SECRET, AZURE_TENANT_ID AZURE_CLIENT_ID)。
我可以從一個特定的範圍get_token磚是這樣的:
從azure。身份進口DefaultAzureCredential dbx_scope = " 2 ff814a6 - 3304 - 4 - ab8 - 85 - cb - cd0e6f879c1d / .default”牌= DefaultAzureCredential () .get_token .token (dbx_scope)
這是偉大的工作,我得到了令牌,然後我可以使用“databricks-connect”配置連接到集群。我生成一個配置文件($ HOME / .databricks-connect)火花知道連接和使用給定的令牌。
{“主機”:“https://adb - 1234. azuredatabricks.net”,“令牌”:“eyJ0eXAiXXXXXXXXXXXXXXXXXXXXXx”、“cluster_id”:“1234”,“org_id”:“1234”,“港”:" 15001 "}
問題是,這個令牌並沒有持續很長時間。當我使用引發了一個多小時,我斷開連接,因為令牌過期了。
有辦法再令牌與服務主體磚?因為這為生產目標,我希望我的代碼可以生成任何運行的帕特,我不想手動創建一個帕特和存儲Azure密鑰庫。
我由一個可選擇的解決方案。我由我自己的python類來處理我的拍磚:https://stackoverflow.com/questions/75071869/python-defaultazurecredential-get-token-set-expiration-..。
你甚至可以更漂亮或者注冊一個atexit內部類來摧毀帕特。但這將有一個副作用。python過程將退出沒有錯誤代碼,但是如果你有一個記錄器,它會警告你,與磚是封閉的,因為無效的令牌。這是“正常”,但醜陋。
REST API端點來管理令牌:
https://docs.www.eheci.com/dev-tools/api/latest/token-management.html
所以使用你的代碼,你會得到主機和一個簡短的令牌。所以你需要做的就是構建Rest API,這將產生長期聯係。
創建一個令牌代表一個服務主體。> >/ create-obo-token https://docs.www.eheci.com/dev-tools/api/latest/token-management.html操作
這個問題(我認為),它將創建一個新的令牌為每個運行我的代碼在Azure毫升。如果我得到超過600分,我產生600拍和拍磚的限製。接下來的習慣能夠創建新的標記和運行會卡住了。
有辦法消除為例的“老”帕特帕特比24小時?
我在想解決方案,使主機短的令牌。每個X分鍾我要求一個新的令牌,但是我必須重新初始化sparksession和寬鬆的所有的工作。不是一種注射引發的令牌。配置嗎?
是這樣的:
spark_session.conf.set (“spark.some.option。otken”, new_token)