Azure Storage SDK for Java を使用して、ある Azure サブスクリプションから別の Azure サブスクリプションに Azure VM のページ BLOB (停止および割り当て解除) をコピーしようとしています。
私が使用しているコードは次のとおりです。
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)
SDK ライブラリの v1.3.1、v3.1.0、v4.0.0 を使用してみましたが、blob.startCopyFromBlob() (v1.3.1 & v3.1.0) と blob.startCopy() (v4.0) の両方を使用して同じエラーが発生します。 0.0)。
問題のページ BLOB にはリースがありません。Azure 管理ポータルでは、リースの状態が "Unlocked" であり、存在しているためです。Azure API でさえ、42 行目にコード ブロックを入力してこれを確認します。
BLOB を同じサブスクリプション内の別のストレージ アカウントにコピーしようとしましたが、同じエラーが発生します。
例外を詳しく見ると、エラー コードは「CannotVerifyCopySource」です。