#java #azure #azure-blob-storage
Вопрос:
Я пытаюсь подключиться к службе хранилища Blob-объектов Azure из функции Azure, но все, что она возвращает, является BlobStorageException
Я использовал этот пример: клиентская библиотека Blob-объектов хранилища Azure для Java (Создайте BLOB-сервис-клиент)
Вот мой код:
String MY_BLOB_ENDPOINT = "https://mystorageaccount.z13.web.core.windows.net/"
String MY_BLOB_SAS_TOKEN = "?sv=2017-07-29amp;ss=bamp;srt=samp;sp=rwdcamp;se=2022-06-10T00:00:00Zamp;st=2021-06-10T00:00:00Zamp;spr=httpsamp;sig=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
String MY_DEFAULT_CONTAINER_NAME = "test"
BlobServiceClient serviceClient = new BlobServiceClientBuilder()
.endpoint(MY_BLOB_ENDPOINT)
.sasToken(MY_BLOB_SAS_TOKEN)
.buildClient();
this.containerClient = serviceClient.
getBlobContainerClient(MY_DEFAULT_CONTAINER_NAME);
if (!this.containerClient.exists()) {
this.containerClient.create();
}
Вот журналы:
... (omitted logs)
[2021-06-26T03:36:28.671Z] Executed 'Functions.upload' (Failed, Id=ffdff367-242e-494a-8303-e9ceeee6a2d7, Duration=5919ms)
[2021-06-26T03:36:28.671Z] System.Private.CoreLib: Exception while executing function: Functions.upload. System.Private.CoreLib: Result: Failure
[2021-06-26T03:36:28.671Z] Exception: BlobStorageException: Status code 405,
"<!DOCTYPE html>
<html>
<head>
<title>UnsupportedHttpVerb</title>
</head>
<body>
<h1>The resource doesn't support specified Http Verb.</h1>
<p>
<ul>
<li>HttpStatusCode: 405</li>
<li>ErrorCode: UnsupportedHttpVerb</li>
<li>RequestId : 05ac7acf-701e-0026-213c-6adf7e000000</li><li>TimeStamp : 2021-06-26T03:36:28.4852611Z</li>
</ul>
</p>
</body>
</html>"
[2021-06-26T03:36:28.671Z] Stack: java.lang.IllegalStateException: Failed to initialize
[2021-06-26T03:36:28.671Z] at org.springframework.cloud.function.adapter.azure.FunctionInvoker.<init>(FunctionInvoker.java:90)
[2021-06-26T03:36:28.671Z] at org.springframework.cloud.function.adapter.azure.FunctionInvoker.<init>(FunctionInvoker.java:95)
... (omitted logs)
Зависимость От Хранилища Больших Двоичных Объектов
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-blob</artifactId>
<version>12.11.1</version>
</dependency>
Я не знаю, почему это не работает. Есть ли какие-то дополнительные настройки, которые мне нужно настроить?.
Комментарии:
1. Это очень странно! Вы можете отредактировать свой вопрос и включить значения для
MY_BLOB_ENDPOINT
,MY_BLOB_SAS_TOKEN
иMY_DEFAULT_CONTAINER_NAME
. Пожалуйста, запутай имя учетной записи,sig
часть своего маркера SAS, прежде чем делиться.2. @Gauravman, я их изменил.
3. Спасибо. Я дал ответ. ХТХ.
Ответ №1:
Причина, по которой вы получаете эту ошибку, заключается в том, что вы используете неправильную конечную точку. Пожалуйста, попробуйте изменить:
String MY_BLOB_ENDPOINT = "https://mystorageaccount.z13.web.core.windows.net/"
Для
String MY_BLOB_ENDPOINT = "https://mystorageaccount.blob.core.windows.net/"
и вы не должны получить ошибку.
По сути https://mystorageaccount.z13.web.core.windows.net/
, это специальная конечная точка для доступа static website hosted in Azure Blob Storage
. Эта конечная точка сопоставляется с $web
контейнером больших двоичных объектов.
Для выполнения любых операций с контейнерами и большими двоичными объектами вам нужно будет использовать конечную точку большого двоичного объекта, которая должна быть похожа https://mystorageaccount.blob.core.windows.net/
.
Комментарии:
1. Так верно. Теперь он отлично работает локально, но когда я развертываю его в Azure, в Application Insights я получаю это сообщение об ошибке , связано ли это с часовым поясом функции?
2. Можете ли вы отредактировать свой вопрос и включить код для создания SAS? Кроме того, какой часовой пояс для вашей функции Azure?
3. Он находится в нулевом часовом поясе UTC, и я сгенерировал токен SAS, используя
Terraform
сstart: 2021-06-10T00:00:00Z
иexpiry: 2022-06-10T00:00:00Z
даты4. Можете ли вы поделиться точным сообщением об ошибке? Я бы рекомендовал задать для этого отдельный вопрос. Спасибо.
Ответ №2:
Убедитесь, что предоставленный вами ключ SAS действителен или разрешает доступ к большим двоичным объектам в учетной записи хранения
Комментарии:
1. Я использовал
Terraform
для развертывания своей учетной записи хранения и создания токена SAS (по этой ссылке ) Я изменил толькоstart
/expiration
даты и настройки разрешенийcreate
read
,write
иdelete
разрешены ли уникальные разрешения.