bởi Amazo n:
3.2.1. Ba khái niệm nền tảng cho khung làm việc S3:
Thùng (Buckets)
Thùng là các nền tảng cơ bản nhất. Mỗi đối tượng được lưu trữ trong Amazon S3 đều được chứa trong một thùng. Thùng có thể được hiểu như là một thư mục trên hệ thống tệp. Điểm mấu chốt để phân biệt giữa thư mục và thùng là mỗi thùng và các nội dung của nó có thể truy cập được thông qua URL. Ví dụ, nếu bạn có một thùng tên là "prabhakar," nó có thể truy cập được thông qua URL http://prabhakar.s3.amazonaws.com.
Mỗi tài khoản S3 có thể có tối đa 100 thùng. Một thùng không thể chứa thùng khác, nên bạn không thể tạo thùng trong thùng được. Bạn có thể thay đổi vị trí địa lý của các thùng của bạn bằng cách chỉ rõ một vị trí khi bạn tạo chúng. Điều này sẽ đảm bảo một cách tự động rằng tất cả các đối tượng mà bạn lưu trữ trong thùng đó sẽ được lưu trữ trong cùng vị trí địa lý. Tại thời điểm này, bạn có thể đặt các thùng của bạn ở Mỹ hoặc liên minh châu Âu. Nếu bạn không chỉ rõ một vị trí khi tạo thùng, thùng đó và nội dung của nó sẽ được lưu trữ tại vị trí gần địa chỉ thanh toán trên tài khoản của bạn nhất.
Các tên của thùng cần tuân theo các yêu cầu của S3:
• Tên phải bắt đầu bằng một số hoặc một chữ cái.
• Một tên có hiệu lực có thể chỉ chứa các ký tự viết thường, chữ số, dấu chấm, dấu gạch chân, và gấu gạch ngang.
• Mặc dù tên có thể có chữ số và dấu chấm, nhưng chúng không được sử dụng định dạng số IP. Bạn không thể có một thùng với tên là 192.168.1.254.
• Không gian tên thùng được chia sẻ giữa các thùng trong tất cả các tài khoản trong S3. Vì vậy, tên của bạn phải là duy nhất trong S3.
Các thùng mà sẽ chứa các đối tượng mà sẽ được truy cập bởi các địa chỉ URLs phải tuân theo các yêu cầu phụ của S3 như sau:
• Tên của các thùng không được chứa dấu gạch dưới.
• Độ dài từ 3 đến 63 ký tự.
• Tên không thể kết thúc với một dấu gạch ngang. Ví dụ, tên myfavorite-.bucket.com là không hợp lệ.
• Không chứa dấu gạch ngang đứng ngay trước dấu chấm. Tên my-.bucket.com là không hợp lệ.
Bạn có thể sử dụng một quy ước đặt tên miền cho các thùng của bạn, như là media.yourdomain.com, và ánh xạ các tên miền và tên miền con web sẵn có của bạn tới Amazon S3. Việc ánh xạ thực sự sẽ được hoàn tất khi bạn thêm DNS CNAME để trỏ tới S3. Lợi ích to lớn với lược đồ này là bạn có thể sử dụng chính tên miền của bạn trong các địa chỉ URL của bạn để tải các tệp. Ánh xạ CNAME sẽ chịu trách nhiệm cho việc chuyển đổi giữa các địa chỉ S3 cho các thùng của bạn. Ví dụ, http://media.yourdomain.com.s3.amazonaws.com trở thành địa chỉ thân thiện hơn http://media.yourdomain.com.
Đối tượng (Objects)
Các đối tượng chứa dữ liệu được lưu trữ trong các thùng ở S3. Các đối tượng được coi như là các tệp mà bạn muốn lưu trữ. Mỗi đối tượng được lưu trữ được cấu thành bởi hai thực thể: dữ liệu (data) và dữ liệu thông tin (metadata). Dữ liệu là dữ liệu thực mà bạn bạn muốn lưu trữ, như là tệp PDF, tài liệu Word, một tệp video, vân vân. Dữ liệu lưu trữ được gắn với dữ liệu thông tin để mô tả đối tượng. Một vài ví dụ của dữ liệu thông tin như là kiểu của đối tượng được lưu trữ, ngày chỉnh sửa cuối cùng, và bất cứ thông tin cụ thể nào khác. Dữ liệu thông tin cho một đối tượng được chỉ ra bởi người phát triển như là cặp khóa giá trị (key value pairs) khi đối tượng đó được gửi tới S3 để lưu trữ.
Không giống như sự giới hạn về số lượng các thùng, số lượng đối tượng không bị hạn chế. Bạn có thể lưu trữ một số lượng vô hạn các đối tượng trong các thùng của bạn, và mỗi đối tượng có thể chứ đến 5GB dữ liệu.
Dữ liệu trong các đối tượng S3 công cộng của bạn có thể lấy được qua HTTP, HTTPS, hoặc BitTorrent. Phân tán các tệp nghe nhìn lớn từ tài khoản S3 của bạn sẽ trở lên rất đơn giản khi sử dụng BitTorrent; Amazon không chỉ tạo torrent cho đối tượng của bạn, mà còn lưu trữ (seed) nó.
Khóa (Keys)
Mỗi đối tượng lưu trữ trong một thùng S3 được định danh bởi một khóa duy nhất. Nó cũng giống như khái niệm tên tệp trong một thư mục trên hệ thống tệp của bạn. Tên tệp trong một thư mục trên đĩa cứng của bạn phải là duy nhất. Mỗi đối tượng trong một thùng chỉ có một khóa. Tên của thùng và khóa được sử dụng cùng nhau để cung cấp định danh duy nhất cho mỗi đối tượng lưu trữ trong S3.
Mọi đối tượng trong S3 đều có thể truy cập bằng cách sử dụng một địa chỉ URL kết hợp địa chỉ URL của S3, tên thùng và khóa duy nhất. Nếu bạn lưu trữ một đối tượng với khóa my_favorite_video.mov bên trong một thùng tên là prabhakar, đối tượng đó có thể được truy cập thông qua địa chỉ URL http://prabhakar.s3.amazonaws.com/ my_favorite_video.mov.
Mặc dù các khái niệm là đơn giản, như trong hình 1, các thùng, các đối tượng, các khóa cùng nhau cung cấp tính mềm dẻo cho việc xây dựng các giải pháp lưu trữ dữ liệu của bạn. Bạn có thể sử dụng những viên gạch móng này để lưu trữ dữ liệu một cách đơn giản trên S3, hoặc sử dụng tính mềm dẻo của chúng để xây dựng kho lưu trữ và các ứng dụng phức hợp trên S3 để cung cấp các tính năng mới.
Hình 1.1. Khái niệm của S3 Bảo mật:
Mỗi thùng và đối tượng được tạo trong S3 được bảo mật riêng cho tài khoản tạo ra chúng. Bạn phải cấp quyền truy cập cho người dùng khác và các khách hàng để họ có thể xem danh sách các đối tượng trong các thùng S3 của bạn hoặc tải dữ liệu được chứa trong chúng. Amazon S3 cung cấp các tính năng bảo mật sau để bảo vệ các thùng và các đối tượng trong thùng của bạn.
Sự chứng thực (Authentication)
Đảm bảo rằng yêu cầu đang gửi bởi người dùng mà sở hữu thùng hoặc đối tượng. Mỗi yêu cầu trên S3 phải bao gồm khóa truy cập Amazon Web Services xác định người dùng một cách duy nhất.
Sự cấp phép (Authorization)
Đảm bảo rằng người dùng đang cố gắng truy cập tới tài nguyên có quyền truy cập tới tài nguyên đó. Mỗi đối tượng S3 có một danh sách quản lý truy cập (access- control list - ACL) gắn với nó mà xác định một cách minh bạch các quyền và giới hạn cho tài nguyên đó. Bạn có thể cấp quyền truy cập tới tất cả các người dùng của Amazon Web Services hoặc tới một người dùng cụ thể được xác định bởi địa chỉ email, hoặc bạn có thể cấp quyền truy cập nặc danh cho mọi người dùng.
Mỗi yêu cầu E3 phải có chữ ký số của người dùng yêu cầu với một khóa bí mật của Amazon Web Services. Khi nhận được yêu cầu, S3 sẽ kiểm tra chữ ký để đảm bảo rằng yêu cầu đó không bị can thiệp trong quá trình luân chuyển.
Mã hóa (Encryption)
Bạn có thể truy cập S3 thông qua giao thức HTTPS để đảm bảo rằng dữ liệu được chuyển đi thông qua một kết nối được mã hóa.
Không từ chối (Nonrepudiation)
Mỗi yêu cầu S3 được dán tem thời gian (time-stamped) và phục vụ như chứng cớ của giao dịch.
Mỗi và mọi yêu cầu REST gửi tới S3 phải trải qua các bước cơ bản cần thiết cho việc bảo mật sau:
• Yêu cầu và các tham số cần thiết phải được gộp lại thành một chuỗi ký tự (string).
• Khóa truy cập bí mật Amazon Web Services của bạn phải được sử dụng để tạo một chữ ký băm xác thực (keyed-Hash Message Authentication Code - HMAC) của chuỗi yêu cầu.
• Chữ ký này được thêm vào như là một tham số của yêu cầu.
• Sau đó yêu cầu được chuyển tiếp đến Amazon S3.
• Amazon S3 sẽ kiểm tra xem nếu chữ ký được cung cấp có là một chữ ký băm xác thực hợp lệ của yêu cầu không.
• Nếu (và chỉ nếu) chữ ký là hợp lệ, thì Amazon S3 mới tiến hành xử lý yêu cầu.
3.2.2. Giá:
Phí sử dụng cho S3 được tính dựa trên ba tiêu chí, nó khác nhau dựa trên vị trí địa lý của các thùng của bạn:
• Tổng không gian lưu trữ được sử dụng, cái mà bao gồm kích thước thực của nội dung dữ liệu của bạn và dữ liệu thông tin gắn với nó. Đơn vị được sử dụng bởi S3 để xác định sự sử dụng không gian lưu trữ là GB/tháng. Số lượng byte của kho lưu trữ được sử dụng bởi tài khoản của bạn được cập nhật cho từng giờ, và đến cuối tháng, nó sẽ được chuyển đổi sang cả tháng. Bảng dưới đây cung cấp giá cho việc lưu trữ.
Vị trí giá
Mỹ $0.15 một tháng cho 1 GB được sử dụng Châu Âu $0.18 một tháng cho 1 GB được sử dụng
• Lượng dữ liệu hoặc băng thông được chuyển đi và đến S3. Nó bao gồm tất cả dữ liệu được tải lên và tải xuống từ S3. Việc chuyển dữ liệu giữa các thùng S3 và EC2 được đặt ở Mỹ là miễn phí. Truyền dữ liệu giữa EC2 và S3 ở châu Âu được tính theo phí truyền dữ liệu tiêu chuẩn, như sau.
Vị trí Giá
Mỹ $0.100 cho 1 GB — tất cả dữ liệu truyền đến
$0.170 cho 1 GB — 10 TB dữ liệu đầu tiên truyền đi trong tháng $0.130 cho 1 GB — 40 TB dữ liệu tiếp theo truyền đi trong tháng $0.110 cho 1 GB — 100 TB dữ liệu tiếp theo truyền đi trong tháng $0.100 cho 1 GB — dữ liệu truyền đi trong tháng vượt quá 150 TB
Châu Âu $0.100 cho 1 GB — tất cả dữ liệu truyền đến
$0.170 cho 1 GB — 10 TB dữ liệu đầu tiên truyền đi trong tháng $0.130 cho 1 GB — 40 TB dữ liệu tiếp theo truyền đi trong tháng $0.110 cho 1 GB — 100 TB dữ liệu tiếp theo truyền đi trong tháng $0.100 cho 1 GB — dữ liệu truyền đi trong tháng vượt quá 150 TB
• Số yêu cầu API được thực hiện. S3 tính phí cho mỗi yêu cầu sử dụng giao diện — để tạo các đối tượng, liệt kê các thùng, liệt kê các đối tượng, vân vân và vân vân. Việc xóa các đối tượng và thùng không bị tính phí. Phí một lần nữa lại khác nhau một chút dựa trên vị trí địa lý của thùng. Bảng sau đưa ra giá cho các yêu cầu API.
Vị trí Giá
Mỹ $0.01 cho 1,000 yêu cầu PUT, POST, hoặc LIST $0.01 cho 10,000 yêu cầu GET và các yêu cầu khác Miễn phí cho các yêu cầu xóa
Châu Âu $0.012 cho 1,000 yêu cầu PUT, POST, hoặc LIST $0.012 cho 10,000 yêu cầu GET và các yêu cầu khác Miễn phí cho các yêu cầu xóa
Tham khảo Amazon S3 để biết giá mới nhất. Bạn cũng có thể sử dụng máy tính AWS Simple Monthly Calculator để tính chi phí hàng tháng sử dụng dịch vụ S3 và các dịch vụ Amazon Web Services khác của bạn.
3.2.3. 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 mà bạn có thể sử dụng bất cứ khi nào để thư nghiệm và tương tác với S3.
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.
Kết nối tới S3
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 bài viết 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.
Amazon EC2 là dịch vụ Web cho phép bạn yêu cầu các máy ảo trong vòng một vài phút và dễ dàng thay đổi khả năng của bạn hoặc tải xuống dựa trên nhu cầu. Bạn chỉ cần phải trả chi phí cho khoảng thời gian mà bạn sử dụng. Nếu bạn muốn tăng khả năng tính toán của bạn nên, bạn có thể nhanh chóng tiếp cận khởi tạo máy áo và sau đó chấm dứt chúng khi mà nhu cầu của bạn giảm đi.
Những trường hợp mà dựa trên Linux® và có thể chạy trên bất kỳ ứng dụng nào hoặc phần mềm nào bạn muốn. Bạn có thực hiện điều khiển cho từng trường hợp cụ thể. Môi trường của EC2 là được xây dựng trên cùng mã nguồn mở Xen hypervisor, cái được phát triển tại trường Đại học Cambridge. Amazon cho phép bạn tạo ra hình ảnh máy Amazon (AMIs) cái thực hiện hành động như là các khuôn mẫu cho các ví dụ của bạn. Truy cập với các ví dụ có thể được điều khiển bằng việc xác định được các quyền cho phép. Bạn cũng có thể làm bất cứ cái gì bạn muốn với chúng tuy chỉ có một hạn chế duy nhất là yêu cầu bạn cần sử dụng dựa trên Linux. Thời gian gần đây, khi mà Open Solaris