가능한 경우 Java SDK를 사용하거나 그렇지 않은 경우 Azure REST API를 사용하여 Azure에 각 blob의 모든 스냅 샷을 나열해야합니다. 두 가지 옵션 모두에 대해 모든 스토리지 계정을 나열하는 방법을 알고 있지만 단일 저장소 계정과 연결된 스냅 샷 목록을 검색하는 방법을 찾지 못했습니다.Azure Java SDK 또는 REST API를 사용하여 스토리지 계정의 모든 스냅 샷 나열
1
A
답변
1
있어서 isSnapshot()
의해 필터링 snapshot blob
포함 된 모든 얼룩을 나열하는 컨테이너 BlobListingDetails.SNAPSHOTS
listBlobs(String prefix, boolean useFlatBlobListing, EnumSet<BlobListingDetails> listingDetails, BlobRequestOptions options, OperationContext opContext)
와 방법을 사용하여, Java 용 애저 스토리지 SDK의 주문에 따라 javadocs.
아래 예제 코드는 다음과 같습니다.
String accountName = "<your-storage-account-name>";
String accountKey = "<your-storage-account-key>";
String storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=%s;AccountKey=%s";
String connectionString = String.format(storageConnectionString, accountName, accountKey);
CloudStorageAccount account = CloudStorageAccount.parse(connectionString);
CloudBlobClient client = account.createCloudBlobClient();
// List all containers of a storage account
Iterable<CloudBlobContainer> containers = client.listContainers();
String prefix = null;
boolean useFlatBlobListing = true;
// Specify the blob list which include snapshot blob
EnumSet<BlobListingDetails> listingDetails = EnumSet.of(BlobListingDetails.SNAPSHOTS);
BlobRequestOptions options = null;
OperationContext opContext = null;
for (CloudBlobContainer container : containers) {
Iterable<ListBlobItem> blobItems = container.listBlobs(prefix, useFlatBlobListing, listingDetails, options,
opContext);
for (ListBlobItem blobItem : blobItems) {
if (blobItem instanceof CloudBlob) {
CloudBlob blob = (CloudBlob) blobItem;
// Check a blob whether be a snapshot blob
if (blob.isSnapshot()) {
System.out.println(blobItem.getStorageUri());
}
}
}
}
이 요구 사항을 구현하기 위해 REST API를 사용하려면 다음과 같이하십시오.
- 모든 컨테이너를 나열하려면 스토리지 계정에
List Containers
을 사용하십시오. - url 매개 변수
include={snapshots}
과Blob and Snapshot List
이 reference 인List Blobs
을 사용하면 스냅 샷 blob을 포함하는 컨테이너의 모든 blob을 나열한 다음 모든 스냅 샷 blob을 필터링합니다.