Я автоматизирую развертывание инфраструктуры, содержащей Azure экземпляр Databricks. Чтобы иметь возможность использовать Azure хранилище BLOB-объектов из Databricks, я хочу создать секретную область с помощью REST API 2.0 Databricks в моем конвейере DevOps, выполняющем задание Python.
Когда я пытаюсь создать секретной области, я получаю ответ
{"message": "Аутентификация временно недоступна. Повторите попытку позже.", "error_code": "TEMPORARILY_UNAVAILABLE"}
Мне уже удалось создать токен доступа к блокам данных с помощью API, т.е. конечная точка / токен / создание работала отлично.
Я аутентифицируюсь в блоках данных, используя код из ответа на этот вопрос: { ссылка } Вот как я могу создать токен и как я пытаюсь сгенерировать область действия:
import requests
import adal
import json
# set variables
clientId = "<Service Principal Id>"
tenantId = "<Tenant Id>"
clientSecret = "<Service Principal Secret>"
subscription_id = "<Subscription Id>"
resource_group = "<Resource Group Name>"
databricks_workspace = "<Databricks Workspace Name>"
dbricks_url = "<Databricks Azure URL>"
# Acquire a token to authenticate against Azure management API
authority_url = 'https://login.microsoftonline.com/'+tenantId
context = adal.AuthenticationContext(authority_url)
token = context.acquire_token_with_client_credentials(
resource='https://management.core.windows.net/',
client_id=clientId,
client_secret=clientSecret
)
azToken = token.get('accessToken')
# Acquire a token to authenticate against the Azure Databricks Resource
token = context.acquire_token_with_client_credentials(
resource="2ff814a6-3304-4ab8-85cb-cd0e6f879c1d",
client_id=clientId,
client_secret=clientSecret
)
adbToken = token.get('accessToken')
# Format Request API Url
dbricks_api = "https://{}/api/2.0".format(dbricks_url)
# Request Authentication
dbricks_auth = {
"Authorization": "Bearer {}".format(adbToken),
"X-Databricks-Azure-SP-Management-Token": azToken,
"X-Databricks-Azure-Workspace-Resource-Id": ("/subscriptions/{}/resourceGroups/{}/providers/Microsoft.Databricks/workspaces/{}".format(subscription_id, resource_group, databricks_workspace) )
}
# Creating a databricks token
payload = {
"comment": "This token is created by API call"
}
requests.post(f"{dbricks_api}/token/create", headers=dbricks_auth, json=payload)
# works
# Creating a databricks secret scope
payload = {
"scope": "my-databricks-secret-scope",
"initial_manage_principal": "users"
}
requests.post(f"{dbricks_api}/secrets/scopes/create", headers=dbricks_auth, json=payload)
# returns {"message":"Authentication is temporarily unavailable. Please try again later.", "error_code": "TEMPORARILY_UNAVAILABLE"}
Databricks работает в westeurope. Python 3,8,5 x64 Пакеты, используемые во фрагменте кода
- adal-1.2.4
- requests-2.24.0
Есть ли проблема с API модулей данных или Я что-то делаю не так?