Lưu trữ với Amazon S

Một phần của tài liệu Tiểu luận môn tính toán lưới KHAI THÁC DỊCH VỤ CLOUD COMPUTING (Trang 101 - 108)

Để bắt đầu khám phá S3, bạn cần đăng ký một tài khoản Amazon Web Services. Bạn sẽ được cung cấp một số tài khoản Amazon Web Services và sẽ nhận được các khóa truy cập an toàn cùng với chứng chỉ bảo mật x.509 cái mà sẽ được yêu cầu khi bạn bắt đầu sử dụng các thư viện và công cụ để tương tác với S3. Tất cả các giao tiếp với bất kỳ dịch vụ nào của Amazon Web Services đều thông qua giao diện SOAP hoặc giao diện query/REST. Các thông điệp yêu cầu mà được gửi qua một trong hai giao diện này phải được xác nhận bằng chữ ký số bởi người sử dụng gửi nó để đảm bảo rằng thông điệp đó không bị can thiệp trong quá trình luân chuyển, và rằng chúng thực sự còn nguyên vẹn như khi được gửi. Đây là phần cơ bản nhất của việc sử dụng các API của Amazon Web Services. Mỗi yêu cầu phải

người dùng Amazon Web Services đều được gắn với các chứng thư (credential) an toàn sau: Một ID khóa an toàn định danh bạn như là người tạo ra các yêu cầu thông qua giao diện query/REST.Một khóa truy cập bí mật để tạo ra chữ ký số khi bạn tạo các yêu cầu thông qua giao diện query. Các chứng nhận x.509 riêng và công cộng và sự xác thực khi sử dụng giao diện SOAP.

Bạn có thể quản lý các khóa và chứng chỉ của bạn, tái tạo chúng, xem hoạt động và các báo cáo sử dụng của tài khoản, và thay đổi thông tin hồ sơ của bạn từ trang thông tin tài khoản của Amazon Web Services.Sau khi bạn đăng ký tài khoản thành công, bạn cần kích hoạt dịch vụ Amazon S3 cho tài khoản của bạn bằng cách thực hiện các bước sau:

Đăng nhập vào tài khoản Amazon Web Services của bạn.Tìm đến trang chủ S3.Nhấn vào Sign Up For This Web Service ở bên phải của trang.Cung cấp các thông tin cần thiết và hoàn tất quá trình đăng ký.Các ví dụ trong đồ án này sử dụng giao diện query/REST để giao tiếp với S3. Bạn sẽ cần các khóa truy cập. Bạn có thể lấy chúng từ trang thông tin tài khoản Amazon Web Services của bạn bằng cách chọn View Access Key Identifiers. Bây giờ bạn đã sẵn sàng để sử dụng dịch vụ Amazon Web Services và đã kích hoạt dịch vụ S3 cho tài khoản của bạn.

aa. Tương tác với S3

Để tìm hiểu về tương tác với S3, bạn có thể sử dụng các thư viện có sẵn của Amazon hoặc của bên thứ 3. Bài viết này không đi sâu vào chi tiết của việc giao tiếp với S3, như là cách ký yêu cầu, cách xây dựng các tài liệu XML được dùng cho việc đóng gói dữ liệu, hay các tham số được gửi đến và đi từ S3. Chúng ta sẽ để các thư viện xử lý những việc đó, và sẽ sử dụng các giao diện mức cao mà chúng cung cấp. Bạn có thể xem hướng dẫn cho nhà phát triển S3 để biết thêm chi tiết.

Bạn sẽ sử dụng một thư viện Java™ mã mở tên là JetS3t để khám phá S3, và tìm hiểu về các API của nó bằng cách xem các đoạn mã nhỏ. Ở cuối bài viết này bạn sẽ thu thập và tổ chức những đoạn mã nhỏ này vào một shell S3 đơn giản và tiện lợi

JetS3t

JetS3t là một công cụ Java mã mở để tương tác với S3. Nó còn hơn là một thư viện. Bản phân phối có chứa một vài công cụ liên quan tới S3 rất hữu dụng mà có thể được sử dụng bởi người dùng S3 bình thường cũng như những người cung cấp dịch vụ. JetS3t bao gồm:

Cockpit

Một giao diện đồ họa để quản lý các nội dung của một tài khoản Amazon S3. Synchronize

Một ứng dụng dòng lệnh để đồng bộ hóa các thư mục trên máy tính của bạn với tài khoản S3.

Gatekeeper

Một servlet mà bạn có thể sử dụng để quản lý truy cập tới tài khoản S3 của bạn.

CockpitLite

Một phiên bản rút gọn của Cockpit mà điều hướng tất cả các thao tác thông qua dịch vụ gatekeeper.

Uploader

Một giao diện đồ họa mà điều hướng toàn bộ các thao tác thông qua dịch vụ gatekeeper và có thể được sử dụng bởi người cung cấp dịch vụ để cung cấp truy cập tài khoản S3 cho các khách hàng. Tất nhiên, bạn có thể sử dụng một trong các ứng dụng có giao diện đồ họa để tương tác với S3, nhưng nó sẽ không có ích nếu bạn cần phát triển các ứng dụng để giao tiếp với S3. Bạn có thể tải toàn bộ mã nguồn cho bài viết này như là một tệp nén, bao gồm dự án Netbeans mà bạn có thể nhập vào không gian làm việc (workspace) của bạn.

JetS3t cung cấp một lớp trừu tượng tên là org.jets3t.service.S3Service mà phải được mở rộng bởi các lớp mà cài đặt một giao diện cụ thể, như là REST hoặc SOAP. JetS3t cung cấp hai bản cài đặt mà bạn có thể sử dụng để kết nối và tương tác với S3:

org.jets3t.service.impl.rest.httpclient.RestS3Service giao tiếp với S3 thông qua giao diện REST. org.jets3t.service.impl.soap.axis.SoapS3Service giao tiếp với S3 thông qua giao diện SOAP sử dụng Apache Axis 1.4.

JetS3t sử dụng một tệp tên là jets3t.properties để cấu hình một loạt tham số được sử dụng trong khi giao tiếp với S3. Ví dụ trong bài này sử dụng tệp mặc định jets3t.properties. Hướng dẫn cấu hình của JetS3t có giải thích chi tiết về các tham số.

Trong đồ án này, bạn sẽ sử dụng RestS3Service để kết nối tới S3. Một đối tượng RestS3Service có thể được tạo ra bằng cách cung cấp các khóa truy cập dịch vụ Amazon Web Services của bạn trong mẫu AWSCredentials. Hãy nhớ rằng các đoạn mã trong bài viết này là để trình diễn các API. Để thực thi mỗi đoạn mã, bạn cần đảm bảo rằng tất cả các lớp cần thiết đã sẵn sàng. Tham khảo tới tới nguồn trong gói tải về để có được các lớp cần thiết. Hoặc, đơn giản hơn, bạn có thể nhập dự án Netbeans vào không gian làm việc của bạn để truy cập tới các mã nguồn dễ dàng.

ab. Các ví dụ cụ thể

Ví dụ 1. Liệt kê các buckets

// list all buckets in the AWS account and print info for each bucket. S3Bucket[] buckets = s3Service.listAllBuckets();

for (S3Bucket b : buckets) { System.out.println(b); }

Bạn có thể tạo một thùng mới bằng cách cung cấp một tên duy nhất cho nó. Không gian tên của các buckets được chia sẻ bởi toàn bộ tài khoản người dùng, nên đôi khi

tìm một tên duy nhất tương đối mệt. Bạn cũng có thể chỉ rõ vị trí địa lý bạn muốn đặt thùng và các đối tượng mà sẽ được chứa trong nó.

Ví dụ 2. Tạo các buckets

// create a US bucket and print its info

S3Bucket bucket = s3Service.createBucket(bucketName);

System.out.println("Created bucket - " + bucketName + " - " + bucket); // create a EU bucket and print its info

S3Bucket bucket = s3Service.createBucket(bucketName, S3Bucket.LOCATION_EUROPE); System.out.println("Created bucket - " + bucketName + " - " + bucket);

Bạn phải xóa toàn bộ các đối tượng chứa trong thùng trước khi xóa thùng đó nếu không sẽ có cảnh báo. Lớp RestS3Service mà bạn đang dùng là ổn cho việc xử lý với các đối tượng đơn lẻ. Khi bạn bắt đầu xử lý với các đối tượng phức hợp, bạn nên sử dụng phương án đa luồng để tăng tốc xử lý. JetS3t cung cấp lớp org.jets3t.service.multithread.S3ServiceSimpleMulti cho mục đích này. Bạn có thể đóng gói đối tượng s3Service có sẵn bằng cách sử dụng lớp này và hưởng lợi ích của các multiprocessors đó. Nó sẽ rất tiện lợi khi bạn làm sạch một thùng bằng cách xóa tất cả các đối tượng mà nó đang chứa.

Ví dụ 3. Xóa một thùng

// get the bucket

S3Bucket bucket = getBucketFromName(s3Service, “my bucket”); // delete a bucket – it must be empty first

s3Service.deleteBucket(bucket);

// create a multi threaded version of the RestService

S3ServiceSimpleMulti s3ServiceMulti = new S3ServiceSimpleMulti(s3Service); // get all the objects from bucket

S3Object[] objects = s3Service.listObjects(bucket); // clear the bucket by deleting all its objects

Mỗi thùng được gắn với một ACL xác định quyền hạn đối với thùng đó và mức độ truy cập được cung cấp cho người dùng khác. Bạn có thể lấy ACL và in ra quyền hạn được nó cung cấp.

Ví dụ 4. Lấy ACL cho thùng

// get the bucket

S3Bucket bucket = getBucketFromName(s3Service, “my bucket”); // get the ACL and print it

AccessControlList acl = s3Service.getBucketAcl(bucket); System.out.println(acl);

Quyền hạn mặc định cho thùng mới được khởi tạo và các đối tượng làm cho chúng thuộc về chủ của nó. Bạn có thể điều chỉnh quyền mặc định bằng cách thay đổi ACL cho một thùng và cấp quyền cho một nhóm người dùng để đọc, viết và có toàn

quyền điều khiển trên thùng.

Ví dụ 5. Làm cho thùng và nội dung trong nó trở thành công cộng

// get the bucket

S3Bucket bucket = getBucketFromName(s3Service, “my bucket”); // get the ACL

AccessControlList acl = s3Service.getBucketAcl(bucket); // give everyone read access

acl.grantPermission(GroupGrantee.ALL_USERS, Permission.PERMISSION_READ); // save changes back to S3

bucket.setAcl(acl);

s3Service.putBucketAcl(bucket);

Bạn có thể kích hoạt một cách dễ dàng việc lưu lại nhật ký truy cập cho một thùng và lấy trạng thái việc lưu nhật ký hiện tại. Sau khi việc lưu nhật ký được kích hoạt, các lịch sử truy cập chi tiết cho từng tệp trong thùng đó được trữ trên S3. Tài khoản S3 của bạn sẽ bị tính phí cho không gian lưu trữ mà nhật ký đó sử dụng.

Ví dụ 6. Thực thi Shell S3

java -jar devworks-s3.jar my_aws_access_key my_aws_secret_key

Bạn có thể gõ tại bất cứ thời điểm nào trong Shell S3 để lấy danh sách các lệnh được hỗ trợ.

Một số phương thức hữu dụng hơn đã được thêm vào Shell S3. Bạn có thể mở rộng nó để thêm bất cứ chức năng nào bạn muốn để làm cho shell trở lên hữu dụng hơn nữa.

Một phần của tài liệu Tiểu luận môn tính toán lưới KHAI THÁC DỊCH VỤ CLOUD COMPUTING (Trang 101 - 108)

Tải bản đầy đủ (DOCX)

(135 trang)
w