Я пытаюсь использовать пакет SDK службы хранилища Azure для Java, чтобы скопировать большой двоичный объект страницы виртуальной машины Azure (то есть остановлен и освобожден) из одной подписки Azure в другую.
Вот код, который я использую:
public class BlobCopyExampleClean {
public static final String sourceStorageConnectionString =
"DefaultEndpointsProtocol=https;"
+ "AccountName=sourceStorageAccount;"
+ "AccountKey=key123";
public static final String destinationStorageConnectionString =
"DefaultEndpointsProtocol=https;"
+ "AccountName=destinationStorageAccount;"
+ "AccountKey=key321";
public static void main(String[] args) {
try {
CloudStorageAccount srcAccount = CloudStorageAccount.parse(sourceStorageConnectionString);
CloudBlobClient srcSrvClient = srcAccount.createCloudBlobClient();
CloudBlobContainer srcContainer = srcSrvClient.getContainerReference("vhds");
CloudStorageAccount destAccount = CloudStorageAccount.parse(destinationStorageConnectionString);
CloudBlobClient destSrvClient = destAccount.createCloudBlobClient();
CloudBlobContainer destContainer = destSrvClient.getContainerReference("vhds");
boolean result = destContainer.createIfNotExists();
CloudBlob srcBlob = srcContainer.getPageBlobReference("testvm-2015-11-06.vhd");
if (srcBlob.exists()) {
CloudBlob destBlob = destContainer.getPageBlobReference("testvm-2015-11-06-copied.vhd");
System.out.println("Starting blob copy...");
String copyJobId = destBlob.startCopyFromBlob(srcBlob);
CopyState copyState = destBlob.getCopyState();
while (copyState.getStatus().equals(CopyStatus.PENDING)) {
System.out.println("... copying ...");
Thread.sleep(30000);
}
System.out.println("Copy complete, status was: " + copyState.getStatus() + "!");
} else {
System.out.println("Source blob does not exist!");
}
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (StorageException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Независимо от того, что я пытаюсь, я всегда получаю следующую ошибку:
Starting blob copy...
com.microsoft.azure.storage.StorageException: The specified resource does not exist.
at com.microsoft.azure.storage.StorageException.translateException(StorageException.java:89)
at com.microsoft.azure.storage.core.StorageRequest.materializeException(StorageRequest.java:305)
at com.microsoft.azure.storage.core.ExecutionEngine.executeWithRetry(ExecutionEngine.java:175)
at com.microsoft.azure.storage.blob.CloudBlob.startCopy(CloudBlob.java:883)
at com.microsoft.azure.storage.blob.CloudBlob.startCopyFromBlob(CloudBlob.java:788)
at com.company.azure.storage.BlobCopyExampleClean.main(BlobCopyExampleClean.java:44)
Я пробовал использовать v1.3.1, v3.1.0 и v4.0.0 библиотеки SDK и получил ту же ошибку, используя как blob.startCopyFromBlob () (v1.3.1 & v3.1.0), так и blob.startCopy () (v4. 0,0).
У рассматриваемого страничного большого двоичного объекта нет аренды, поскольку портал управления Azure сообщает, что статус аренды - «Разблокирован», и он существует, даже API Azure подтверждает это, вводя блок кода в строке 42.
Я попытался скопировать большой двоичный объект в другую учетную запись хранения в рамках той же подписки, и это тоже дает ту же ошибку.
При более подробном рассмотрении исключения код ошибки: CannotVerifyCopySource.
Could not verify the copy source within the specified time. Examine the HTTP status code and message for more information about the failure.
. Не могли бы вы проверить сообщение? Это должно дать вам больше информации. - person Gaurav Mantri   schedule 09.11.2015