Đỉnh NGUYỄN

life's a journey not a destination


Leave a comment

Bắt đầu với Amazon Glacier


Amazon Glacier là gì?

Amazon Glacier là dịch vụ lưu trữ được tối ưu hóa cho dữ liệu được lưu trữ không thường xuyên hay “cold data”.

Amazon Glacier là dịch vụ lưu trữ với chi phí rất thấp cho phép lưu trữ lâu dài với các tính năng bảo mật dành cho lưu trữ và sao lưu dữ liệu. Với Amazon Glacier, khách hàng lưu dữ liệu với chi phí hiệu quả cho từng tháng, năm và thậm chí cả thế kỷ. Chi tiết về tính năng và giá của dịch vụ, xem Amazon Glacier detail page.

Amazon Glacier là sự lựa chọn lưu trữ tuyệt vời khi chi phí lưu trữ thấp là tối quan trọng, dữ liệu được truy xuất không thường xuyên và độ trễ truy xuất vài giờ là có thể chấp nhận. Nếu ứng dụng của bạn yêu cầu truy xuất nhanh đến dữ liệu, độ trễ thấp, xem xét dùng Amazon S3.

Mô hình dữ liệu của Amazon Glacier

Các khái niệm cốt lõi trong mô hình dữ liệu của Amazon Glacier gồm vault và archive. Amazon Glacier là dịch vụ web dựa trên REST. Trong thuật ngữ của REST, vault và archive là các tài nguyên (resource). Ngoài ra, mô hình dữ liệu của Amazon Glacier gồm các tài nguyên job và notification-configuration.

Vault

Vault là thùng chứa để lưu trữ các archive. Khi tạo 1 vault, chỉ định tên và chọn region để lưu trữ.

Mỗi vault có 1 địa chỉ duy nhất.

https://<region-specific endpoint>/<account-id>/vaults/<vaultname>

Ví dụ, tạo vault (examplevault) trong region US East (N. Virginia). Vault này có URI như sau:

https://glacier.us-east-1.amazonaws.com/111122223333/vaults/examplevault

Trong URI này,

·         glacier.us-east-1.amazonaws.com định danh US East (N. Virginia)

·         111122223333 là account ID sở hữu vault

·         vaults ám chỉ tập các vault được sở hữu bởi AWS account

·         examplevault định danh 1 vault cụ thể trong tập các vault

Một AWS account trong bất kỳ region nào hỗ trợ. Danh sách các AWS region hỗ trợ, xem Accessing Amazon Glacier. Trong 1 region, 1 tài khoản phải dùng 1 tên vault duy nhất. AWS account có thể tạo các vault cùng tên trong các region khác nhau.

Bạn có thể lưu trữ không giới hạn số archive trong 1 vault. Phụ thuộc vào nhu cầu kinh doanh hay ứng dụng, bạn có thể lưu các archive trong 1 hoặc nhiều vault.

Amazon Glacier hỗ trợ nhiều hành động trên vault. Chú ý các hành động vault cho từng region cụ thể. Ví dụ, khi tạo 1 vault, bạn tạo nó trong 1 region cụ thể. Khi bạn yêu cầu danh sách vault, bạn phải yêu cầu nó trong 1 region cụ thể, và kết quả chỉ gồm các vault được tạo trong 1 region cụ thể.

Archive

Một archive có thể là bất kỳ dữ liệu nào như photo, video, hoặc documet và là đơn vị cơ bản của lưu trữ trong Amazon Glacier. Mỗi archive có 1 ID duy nhất và thông tin mô tả (tùy chọn). Archive ID là duy nhất trong vault. Chú ý rằng bạn chỉ có thể chỉ định phần mô tả archive khi upload 1 archive. Amazon Glacier sẽ gán cho archive 1 ID, duy nhất trong AWS region mà nó được lưu trữ.

Mỗi archive có 1 địa chỉ duy nhất.

https://<region-specific endpoint>/<account-id>/vaults/<vault-name>/archives/<archive-id>

Sau đây là 1 URI ví dụ của 1 archive được lưu trữ trong examplevault trong US East (N. Virginia)

https://glacier.us-east-1.amazonaws.com/111122223333/vaults/examplevault/archives/NkbByEejwEggmBz2fTHgJrg0XBoDfjP4q6iu87-TjhqG6eGoOY9Z8i1_AUyUsuhPAdTqLHy8pTl5nfCFJmDl2yEZONi5L26Omw12vcs01MNGntHEQL8MBfGlqrEXAMPLEArchiveId

Bạn có thể lưu trữ không giới hạn số archive trong 1 vault.

Ngoài ra, mô hình dữ liệu của Amazon Glacier gồm các tài nguyên job và notification-configuration.

Job

Truy xuất 1 archive và vault inventory (danh sách các archive) là hành động bất đồng bộ trong Amazon Glacier nghĩa là trước tiên bạn khởi tạo 1 job, và sau đó tải về job output sau khi Amazon Glacier hoàn thành job. Với Amazon Glacier, yêu cầu truy xuất dữ liệu của bạn sẽ đưa vào queue và hầu hết các job cần khoảng 1 giờ để hoàn thành.

Ghi chú

Amazon Glacier cung cấp giải pháp lưu trữ dữ liệu lạnh (cold data). Nếu ứng dụng cần giải pháp lưu trữ dữ liệu cần truy xuất real-time, bạn xem xét dùng Amazon S3.

Để khởi tạo vault inventory job, cung cấp vault name. Job truy xuất đến archive yêu cầu cả vault name và archive ID mà bạn muốn tải về. Bạn có thể cung cấp job description khi khởi tạo job nhằm để định danh job.

Cả hai job truy xuất đến archive và vault inventory đều có liên quan đến vault. Vault có thể có nhiều job đồng thời tại 1 thời điểm. Khi bạn gởi 1 job request (khởi tạo 1 job), Amazon Glacier trả về job ID để lưu vết job. Mỗi job được định danh duy nhất bởi 1 URI:

https://<region-specific endpoint>/<account-id>/vaults/<vault-name>/jobs/<job-id>

Sau đây là ví dụ 1 job liên quan đến examplevault vault.

https://glacier.us-east-1.amazonaws.com/111122223333/vaults/examplevault/jobs/HkF9p6o7yjhFx-K3CGl6fuSm6VzW9T7esGQfco8nUXVYwS0jlb5gq1JZ55yHgt5vP54ZShjoQzQVVh7vEXAMPLEjobID

Với mỗi job, Amazon Glacier duy trì thông tin như job type, description, creation date, completion date, và job status. Danh sách các job mà Amazon Glacier trả về sẽ gồm tất cả các job đang chạy và đã hoàn thành gần đây, do vậy cần các thông tin vừa để để định danh.

Sau khi Amazon Glacier hoàn thành 1 job, bạn có thể tải về job output.

Notification Configuration

Bởi vì các jobs mất 1 khoảng thời gian để hoàn thành, Amazon Glacier hỗ trợ cơ chế notification để thông báo đến bạn khi job hoàn tất. Bạn có thể cấu hình 1 vault gởi notification đến Amazon Simple Notification Service (Amazon SNS) topic khi các job hoàn thành. Bạn có thể chỉ định 1 SNS topic cho mỗi vault trong notification configuration.

Amazon Glacier lưu trữ notification configuration trong tài liệu JSON. Sau đây là ví dụ vault notification configuration.

 

{

   "Topic": "arn:aws:sns:us-east-1:111122223333:mytopic",

   "Events": ["ArchiveRetrievalCompleted", "InventoryRetrievalCompleted"]

}

 

Lưu ý là notification configuration liên quan đến các vault; bạn có thể có 1 notification configuration cho mỗi vault. Mỗi notification configuration được định danh duy nhất bởi URI.

https://<region-specific endpoint>/<account-id>/vaults/<vault-name>/notification-configuration

Amazon Glacier hỗ trợ các hành động set, get, và delete 1 notification configuration.

Các hành động được hỗ trợ

Để làm việc với vault và archive, Amazon Glacier hỗ trợ 1 tập các hành động. Trong tất cả các hành động được hỗ trợ, chỉ các hành động sau đây là bất đồng bộ.

·         Truy xuất 1 archive

·         Truy xuất 1 vault inventory (danh sách các archive)

Các hành động trên Vault

Amazon Glacier cung cấp các hành động create và delete các vault. Bạn có thể dựa vào vault description cho 1 vault cụ thể hoặc tất cả các vault trong region. Vault description cung cấp thông tin như creation date, số archive trong vault, total size (byte) được dùng bởi tất cả các archive trong vault và ngày mà Amazon Glacier tạo ra vault inventory. Amazon Glacier cũng cung cấp các hành động để set, retrieve, và delete 1 notification configuration trên vault. Thêm thông tin, xem Working with Vaults in Amazon Glacier.

Các hành động trên Archive

Amazon Glacier cung cấp các hành động để upload và delete các archive. Bạn không thể update 1 archive đã tồn tại; bạn phải delete archive đã tồn tại và upload 1 archive mới. Lưu ý rằng mỗi khi bạn upload 1 archive, Amazon Glacier tạo ra 1 archive ID mới.

Job

Truy xuất 1 archive hoặc 1 vault inventory trong Amazon Glacier là hành động bất đồng bộ. Nó yêu cầu trước hết phải khởi tạo job, đợi job hoàn thành và sau đó tải về job output. Amazon Glacier cung cấp các hành động cho bạn khởi tạo 1 job, lấy job description, và truy xuất 1 danh sách các job có liên quan đến 1 vault. Lưu ý rằng hầu hết các job đều mất khoảng 4 giờ để hoàn thành. Amazon Glacier có thể gởi thông điệp đến Amazon SNS topic  khi job hoàn thành. Thêm thông tin về truy xuất 1 archive hoặc 1 vault inventory, xem Downloading an Archive in Amazon GlacierDownloading a Vault Inventory in Amazon Glacier.

Truy xuất Amazon Glacier

Amazon Glacier là dịch vụ web RESTful dùng HTTP và HTTPS làm giao thức vẫn chuyển và JSON để định dạng dữ liệu. Ứng dụng của bạn có thể truy vấn trực tiếp đến Amazon Glacier web service API. Khi dùng REST API trực tiếp, bạn phải viết mã cần thiết để chứng thực việc gọi API. Thông tin thêm về API, xem API Reference for Amazon Glacier.

Một cách khác là bạn có thể dùng AWS SDKs để gọi đến Amazon Glacier REST API. Bạn cung cấp credential, thư viện sẽ thực hiện chứng thực và đăng ký gọi đến API. Thông tin dùng AWS SDKs, xem Using the AWS SDKs with Amazon Glacier.

Amazon Glacier cũng cung cấp 1 management console. Bạn có thể dùng console để create và delete các vault. Tuy nhiên, tất cả các hành động archive và job yêu cầu bạn phải viết mã và thực hiện request dùng REST API trực tiếp hoặc AWS SDK. Để truy xuất đến Amazon Glacier console, xem Amazon Glacier Console.

Regions & Endpoints

Bạn tạo 1 vault trong 1 AWS region cụ thể. Bạn luôn gởi request đến 1 endpoint của 1 region cụ thể. Danh sách tất cả các AWS region hỗ trợ, xem Regions and Endpoints.

Bắt đầu với Amazon Glacier

Step 1: Trước khi bạn bắt đầu

Trước khi bắt đầu, bạn phải đăng nhập với tài khoản AWS account và tải về AWS Software Development Kit (SDKs). Sau đây là hướng dẫn.

Ghi chú

Amazon Glacier cung cấp management console, bạn có thể dùng để create và delete các vault. Tuy nhiên, tất cả các tương tác khác với Amazon Glacier yêu cầu lập trình. Ví dụ, để upload dữ liệu như photo, video, các document, bạn phải viết code và thực hiện request dùng REST API trực tiếp hoặc AWS SDKs.

Sign Up

Nếu đã có tài khoản AWS account, bỏ qua phần sau và đến phần Tải về AWS SDK phù hợp. Ngược lại, làm theo các bước sau:

Để đăng ký tài khoản AWS account

1. Mở http://aws.amazon.com, và click Sign Up.

2. Làm theo hướng dẫn trên màn hình.

Một phần của quá trình đăng ký là nhận 1 cuộc gọi và nhập số PIN dùng bàn phím điện thoại.

Tải về AWS SDK phù hợp

Tải về AWS SDK cho Java

·         Nếu dùng Eclipse, bạn tải về và cài đặt AWS Toolkit for Eclipse dùng update site http://aws.amazon.com/eclipse/. Thêm thông tin, xem AWS Toolkit for Eclipse.

·         Nếu dùng bất kỳ IDE khác để tạo ứng dụng, tải về AWS SDK for Java.

Tải về AWS SDK cho .NET

·         Nếu dùng Visual Studio, bạn có thể cài đặt cả AWS SDK for .NET và AWS Toolkit for Visual Studio. Toolkit cung cấp AWS Explorer for Visual Studio và các mẫu dự án dùng để phát triển. Vào http://aws.amazon.com/sdkfornet/ và click Download AWS SDK for .NET. Mặc định, việc cài đặt sẽ gồm cả 2 AWS SDK và AWS Toolkit for Visual Studio. Để hiểu thêm về toolkit, xem AWS Toolkit for Visual Studio User Guide.

·         Nếu dùng bất kỳ IDE nào khác để tạo ứng dụng, bạn có thể dùng cùng bộ cài như trên và chỉ cài AWS SDK for .NET.

Step 2: Tạo 1 vault

Vault là thùng chứa để lưu trữ các archive. Bước đầu tiên là tạo 1 vault trong 1 AWS region hỗ trợ, như US West (Oregon).

Bạn có thể tạo vault dùng lập trình hoặc Amazon Glacier console. Phần này dùng console để tạo vault, trong bước sau, bạn sẽ upload 1 archive lên vault.

Tạo 1 vault

1. Đăng nhập vào AWS Management console và mở Amazon Glacier console tại https://console.aws.amazon.com/glacier

2. Chọn 1 region

Dùng US West (Oregon)

clip_image001

3. Chọn Create Vault.

clip_image002

4. Nhập examplevault làm tên vault trong trường Vault Name.

clip_image004

5. Click Create Vault Now.

Nếu muốn có notification gởi đến bạn hoặc ứng dụng khi job hoàn thành, bạn click Continue to Notifications để thiết lập Amazon SNS notifications. Trong phần này, bạn không cấu hình notification cho vault. Trong các bước tiếp sau, bạn upload 1 archive và download nó dùng API hoặc AWS SDK.

clip_image006

Step 3: Upload 1 archive vào vault

Tất cả các hành động trên archive như upload, download, và delete đều yêu cầu lập trình. Console chưa hỗ trợ các hành động trên archive.

Một archive là 1 object như 1 photo, video hoặc document được lưu trong vault. Nó là đơn vị lưu trữ cơ bản trong Amazon Glacier. Bạn có thể upload 1 archive trong 1 request duy nhất. Với các archive lớn, Amazon Glacier cung cấp multipart upload API cho phép upload 1 archive trong nhiều phần. Thông tin thêm, xem Uploading Large Archives in Parts (Multipart Upload).

Upload 1 archive vào vault dùng AWS SDK for Java

Trong đoạn code ví dụ, chú ý 1 số điều:

·         Tạo 1 instance của lớp AmazonGlacierClient.

·         Dùng phương thức upload của lớp ArchiveTransferManager từ high-level API của AWS SDK for Java.

·         Dùng US West (Oregon) region (us-west-2)

Chỉ dẫn từng bước cách chạy đoạn ví dụ, xem Running Java Examples for Amazon Glacier Using Eclipse. Bạn cần sửa đoạn code dưới với tên của archive cần upload.

Ghi chú

Amazon Glacier giữ 1 inventory của tất cả các archive trong vault. Khi bạn upload 1 archive, nó sẽ không xuất hiện trong vault trong management console cho đến khi vault inventory được cập nhật. Quá trình update này chỉ xảy ra 1 lần 1 ngày.

Ví dụ – Upload 1 archive dùng AWS SDK for Java

 

import java.io.File;

import java.io.IOException;

import java.util.Date;

 

import com.amazonaws.auth.profile.ProfileCredentialsProvider;

import com.amazonaws.services.glacier.AmazonGlacierClient;

import com.amazonaws.services.glacier.transfer.ArchiveTransferManager;

import com.amazonaws.services.glacier.transfer.UploadResult;

 

public class AmazonGlacierUploadArchive_GettingStarted {

 

    public static String vaultName = "examplevault2";

    public static String archiveToUpload = "*** provide name of file to upload ***";

   

    public static AmazonGlacierClient client;

   

    public static void main(String[] args) throws IOException {

       

          ProfileCredentialsProvider credentials = new ProfileCredentialsProvider();

        client = new AmazonGlacierClient(credentials);

        client.setEndpoint("https://glacier.us-west-2.amazonaws.com/&quot;);

 

        try {

            ArchiveTransferManager atm = new ArchiveTransferManager(client, credentials);

           

            UploadResult result = atm.upload(vaultName, "my archive " + (new Date()), new File(archiveToUpload));

            System.out.println("Archive ID: " + result.getArchiveId());

           

        } catch (Exception e)

        {

            System.err.println(e);

        }

    }

}

 

Upload 1 archive vào vault dùng AWS SDK for .NET

Code C# dùng high-level API của AWS SDK for .NET để upload 1 archive lên vault.

·         Tạo 1 instance của lớp ArchiveTransferManager để chỉ định region endpoint.

·         Dùng US West (Oregon) region (us-west-2)

·         Dùng phương thức Upload của lớp ArchiveTransferManager để upload 1 archive.

Chỉ dẫn từng bước cách chạy đoạn code, xem Running Code Example. Bạn phải update code với tên vault và tên archive cần upload.

Ghi chú

Amazon Glacier giữ 1 inventory của tất cả các archive trong vault. Khi bạn upload 1 archive, nó sẽ không xuất hiện trong vault trong management console cho đến khi vault inventory được cập nhật. Quá trình update này chỉ xảy ra 1 lần 1 ngày.

Ví dụ – Upload 1 archive dùng AWS SDK for .NET

 

using System;

using Amazon.Glacier;

using Amazon.Glacier.Transfer;

using Amazon.Runtime;

 

namespace glacier.amazon.com.docsamples

{

    class ArchiveUploadHighLevel_GettingStarted

    {

        static string vaultName = "examplevault";

        static string archiveToUpload = "*** Provide file name to upload ***";

 

        public static void Main(string[] args)

        {

            try

            {

                var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USWest2);

                // Upload an archive.

                string archiveId = manager.Upload(vaultName, "getting started archive test", archiveToUpload).ArchiveId;

                Console.WriteLine("Archive ID: (Copy and save this ID for the next step) : {0}", archiveId);

                Console.ReadKey();

            }

            catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }

            catch (AmazonServiceException e) { Console.WriteLine(e.Message); }

            catch (Exception e) { Console.WriteLine(e.Message); }

            Console.WriteLine("To continue, press Enter");

            Console.ReadKey();

        }

    }

}

 

Step 4: Download 1 archive từ vault

Tất cả các hành động trên archive như upload, download, và delete đều yêu cầu lập trình. Console chưa hỗ trợ các hành động trên archive.

Truy xuất dữ liệu từ Amazon Glacier gồm 2 bước:

1. Khởi tạo 1 job để truy xuất

2. Sau khi job thực thi hoàn thành, download các byte dữ liệu.

 

Job thực thi bất đồng bộ. Khi bạn khởi tạo 1 job, Amazon Glacier tạo 1 job và trả về job ID. Khi Amazon Glacier hoàn thành job, bạn sẽ lấy job output (archive data & inventory data). Đoạn code ví dụ sẽ khởi tạo job, đợi job hoàn thành và download archive data.

Cảnh báo

Lưu ý rằng sẽ mất khoảng 4 giờ để hầu hết các job hoàn thành. Sau khi khởi tạo job truy xuất archive, nó mất khoảng 4 giờ trước khi có thể download archive data.

Phí truy xuất Amazon Glacier

Amazon Glacier được thiết kế để lưu trữ dữ liệu trong thời gian dài và truy xuất không thường xuyên. Bạn có thể truy xuất đến 5% dung lượng lưu trữ trung bình hàng tháng (tính theo tỷ lệ hàng ngày) miễn phí mỗi tháng. Nếu truy xuất nhiều hơn lượng dữ liệu này trong tháng, bạn phải trả 1 khoản phí bắt đầu từ $0.01 cho mỗi gigabyte.

Thông tin về phí truy xuất, xem Amazon Glacier detail page.

Tải về archive từ vault dùng AWS SDK for Java

 

import java.io.File;

import java.io.IOException;

 

import com.amazonaws.auth.profile.ProfileCredentialsProvider;

import com.amazonaws.services.glacier.AmazonGlacierClient;

import com.amazonaws.services.glacier.transfer.ArchiveTransferManager;

import com.amazonaws.services.sns.AmazonSNSClient;

import com.amazonaws.services.sqs.AmazonSQSClient;

 

public class AmazonGlacierDownloadArchive_GettingStarted {

    public static String vaultName = "examplevault";

    public static String archiveId = "*** provide archive ID ***";

    public static String downloadFilePath  = "*** provide location to download archive ***";

   

    public static AmazonGlacierClient glacierClient;

    public static AmazonSQSClient sqsClient;

    public static AmazonSNSClient snsClient;

   

    public static void main(String[] args) throws IOException {

       

       

          ProfileCredentialsProvider credentials = new ProfileCredentialsProvider();

         

        glacierClient = new AmazonGlacierClient(credentials);       

        sqsClient = new AmazonSQSClient(credentials);

        snsClient = new AmazonSNSClient(credentials);

       

        glacierClient.setEndpoint("glacier.us-west-2.amazonaws.com");

        sqsClient.setEndpoint("sqs.us-west-2.amazonaws.com");

        snsClient.setEndpoint("sns.us-west-2.amazonaws.com");

 

        try {

            ArchiveTransferManager atm = new ArchiveTransferManager(glacierClient, sqsClient, snsClient);

           

            atm.download(vaultName, archiveId, new File(downloadFilePath));

           

        } catch (Exception e)

        {

            System.err.println(e);

        }

    }

}

 

Tải về 1 archive từ vault dùng AWS SDK for .NET

 

using System;

using Amazon.Glacier;

using Amazon.Glacier.Transfer;

using Amazon.Runtime;

 

namespace glacier.amazon.com.docsamples

{

    class ArchiveDownloadHighLevel_GettingStarted

    {

        static string vaultName = "examplevault";

        static string archiveId = "*** Provide archive ID ***";

        static string downloadFilePath = "*** Provide file path ***";

 

        public static void Main(string[] args)

        {

            try

            {

                var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USWest2);

 

                var options = new DownloadOptions();

                options.StreamTransferProgress += ArchiveDownloadHighLevel_GettingStarted.progress;

                // Download an archive.

                manager.Download(vaultName, archiveId, downloadFilePath, options);

 

                Console.ReadKey();

            }

            catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }

            catch (AmazonServiceException e) { Console.WriteLine(e.Message); }

            catch (Exception e) { Console.WriteLine(e.Message); }

            Console.WriteLine("To continue, press Enter");

            Console.ReadKey();

        }

 

        static int currentPercentage = -1;

        static void progress(object sender, StreamTransferProgressArgs args)

        {

            if (args.PercentDone != currentPercentage)

            {

                currentPercentage = args.PercentDone;

                Console.WriteLine("Downloaded {0}%", args.PercentDone);

            }

        }

    }

}

 

Step 5: Delete 1 archive từ vault

Tất cả các hành động trên archive như upload, download, và delete đều yêu cầu lập trình. Console chưa hỗ trợ các hành động trên archive.

Delete 1 archive dùng Java

 

import java.io.IOException;

 

import com.amazonaws.auth.profile.ProfileCredentialsProvider;

import com.amazonaws.services.glacier.AmazonGlacierClient;

import com.amazonaws.services.glacier.model.DeleteArchiveRequest;

 

public class AmazonGlacierDeleteArchive_GettingStarted {

 

    public static String vaultName = "examplevault";

    public static String archiveId = "*** provide archive ID***";

    public static AmazonGlacierClient client;

   

    public static void main(String[] args) throws IOException {

       

         

          ProfileCredentialsProvider credentials = new ProfileCredentialsProvider();

 

        client = new AmazonGlacierClient(credentials);

        client.setEndpoint("https://glacier.us-west-2.amazonaws.com/&quot;);       

 

        try {

 

            // Delete the archive.

            client.deleteArchive(new DeleteArchiveRequest()

                .withVaultName(vaultName)

                .withArchiveId(archiveId));

           

            System.out.println("Deleted archive successfully.");

           

        } catch (Exception e) {

            System.err.println("Archive not deleted.");

            System.err.println(e);

        }

    }

}

 

 

Delete 1 archive dùng .NET

 

using System;

using Amazon.Glacier;

using Amazon.Glacier.Transfer;

using Amazon.Runtime;

 

namespace glacier.amazon.com.docsamples

{

  class ArchiveDeleteHighLevel_GettingStarted

  {

    static string vaultName = "examplevault";

    static string archiveId = "*** Provide archive ID ***";

 

    public static void Main(string[] args)

    {

      try

      {

        var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USWest2);

        manager.DeleteArchive(vaultName, archiveId);

        Console.ReadKey();

      }

      catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }

      catch (AmazonServiceException e) { Console.WriteLine(e.Message); }

      catch (Exception e) { Console.WriteLine(e.Message); }

      Console.WriteLine("To continue, press Enter");

      Console.ReadKey();

    }

  }

}

 

 

Step 6: Delete 1 vault

Vault là thùng chứa để lưu trữ archive. Bạn có thể delete 1 vault chỉ nếu không có archive nào trong nó. Nghĩa là không còn việc ghi vào vault.

Ghi chú

Amazon Glacier chuẩn bị 1 inventory cho mỗi vault periodically, mỗi 24 giờ. Bởi vậy inventory không phản ảnh được thông tin mới nhất, Amazon Glacier kiểm tra vault rỗng bằng cách kiểm tra nếu có bất kỳ hành động ghi nào từ vault inventory sau cùng.

Bạn có thể delete 1 vault dùng lập trình hoặc console. Phần này dùng console để delete 1 vault. Thông tin về delete 1 vault dùng lập trình, xem Deleting a Vault in Amazon Glacier.

Để delete 1 vault

1. Đăng nhập AWS Management Console và mở Amazon Glacier Console tại https://console.aws.amazon.com/glacier

2. Chọn region mà vault tồn tại

Dùng US West (Oregon)

clip_image001[1]

3. Chọn vault muốn delete

Chọn vault tên examplevault

clip_image007

4. Click Delete Vault

clip_image008

Làm việc với Vault

Vault là thùng chứa để lưu trữ các archive. Khi bạn tạo 1 vault, phải chỉ định tên vault và region. Xem danh sách các region hỗ trợ, xem Accessing Amazon Glacier.

Bạn có thể lưu trữ không giới hạn số lượng archive trong vault.

Ghi chú

Amazon Glacier cung cấp 1 management console. Bạn có thể dùng console để create và delete các vault. Tuy nhiên, tất cả các tương tác khác với Amazon Glacier đều bắt buộc phải dùng lập trình.

Tạo vault

AWS account có thể tạo 1,000 vault trên mỗi region. Muốn tạo nhiều hơn số vault này, xem Amazon Glacier product detail page.

Khi tạo vault, phải cung cấp tên vault. Tên vault phải thỏa các yêu cầu sau:

·         Tên vault phải từ 1-255 ký tự dài

·         Các ký tự cho phép là a-z, A-Z, 0-9, ‘_’ (underscore), ‘-‘ (hyphen), và ‘.’ (period).

Tên vault phải duy nhất cho mỗi account và mỗi region mà vault được tạo. Nghĩa là 1 account có thể tạo các vault cùng tên trong các region khác nhau.

Tạo vault dùng AWS SDK for Java

 

import java.io.IOException;

import java.util.List;

 

import com.amazonaws.auth.profile.ProfileCredentialsProvider;

import com.amazonaws.services.glacier.AmazonGlacierClient;

import com.amazonaws.services.glacier.model.CreateVaultRequest;

import com.amazonaws.services.glacier.model.CreateVaultResult;

import com.amazonaws.services.glacier.model.DeleteVaultRequest;

import com.amazonaws.services.glacier.model.DescribeVaultOutput;

import com.amazonaws.services.glacier.model.DescribeVaultRequest;

import com.amazonaws.services.glacier.model.DescribeVaultResult;

import com.amazonaws.services.glacier.model.ListVaultsRequest;

import com.amazonaws.services.glacier.model.ListVaultsResult;

 

 

public class AmazonGlacierVaultOperations {

 

    public static AmazonGlacierClient client;

 

    public static void main(String[] args) throws IOException {

 

          ProfileCredentialsProvider credentials = new ProfileCredentialsProvider();

         

        client = new AmazonGlacierClient(credentials);

        client.setEndpoint("https://glacier.us-east-1.amazonaws.com/&quot;);

       

        String vaultName = "examplevaultfordelete";

 

        try {           

            createVault(client, vaultName);

            describeVault(client, vaultName);

            listVaults(client);

            deleteVault(client, vaultName);     

 

        } catch (Exception e) {

            System.err.println("Vault operation failed." + e.getMessage());

        }

    }

 

    private static void createVault(AmazonGlacierClient client, String vaultName) {

        CreateVaultRequest createVaultRequest = new CreateVaultRequest()

            .withVaultName(vaultName);

        CreateVaultResult createVaultResult = client.createVault(createVaultRequest);

 

        System.out.println("Created vault successfully: " + createVaultResult.getLocation());

    }

 

    private static void describeVault(AmazonGlacierClient client, String vaultName) {

        DescribeVaultRequest describeVaultRequest = new DescribeVaultRequest()

            .withVaultName(vaultName);

        DescribeVaultResult describeVaultResult  = client.describeVault(describeVaultRequest);

 

        System.out.println("Describing the vault: " + vaultName);

        System.out.print(

                "CreationDate: " + describeVaultResult.getCreationDate() +

                "\nLastInventoryDate: " + describeVaultResult.getLastInventoryDate() +

                "\nNumberOfArchives: " + describeVaultResult.getNumberOfArchives() +

                "\nSizeInBytes: " + describeVaultResult.getSizeInBytes() +

                "\nVaultARN: " + describeVaultResult.getVaultARN() +

                "\nVaultName: " + describeVaultResult.getVaultName());

    }

 

    private static void listVaults(AmazonGlacierClient client) {

        ListVaultsRequest listVaultsRequest = new ListVaultsRequest();

        ListVaultsResult listVaultsResult = client.listVaults(listVaultsRequest);

 

        List<DescribeVaultOutput> vaultList = listVaultsResult.getVaultList();

        System.out.println("\nDescribing all vaults (vault list):");

        for (DescribeVaultOutput vault : vaultList) {

            System.out.println(

                    "\nCreationDate: " + vault.getCreationDate() +

                    "\nLastInventoryDate: " + vault.getLastInventoryDate() +

                    "\nNumberOfArchives: " + vault.getNumberOfArchives() +

                    "\nSizeInBytes: " + vault.getSizeInBytes() +

                    "\nVaultARN: " + vault.getVaultARN() +

                    "\nVaultName: " + vault.getVaultName());

        }

    }

 

    private static void deleteVault(AmazonGlacierClient client, String vaultName) {

        DeleteVaultRequest request = new DeleteVaultRequest()

            .withVaultName(vaultName);

        client.deleteVault(request);

        System.out.println("Deleted vault: " + vaultName);

    }

 

}

 

 

Tạo vault dùng AWS SDK for .NET

Tạo vault dùng high-level API của AWS SDK for .NET

 

using System;

using Amazon.Glacier;

using Amazon.Glacier.Transfer;

using Amazon.Runtime;

 

namespace glacier.amazon.com.docsamples

{

  class VaultCreateDescribeListVaultsDeleteHighLevel

  {

    static string vaultName = "*** Provide vault name ***";

 

    public static void Main(string[] args)

    {

      try

      {

          var manager = new ArchiveTransferManager(Amazon.RegionEndpoint.USEast1);

          manager.CreateVault(vaultName);

          Console.WriteLine("Vault created. To delete the vault, press Enter");

          Console.ReadKey();

          manager.DeleteVault(vaultName);

          Console.WriteLine("\nVault deleted. To continue, press Enter");

      }

      catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }

      catch (AmazonServiceException e) { Console.WriteLine(e.Message); }

      catch (Exception e) { Console.WriteLine(e.Message); }

      Console.WriteLine("To continue, press Enter");

      Console.ReadKey();

    }

  }

}

 

 

Tạo vault dùng low-level API của AWS SDK for .NET

 

using System;

using Amazon.Glacier;

using Amazon.Glacier.Model;

using Amazon.Runtime;

 

namespace glacier.amazon.com.docsamples

{

  class VaultCreateDescribeListVaultsDelete

  {

    static string vaultName = "*** Provide vault name ***";

    static AmazonGlacier client;

 

    public static void Main(string[] args)

    {

       try

      {

        using (client = new AmazonGlacierClient(Amazon.RegionEndpoint.USEast1))

        {

          Console.WriteLine("Creating a vault.");

          CreateAVault();

          DescribeVault();

          GetVaultsList();

          Console.WriteLine("\nVault created. Now press Enter to delete the vault…");

          Console.ReadKey();

          DeleteVault();

        }

      }

      catch (AmazonGlacierException e) { Console.WriteLine(e.Message); }

      catch (AmazonServiceException e) { Console.WriteLine(e.Message); }

      catch (Exception e) { Console.WriteLine(e.Message); }

      Console.WriteLine("To continue, press Enter");

      Console.ReadKey();

    }

 

    static void CreateAVault()

    {

      CreateVaultRequest request = new CreateVaultRequest()

      {

        VaultName = vaultName

      };

      CreateVaultResponse response = client.CreateVault(request);

      Console.WriteLine("Vault created: {0}\n", response.CreateVaultResult.Location);

    }

 

    static void DescribeVault()

    {

      DescribeVaultRequest describeVaultRequest = new DescribeVaultRequest()

      {

        VaultName = vaultName

      };

  

      DescribeVaultResponse describeVaultResponse = client.DescribeVault(describeVaultRequest);

      DescribeVaultResult describeVaultResult = describeVaultResponse.DescribeVaultResult;

      Console.WriteLine("\nVault description…");

      Console.WriteLine(

        "\nVaultName: " + describeVaultResult.VaultName +

        "\nVaultARN: " + describeVaultResult.VaultARN +

        "\nVaultCreationDate: " + describeVaultResult.CreationDate +

        "\nNumberOfArchives: " + describeVaultResult.NumberOfArchives +

        "\nSizeInBytes: " + describeVaultResult.SizeInBytes +

        "\nLastInventoryDate: " + describeVaultResult.LastInventoryDate

        );

    }

 

    static void GetVaultsList()

    {

      string lastMarker = null;

      Console.WriteLine("\n List of vaults in your account in the specific region …");

      do

      {

        ListVaultsRequest request = new ListVaultsRequest()

        {

          Marker = lastMarker

        };

        ListVaultsResponse response = client.ListVaults(request);

 

        ListVaultsResult result = response.ListVaultsResult;

       

        foreach (DescribeVaultOutput output in result.VaultList)

        {

          Console.WriteLine("Vault Name: {0} \tCreation Date: {1} \t #of archives: {2}",

                            output.VaultName, output.CreationDate, output.NumberOfArchives);

        }

        lastMarker = result.Marker;

      } while (lastMarker != null);

    }

 

    static void DeleteVault()

    {

      DeleteVaultRequest request = new DeleteVaultRequest()

      {

        VaultName = vaultName

      };

      DeleteVaultResponse response = client.DeleteVault(request);

    }

  }

}

 

 

Tạo vault dùng REST API

Để tạo vault dùng REST API, xem Create Vault (PUT vault).

Truy xuất vault metadata

Bạn có thể truy xuất thông tin vault như creation date, số archive trong vault, và tổng kích thước tất cả các archive trong vault. Amazon Glacier cung cấp API cho phép truy xuất thông tin 1 vault cụ thể hoặc tất cả các vault trong 1 region thuộc 1 account.

Nếu muốn truy xuất danh sách vault, tên vault theo giá trị ASCII được trả về. Danh sách này tối đa lên đến 1,000 vault. Bạn có thể giới hạn số lượng bản ghi được trả về, kết quả được phân trang. Cần gửi thêm request để lấy kết quả tiếp theo.

Truy xuất vault metadata dùng AWS SDK for Java

Truy xuất vault metadata của 1 vault cụ thể

 

DescribeVaultRequest request = new DescribeVaultRequest()

          .withVaultName("*** provide vault name***");

 

DescribeVaultResult result = client.describeVault(request);

 

System.out.print(

        "\nCreationDate: " + result.getCreationDate() +

        "\nLastInventoryDate: " + result.getLastInventoryDate() +

        "\nNumberOfArchives: " + result.getNumberOfArchives() +

        "\nSizeInBytes: " + result.getSizeInBytes() +

        "\nVaultARN: " + result.getVaultARN() +

        "\nVaultName: " + result.getVaultName());

 

 

Truy xuất vault metadata của tất cả các vault trong 1 region

 

AmazonGlacierClient client;

client.setEndpoint("https://glacier.us-east-1.amazonaws.com/&quot;);

 

String marker = null;

do {           

    ListVaultsRequest request = new ListVaultsRequest()

        .withLimit("5")

        .withMarker(marker);

    ListVaultsResult listVaultsResult = client.listVaults(request);

   

    List<DescribeVaultOutput> vaultList = listVaultsResult.getVaultList();

    marker = listVaultsResult.getMarker();

    for (DescribeVaultOutput vault : vaultList) {

        System.out.println(

                "\nCreationDate: " + vault.getCreationDate() +

                "\nLastInventoryDate: " + vault.getLastInventoryDate() +

                "\nNumberOfArchives: " + vault.getNumberOfArchives() +

                "\nSizeInBytes: " + vault.getSizeInBytes() +

                "\nVaultARN: " + vault.getVaultARN() +

                "\nVaultName: " + vault.getVaultName());

    }

} while (marker != null);

 

 

Truy xuất vault metadata dùng AWS SDK for .NET

Truy xuất vault metadata của 1 vault cụ thể

 

AmazonGlacier client;

client = new AmazonGlacierClient(Amazon.RegionEndpoint.USEast1);

 

DescribeVaultRequest describeVaultRequest = new DescribeVaultRequest()

{

  VaultName = "*** Provide vault name ***"

}; 

DescribeVaultResponse describeVaultResponse = client.DescribeVault(describeVaultRequest);

DescribeVaultResult describeVaultResult = describeVaultResponse.DescribeVaultResult;

Console.WriteLine("\nVault description…");

Console.WriteLine(

   "\nVaultName: " + describeVaultResult.VaultName +

   "\nVaultARN: " + describeVaultResult.VaultARN +

   "\nVaultCreationDate: " + describeVaultResult.CreationDate +

   "\nNumberOfArchives: " + describeVaultResult.NumberOfArchives +

   "\nSizeInBytes: " + describeVaultResult.SizeInBytes +

   "\nLastInventoryDate: " + describeVaultResult.LastInventoryDate

   );

 

 

Truy xuất vault metadata tất cả các vault trong 1 region

 

AmazonGlacier client;

client = new AmazonGlacierClient(Amazon.RegionEndpoint.USEast1);

string lastMarker = null;

do

{

  ListVaultsRequest request = new ListVaultsRequest()

  {

    Limit = 5,

    Marker = lastMarker

  };

  ListVaultsResponse response = client.ListVaults(request);

 

  ListVaultsResult result = response.ListVaultsResult;

  Console.WriteLine("\n List of vaults in your account in the specific region …");

  foreach (DescribeVaultOutput output in result.VaultList)

  {

    Console.WriteLine("Vault Name: {0} \tCreation Date: {1} \t #of archives: {2}",

                      output.VaultName, output.CreationDate, output.NumberOfArchives);

  }

  lastMarker = result.Marker;

} while (lastMarker != null);

 

 

Truy xuất vault metadata dùng REST API

Để liệt kê các vault, xem List Vaults (Get vaults). Để mô tả 1 vault, xem Describe Vault (GET vault).

Tải về 1 vault inventory

Sau khi bạn upload archive đầu tiên vào vault, Amazon Glacier tự động tạo 1 vault inventory và sau đó cập nhật nó 1 lần 1 ngày. Sau khi Amazon Glacier tạo inventory đầu tiên, thường mất khoảng nữa ngày đến 1 ngày trước khi inventory sẵn sàng để sử dụng. Có thể truy xuất vault inventory bằng 2 cách:

1. Khởi tạo 1 retrieval job

2. Sau khi job hoàn thành, tải về các bytes

Ví dụ, truy xuất archive hoặc vault inventory bắt buộc phải khởi tạo job. Job được thực thi bất đồng bộ. Khi bạn tạo job, Amazon Glacier tạo job và trả về job ID. Khi job hoàn thành, có thể truy xuất job output, archive bytes hoặc vault inventory data.

Job phải hòan thành trước khi bạn lấy output. Để xác định trạng thái của job, bạn có các tùy chọn:

·         Đợi thông báo job hoàn thành – Có thể dùng Amazon SNS topic để nhận notification khi job hoàn thành

·         Yêu cầu thông tin job một cách tường minh – Amazon Glacier cũng cung cấp hành động mô tả job (Describe Job (GET JobID)). Bạn có thể định kỳ gửi yêu cầu lấy thông tin job. Tuy nhiên dùng Amazon SNS là tùy chọn nên dùng.

Nói về Inventory

Amazon Glacier cập nhật vault inventory 1 lần một ngày, bắt đầu từ ngày bạn upload archive đầu tiên vào vault. Nếu không có thêm mới hay xóa archive kể từ inventory sau cùng, inventory date không được cập nhật. Khi bạn khởi tạo 1 job cho vault inventory, Amazon Glacier trả về inventory gần nhất được tạo ra, đây là snapshot tại một thời điểm chứ không phải dữ liệu real-time. Lưu ý rằng sau khi Amazon Glacier tạo inventory đầu tiên cho vault, mất khoảng nữa ngày đến 1 ngày trước khi có thể truy xuất inventory.

Bạn không thấy có ích khi truy xuất vault inventory mỗi khi upload archive. Tuy nhiên, trường hợp bạn duy trì 1 database phía client liên quan đến metadata về các archive đã upload lên Amazon Glacier. Lúc này mới thấy được sự hữu ích, database của bạn là vault inventory thực sự.

Inventory có thể được trả về theo 2 định dạng, CSV hoặc JSON. Bạn có thể chỉ định định dạng khi khởi tạo job. Định dạng mặc định là JSON.

Tải về vault inventory dùng AWS SDK for Java

Xem http://docs.aws.amazon.com/amazonglacier/latest/dev/retrieving-vault-inventory-java.html

Tải về vault inventory dùng AWS SDK for .NET

Xem http://docs.aws.amazon.com/amazonglacier/latest/dev/retrieving-vault-inventory-sdk-dotnet.html

Tải về vault inventory dùng REST API

Xem http://docs.aws.amazon.com/amazonglacier/latest/dev/retrieving-vault-inventory-rest-api.html

Cấu hình vault notification

Cấu hình vault notification dùng AWS SDK for Java

Xem http://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications-sdk-java.html

Cấu hình vault notification dùng AWS SDK for .NET

Xem http://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications-sdk-dotnet.html

Cấu hình vault notification dùng REST API

Xem http://docs.aws.amazon.com/amazonglacier/latest/dev/configuring-notifications-rest-api.html

Cấu hình vault notification dùng console

Khi cấu hình notification, chỉ định cụ thể 1 job event mà sẽ tạo ra notification đến Amazon SNS topic. Ngoài việc cấu hình notification cho vault, bạn cũng có thể chỉ định topic để public notification khi bạn khởi tạo job.

Để cấu hình vault notification

1. Đăng nhập AWS Management Console và mở Amazon Glacier Console tại https://console.aws.amazon.com/glacier

2. Chọn 1 vault trong danh sách

clip_image010

3. Chọn Notification tab

4. Chọn enable trong Notification field.

clip_image012

5. Trong Notifications tab, làm 1 trong các điều sau:

To…

Do this…

Specify an existing Amazon SNS topic

Enter the Amazon SNS topic in the Amazon SNS Topic ARN text box.

The topic is an Amazon Resource Name (ARN) that has the form shown below.

arn:aws:sns:region:accountId:topicname

You can find the an Amazon SNS topic ARN from the Amazon Simple Notification Service (Amazon SNS) console.

Create a new Amazon SNS topic

a.    Click create a new SNS topic.

A Create Notifications SNS Topic dialog box appears.

b.    In the Topic Name field, specify the name of the new topic.

If you will subscribe to the topic using SMS subscriptions, put a name in the Display Namefield.

clip_image013

c.     Click Create Topic.

The Amazon SNS Topic ARN text box is populated with the ARN of the new topic.

 

6. Chọn các events sẽ trigger notificaiton

Ví dụ, trigger notification khi job hoàn thành, chỉ chọn Get Archive Job Complete.

clip_image015

7. Click Save.

Quan trọng

Mặc định, 1 topic mới không có subscriptions liên quan đến nó. Để nhận notification được gửi đến topic, bạn phải subscribe topic, xem Subscribe to a Topc.

Xóa 1 vault

Chỉ có thể xóa 1 vault nếu không còn archive nào trong vault được ghi nhận bởi last inventory và không còn hành động ghi nào vào vault kể từ last inventory.

Ghi chú

Amazon Glacier chuẩn bị 1 inventory cho mỗi chu kỳ vault, mỗi 24 giờ. Bởi vì inventory không phản ánh thông tin mới nhất, Amazon Glacier đảm bảo vault thật sự empty bằng cách kiểm tra nếu có bất kỳ hành động ghi nào kể từ last vault inventory.

Xóa 1 vault dùng AWS SDK for Java

Xem http://docs.aws.amazon.com/amazonglacier/latest/dev/deleting-vaults-sdk-java.html

Xóa 1 vault dùng AWS SDK for .NET

Xem http://docs.aws.amazon.com/amazonglacier/latest/dev/deleting-vaults-sdk-dotnet.html

Xóa 1 vault dùng REST API

Xem http://docs.aws.amazon.com/amazonglacier/latest/dev/deleting-vault-rest-api.html

Xóa vault dùng console

1. Đăng nhập Amazon Glacier console

2. Chọn AWS region chứa vault

3. Chọn vault

4. Click Delete Vault.

Làm việc với archive

Xem thêm http://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-archives.html

Dùng AWS SDKs

Amazon Web Services cung cấp SDK giúp bạn phát triển ứng dụng. SDK libraries đóng gói các Amazon Glacier API, đơn giản hóa các tác vụ lập trình. Ví dụ, với mỗi request được gửi tới Amazon Glacier, bạn phải thêm 1 signature để chứng thực request. Khi bạn dùng libraries, chỉ cần cung cấp AWS security credentials trong code và libraries sẽ làm phần còn lại.

Ghi chú

Amazon Glacier được hỗ trợ bởi AWS SDK for Java, .NET, PHP, và Python.

AWS SDK for Java và .NET gồm high-level và low-level wrapper libraries.

Low-level API là gì?

Low-level API là tầng thấp nhất, gần với REST API nhất. Với mỗi hành động REST, low-level API cung cấp phương thức tương ứng.

High-level API là gì?

Các API ở mức trừu tượng cao hơn của các hành động REST API. Ví dụ

·         Tải lên 1 archive – Để tải lên archive dùng low-level API ngoài chỉ định file name và vault name. Bạn cần cung cấp checksum (SHA-256 tree hash) của payload. Tuy nhiên, high-level API sẽ tính toán checksum cho bạn.

·         Tải về archive hoặc vault inventory – Để tải về archive dùng low-level API, bạn phải khởi tạo job, đợi job hòan thành và lấy output. Bạn cần viết thêm code cho Amazon SNS topic để notify khi job hoàn thành. Bạn cũn cần có cơ chế polling để kiểm tra nếu job hoàn thành và message được post lên topic. High-level API cung cấp phương thức giúp tải về 1 archive và takes care of tất cả các bước. Bạn chỉ cần chỉ định archive ID và chỉ định folder path nơi cần lưu dữ liệu tải về.

Xem thêm http://docs.aws.amazon.com/amazonglacier/latest/dev/using-aws-sdk.html

Advertisements