#python #azure-functions #azure-storage #azure-storage-emulator
Вопрос:
Я пытаюсь использовать эмулятор хранилища Azure в следующем сценарии:
- Большой двоичный объект, загруженный в эмулируемый контейнер
- Эмулированное сообщение сетки событий, созданное при загрузке большого двоичного объекта
- Эмулируемое хранилище очередей получает сообщение Сетки событий
- Локально запущенная функция Azure запускается из сообщения хранилища очередей
Вопрос:
1 выше. Работает нормально (эмулятор запущен и работает)
2 выше. Это руководство, я не хочу загружать и использовать сторонний эмулятор сетки событий.
- Вместо этого я создаю сообщение Сетки событий вручную с именем загруженного большого двоичного объекта
{
"id": "<long-guid>",
"data": {
"api": "FlushWithClose",
"clientRequestId": "<long-guid>",
"requestId": "<long-guid>",
"eTag": "0x8D9430B96888008",
"contentType": "application/octet-stream",
"contentLength": 4633473584,
"contentOffset": 0,
"blobType": "BlockBlob",
"blobUrl": "http://127.0.0.1:10000/devstoreaccount1/test/710520200429.csv",
"url": "http://127.0.0.1:10000/devstoreaccount1/test/710520200429.csv",
"sequencer": "0000000000000000000000000000933600000000000023c7",
"identity": "<long-guid>",
"storageDiagnostics": {
"batchId": "<long-guid>"
}
},
"topic": "/subscriptions/<long-guid>/resourceGroups/DEV/providers/Microsoft.Storage/storageAccounts/fa00001dev",
"subject": "/blobServices/default/containers/test/blobs/710520200429.csv",
"event_type": "Microsoft.Storage.BlobCreated"
}
- Затем создайте новое сообщение в хранилище очереди эмулятора и вставьте его (в основном 3. выше).
4 выше. Функция запускается, но не может выполнить следующий фрагмент кода:
credentials = DefaultAzureCredential()
def create_blob_client(credentials):
try:
blob_client = BlobClient.from_blob_url(eg_msg_json['data']['blobUrl'], credentials, max_single_get_size = 256*1024*1024, max_chunk_get_size = 128*1024*1024)
logging.info(f'####### Successfully created BlobClient #######')
except:
logging.error(f'####### Failed to create BlobClient #######')
logging.error(f'####### Blob URL: {eg_msg_json["data"]["blobUrl"]} #######')
return blob_client
- Потому
blobUrl
http://127.0.0.1:10000/devstoreaccount1/test/710520200429.csv
что значение либо неверно, либоBlobClient.from_blob_url
оно не позволяетBlobClient
создавать a из эмулятора.
Ошибка:
[2021-07-31T00:23:01.397Z] ManagedIdentityCredential will use IMDS
[2021-07-31T00:23:01.405Z] Executed 'Functions.fa00003' (Failed, Id=55f8ce9e-08b5-41e2-bd61-d753da0d72e1, Duration=47ms)
[2021-07-31T00:23:01.410Z] System.Private.CoreLib: Exception while executing function: Functions.fa00003. System.Private.CoreLib: Result: Failure
Exception: ValueError: Invalid tenant id provided. You can locate your tenant id by following the instructions here: https://docs.microsoft.com/partner-center/find-ids-and-domain-names
Stack: File "C:UserstestAppDataRoamingnpmnode_modulesazure-functions-core-toolsbinworkerspython3.8WINDOWSX64azure_functions_workerdispatcher.py", line 398, in _handle__invocation_request
call_result = await self._loop.run_in_executor(
File "C:UserstestAppDataLocalProgramsPythonPython38libconcurrentfuturesthread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "C:UserstestAppDataRoamingnpmnode_modulesazure-functions-core-toolsbinworkerspython3.8WINDOWSX64azure_functions_workerdispatcher.py", line 602, in _run_sync_func
return ExtensionManager.get_sync_invocation_wrapper(context,
File "C:UserstestAppDataRoamingnpmnode_modulesazure-functions-core-toolsbinworkerspython3.8WINDOWSX64azure_functions_workerextension.py", line 215, in _raw_invocation_wrapper result = function(**args)
File "C:UserstestDesktopgitAzureFunctionsfa00003fa00003__init__.py", line 132, in main
credentials = DefaultAzureCredential()
File "C:UserstestDesktopgitAzureFunctionsfa00003.venvlibsite-packagesazureidentity_credentialsdefault.py", line 123, in __init__
credentials.append(VisualStudioCodeCredential(tenant_id=vscode_tenant_id))
File "C:UserstestDesktopgitAzureFunctionsfa00003.venvlibsite-packagesazureidentity_credentialsvscode.py", line 43, in __init__
validate_tenant_id(self._tenant_id)
File "C:UserstestDesktopgitAzureFunctionsfa00003.venvlibsite-packagesazureidentity_internal__init__.py", line 40, in validate_tenant_id
raise ValueError(
.
Кто-нибудь может сказать мне, что здесь правильно?
Комментарии:
1. Пожалуйста, отредактируйте свой вопрос и включите 2 вещи: 1) Как вы создаете
credentials
? и 2) Подробная информация об исключении, которое вы получаете.2. Обновлено
credentials
и получено исключение.3. Сообщение об ошибке содержит жалобу на неверный идентификатор арендатора. Вы можете это проверить? Кроме того, если вы используете
Azurite
, пожалуйста, убедитесь, что вы инициализируете с помощьюazurite --oauth basic --cert certname.pem --key certname-key.pem
команды.4. Да, я
tenant id
нигде не использую Функциональный код. Я предполагаю, что это частьDefaultCredentials()
внутренних органов. Я не используюAzurite
, а скорееAzure Storage Emulator v5.10.0.0
использую .