PDF:

Điện toán đám mây với Amazon Web Services, Phần
2: Lưu trữ trong đám mây với Amazon Simple Storage
Service (S3)
Lưu trữ và lấy dữ liệu tin cậy, mềm dẻo, và rẻ
Prabhakar Chaganti
Kiến trúc sư trưởng
Ylastic, LLC
20 05 2009
Tìm hiểu về các khái niệm cơ bản của Amazon SimpleDB (SDB) và khám phá một số chức năng
được cung cấp bởi boto, một thư viện mã nguồn mở Python cho các tương tác với SDB. Trong
loạt bài viết về "Điện toán đám mây với Amazon Web Services" tìm hiểu về điện toán đám mây
bằng cách sử dụng các dịch vụ Web của Amazon. Tìm hiểu làm thế nào các dịch vụ cung cấp
cách thay thế hấp dẫn cho kiến trúc và xây dựng các ứng dụng đáng tin cậy và có thể mở rộng.
Bài này nghiên cứu sâu về các dịch vụ có tính mở rộng cao và phản hồi nhanh được cung cấp
bởi dịch vụ lưu trữ đơn giản của Amazon, tên là Amazon Simple Storage Service (S3). Tìm hiểu
các công cụ để tương tác với S3, và sử dụng các đoạn mã mẫu để thử nghiệm.
Xem thêm bài trong loạt bài này
Dịch vụ lưu trữ đơn giản của Amazon (Amazon Simple Storage Service)
Phần 1 Của loạt bài viết này giới thiệu về các nền tảng cơ bản của các dịch vụ Amazon Web
Services và giải thích cách bạn có thể sử dụng nền tảng ảo này để xây dụng các ứng dụng trên
web.
Trong bài viết này, tìm hiểu thêm về dịch vụ lưu trữ đơn giản của Amazon, Amazon Simple Storage
Service (S3). S3 là hệ thống lưu trữ dữ liệu nhanh và có thể mở rộng được trên internet giúp bạn
lưu trữ và lấy dữ liệu một cách đơn giản với bất cứ dung lượng nào, bất cứ khi nào và bất cứ đâu
trên thế giới. Bạn trả phí dựa trên dung lượng lưu trữ và băng thông mà bạn dùng. Không phí cài
đặt, không phí tối thiểu hay phí phụ trội.
Amazon cung cấp sự quản lý và duy trì của nền tảng lưu trữ, giúp bạn thoải mái tập trung vào các
chức năng quan trọng của hệ thống và ứng dụng của bạn. S3 là nền tảng công nghiệp mà luôn sẵn
sàng cho nhu cầu lưu trữ dữ liệu của bạn. Nó tuyệt vời cho:
© Copyright IBM Corporation 2009
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Nhẫn hiệu đăng ký
Trang 1 của 19
developerWorks®
ibm.com/developerWorks/vn/
• Lưu trữ dữ liệu cho các ứng dụng của bạn.
• Sao lưu dữ liệu cho doanh nghiệp hoặc cá nhân.
• Phân tán nhanh và rẻ các nội dung làm tiêu hao băng thông lớn tới khách hàng của bạn.
Tính năng của S3 bao gồm:
Tính ổn định
Nó được thiết kế để chịu được các hỏng hóc và phục hồi hệ thống rất nhanh với thời gian tối
thiểu. Amazon cung cấp một thỏa thuận cấp dịch vụ (service-level agreement - SLA) để duy trì
tính sẵn sàng ở mức 99.99 phần trăm.
Đơn giản, dễ dùng
S3 được xây dụng trên các khái niệm đơn giản và cung cấp tính mềm dẻo cao cho việc phát
triển các ứng dụng của bạn. Bạn có thể xây dựng các lược đồ lưu trữ phức tạp hơn, nếu cần,
bằng cách thêm các hàm vào các thành phần của S3.
Tính mở rộng
Thiết kế của S3 cung cấp một cấp độ cao về tính mở rộng và cho phép sự điều chỉnh dễ dàng
trong dịch vụ khi lượng truy cập vào ứng dụng web của bạn tăng đột biến với lưu lượng khổng
lồ.
Rẻ
Chi phí sử dụng S3 rất cạnh tranh với các giải pháp của công ty và cá nhân khác trên thị
trường.
Ba khái niệm nền tảng cho khung làm việc S3 là thùng (buckets), đối tượng (objects), và khóa
(keys).
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.
• Độ dài của tên tối thiểu là 3 và dài nhất là 255.
• 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.
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 2 của 19
ibm.com/developerWorks/vn/
developerWorks®
• 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
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.
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 3 của 19
developerWorks®
ibm.com/developerWorks/vn/
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. Khái niệm của S3
Nhật ký truy cập
Mỗi thùng trong S3 có thể có các bản ghi lịch sử truy cập mà chứa chi tiết về các yêu cầu tới một
đối tượng được chứa trong nó. Theo mặc định, bản ghi lịch sử truy cập bị tắt; bạn có thể bật nó lên
để ghi lại các truy cập cho mỗi thùng mà bạn muốn theo dõi. Mội bản ghi lịch sử truy cập chứa rất
nhiều thông tin chi tiết về yêu cầu, bao gồm kiểu yêu cầu, tài nguyên được yêu cầu, và thời gian mà
yêu cầu được xử lý.
Các nhật ký truy cập được cung cấp dưới định dạng nhật ký truy cập máy chủ của S3, nhưng có thể
được chuyển đổi một cách dễ dàng sang định dạng nhật ký tổ hợp của Apache. Sau đó chúng có
thể được phân tích bởi bất cứ công cụ thương mại hay mã mở nào, như là Webalizer, để cho bạn
một bản báo cáo mà con người có thể đọc được với các biểu đồ theo yêu cầu. Các báo cáo có thể
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 4 của 19
ibm.com/developerWorks/vn/
developerWorks®
hữu dụng cho việc tìm hiểu về cơ sở của khách hàng của bạn. Tìm các công cụ mà bạn có thể sử
dụng để xem các bản ghi lịch sử truy cập S3 trên Tài nguyên.
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.
Tính tích hợp (Integrity)
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.
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:
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 5 của 19
developerWorks®
ibm.com/developerWorks/vn/
• 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
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 6 của 19
ibm.com/developerWorks/vn/
developerWorks®
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.
Bắt đầu với Amazon Web Services và S3
Để 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 được xác thực bằng chữ ký số và chữ ký đó được gắn với yêu cầu.
Mỗi tài khoản 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:
1. Đăng nhập vào tài khoản Amazon Web Services của bạn.
2. Tìm đến trang chủ S3.
3. Nhấn vào Sign Up For This Web Service ở bên phải của trang.
4. 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 bài 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.
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 7 của 19
developerWorks®
ibm.com/developerWorks/vn/
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ải bản phát hành mới nhất của JetS3t.
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.
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 8 của 19
ibm.com/developerWorks/vn/
developerWorks®
• 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.
Ví dụ 1. Tạo một RestS3Service
String awsAccessKey = ”Your AWS access key”;
String awsSecretKey = “Your AWS Secret key”;
// use your AWS keys to create a credentials object
AWSCredentials awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey);
// create the service object with our AWS credentials
S3Service s3Service = new RestS3Service(awsCredentials);
Quản lý các thùng của bạn
Khái niệm của một thùng được đóng gói bởi org.jets3t.service.model.S3Bucket, cái mà mở rộng
lớp org.jets3t.service.model.BaseS3Object. Lớp này là lớp cha của cả thùng và đối tượng trong
mô hình JetS3t. Mỗi đối tượng S3Bucket cung cấp một phương thức, toString(), bên cạnh các
phương thức tiền bối khác, mà có thể được sử dụng để in thông tin cho một thùng (tên và vị trí địa
lý của thùng, thời điểm thùng được tạo, tên chủ sở hữu, và bất kỳ dữ liệu thông tin nào được gắn với
thùng).
Ví dụ 2. Liệt kê các thùng
// 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 thùng đượ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ó.
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 9 của 19
developerWorks®
ibm.com/developerWorks/vn/
Ví dụ 3. Tạo các thùng
// 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ụ 4. 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
s3ServiceMulti.deleteObjects(bucket, 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ụ 5. 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.
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 10 của 19
ibm.com/developerWorks/vn/
developerWorks®
Ví dụ 6. 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ụ 7. Ghi nhật ký cho các thùng trên S3
// get the bucket
S3Bucket bucket = getBucketFromName(s3Service, “my bucket”);
// is logging enabled?
S3BucketLoggingStatus loggingStatus = s3Service.getBucketLoggingStatus(bucketName);
System.out.println(loggingStatus);
// enable logging
S3BucketLoggingStatus newLoggingStatus = new S3BucketLoggingStatus();
// set a prefix for your log files
newLoggingStatus.setLogfilePrefix(logFilePrefix);
// set the target bucket name
newLoggingStatus.setTargetBucketName(bucketName);
// give the log_delivery group permissions to read and write from the bucket
AccessControlList acl = s3Service.getBucketAcl(bucket);
acl.grantPermission(GroupGrantee.LOG_DELIVERY, Permission.PERMISSION_WRITE);
acl.grantPermission(GroupGrantee.LOG_DELIVERY, Permission.PERMISSION_READ_ACP);
bucket.setAcl(acl);
// save the changed ACL for the bucket to S3
s3Service.putBucketAcl(bucket);
// save the changes to the bucket logging
s3Service.setBucketLoggingStatus(bucketName, newLoggingStatus, true);
System.out.println("The bucket logging status is now enabled.");
Quản lý các đối tượng của bạn
Mỗi đối tượng chứa trong một thùng được biểu diễn bởi một org.jets3t.service.model.S3Object.
Mỗi đối tượng S3Bucket cung cấp một phương thức toString() mà có thể được dùng để in các chi
tiết quan trọng cho một đối tượng:
• Tên của khóa
• Tên của thùng chứa
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 11 của 19
developerWorks®
ibm.com/developerWorks/vn/
• Ngày chỉnh sửa cuối cùng
• Bất cứ thông tin nào được gắn với đối tượng
Nó cũng cung cấp các phương thức để truy cập hàng loạt thuộc tính của một đối tượng, cùng với
dữ liệu thông tin của nó.
Ví dụ 8. Liệt kê các đối tượng
// list objects in a bucket.
S3Object[] objects = s3Service.listObjects(bucket);
// print out the object details
if (objects.length == 0) {
System.out.println("No objects found");
} else {
for (S3Object o : objects) {
System.out.println(o);
}
}
Bạn có thể lọc danh sách đối tượng nhận được bằng cách cung cấp một tiền tố để lọc.
Ví dụ 9. Lọc danh sách các đối tượng
// list objects matching a prefix.
S3Object[] filteredObjects = s3Service.listObjects(bucket, “myprefix”, null);
// print out the object details
if (filteredObjects.length == 0) {
System.out.println("No objects found");
} else {
for (S3Object o : filteredObjects) {
System.out.println(o);
}
}
Mỗi đối tượng có thể có dữ liệu thông tin gắn với nó, như là kiểu nội dung, ngày chỉnh sửa, ... Bạn
cũng có thể gắn dữ liệu thông tin cụ thể liên quan đến ứng dụng của bạn vào một đối tượng.
Ví dụ 10. Lấy dữ liệu thông tiên của đối tượng
// get the bucket
S3Bucket bucket = getBucketFromName(s3Service, bucketName);
// getobjects matching a prefix
S3Object[] filteredObjects = s3Service.listObjects(bucket, “myprefix”, null);
if (filteredObjects.length == 0) {
System.out.println("No matching objects found");
}else {
// get the metadata for multiple objects.
S3Object[] objectsWithHeadDetails = s3ServiceMulti.getObjectsHeads(bucket,
filteredObjects);
// print out the metadata
for (S3Object o : objectsWithHeadDetails) {
System.out.println(o);
}
}
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 12 của 19
ibm.com/developerWorks/vn/
developerWorks®
Mỗi đối tượng mới được khởi tạo là riêng tư theo mặc định. Bạn có thể sử dụng JetS3t để tạo một
địa chỉ URL được ký mà bất cứ ai cũng có thể sử dụng để tải dữ liệu của đối tượng về. Địa chỉ URL
có thể được tạo để có hiệu lực chỉ trong một khoảng thời gian nhất định, nó sẽ hết hiệu lực khi quá
hạn thời gian. Đối tượng vẫn là riêng tư, nhưng bạn có thể đưa URL cho bất cứ ai để họ tải nó về
trong một khoảng thời gian ngắn.
Ví dụ 11. Tạo một địa chỉ URL được ký để tải đối tượng về
// get the bucket
S3Bucket bucket = getBucketFromName(s3Service, bucketName);
// how long should this URL be valid?
int duration = Integer.parseInt(tokens.nextToken());
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, duration);
Date expiryDate = cal.getTime();
// create the signed url
String url = S3Service.createSignedGetUrl(bucketName, objectKey,
awsCredentials, expiryDate);
System.out.println("You can use this public URL to access this file for the next "
+ duration + " min - " + url);
S3 cho phép một đối tượng có dung lượng tối đa là 5 GB. Nếu các đối tượng của bạn có dung
lượng lớn hơn thế, bạn sẽ cần chia chúng thành nhiều tệp, mỗi tệp có kích thước 5 GB, sau đó tải
tất cả các phần lên S3.
Ví dụ 12. Tải đối tượng lên S3
// get the bucket
S3Bucket bucket = getBucketFromName(s3Service, bucketName);
// create an object with the file data
File fileData = new File(“/my_file_to_upload”);
S3Object fileObject = new S3Object(bucket, fileData);
// put the data on S3
s3Service.putObject(bucket, fileObject);
System.out.println("Successfully uploaded object - " + fileObject);
JetS3t cung cấp một lớp DownloadPackage để dễ dàng gắn kết dữ liệu từ một đối tượng S3 với một
tệp cục bộ và tự động ghi dữ liệu vào nó. Bạn có thể sử dụng tính năng này để tải các đối tượng từ
S3 về một cách dễ dàng.
Ví dụ 13. Tải về từ S3
// get the bucket
S3Bucket bucket = getBucketFromName(s3Service, bucketName);
// get the object
S3Object fileObject = s3Service.getObject(bucket, fileName);
// associate a file with the object data
DownloadPackage[] downloadPackages = new DownloadPackage[1];
downloadPackages[0] = new DownloadPackage(fileObject,
new File(fileObject.getKey()));
// download objects to the associated files
s3ServiceMulti.downloadObjects(bucket, downloadPackages);
System.out.println("Successfully retrieved object to current directory");
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 13 của 19
developerWorks®
ibm.com/developerWorks/vn/
Phần này đã xem xét một số hàm cơ bản cung cấp bởi bộ công cụ JetS3t, và cách sử dụng chúng
để tương tác với S3. Xem Tài nguyên để biết thêm về dịch vụ S3 và một bài thảo luận chi tiết về bộ
công cụ JetS3t.
Shell của S3
Các tương tác với S3, thông qua các đoạn mã nhỏ, có thể được đặt cùng với nhau để sử dụng sau
này bằng cách tạo một chương trình Shell của S3 mà bạn có thể thực thi trên cửa sổ dòng lệnh. Bạn
sẽ tạo một chương trình Java đơn giản mà chấp nhận khóa truy cập Amazon Web Services và khóa
bí mật như các tham số, và trả lại một dấu nhắc dòng lệnh. Sau đó, bạn có thể gõ một ký tự hoặc
vài kí tự, như là b để liệt kê các thùng hoặc om để liệt kê các đối tượng mà thỏa mãn một tiền tố cụ
thể. Sử dụng chương trình này để thực nghiệm.
Chương trình shell chứa một hàm main() bao gồm các đoạn mã nhỏ mà bạn đang dùng trong bài
viết này. Đoạn mã ví dụ cho chương trình shell S3 không được gộp ở đây. Mã nguồn đầy đủ của
Shell S3, cùng với các phụ thuộc của nó, có trong phần Tải về. Bạn có thể thực thi shell bằng cách
chạy tệp devworks-s3.jar.
Ví dụ 14. Thực thi Shell S3
java -jar devworks-s3.jar my_aws_access_key my_aws_secret_key
Bạn có thể gõ h 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ợ.
Hình 2. Hướng dẫn trong Shell S3
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.
Tổng kết
Trong bài viết này, bạn đã tìm hiểu một số khái niệm cơ bản ẩn sau dịch vụ S3 của Amazon. Bộ
công cụ JetS3t là một thư viện mã mở mà bạn có thể sử dụng để tương tác với S3. Bạn cũng đã
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 14 của 19
ibm.com/developerWorks/vn/
developerWorks®
học cách để tạo một Shell S3 đơn giản bằng cách sử dụng các đoạn mã nhỏ, cho nên bạn có thể
tiếp tục thực nghiệm một cách dễ dàng với S3 bằng cách sử dụng cửa sổ dòng lệnh.
Phẩn 3 của loạt bài "Điện toán đám mây với Amazon Web Services" giải thích cách sử dụng đám
mây điện toán Amazon Elastic Compute Cloud (EC2) để thực thi các máy chủ ảo trong đám mây.
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 15 của 19
developerWorks®
ibm.com/developerWorks/vn/
Các tải về
Mô tả
Mã ví dụ
Tên
Kích thước
devworks-s3.zip
2.93MB
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 16 của 19
ibm.com/developerWorks/vn/
developerWorks®
Tài nguyên
Học tập
• Tham khảo các phần khác trong loạt bài này:
• Phần 1, "Giới thiệu"
• Phần 3, "Các máy chủ theo yêu cầu với EC2"
• Phần 4, "Truyền tin tin cậy với SQS"
• Phần 5, "Xử lý tập hợp dữ liệu trong đám mây với SimpleDB"
• Tìm hiểu về đặc trưng của Amazon Web Services:
• Amazon Simple Storage Service (S3)
• Amazon Elastic Compute Cloud (EC2)
• Amazon Simple Queue Service (SQS)
• Amazon SimpleDB (SDB)
• Service Health Dashboard được cập nhật của nhóm Amazon liên quan đến bất kỳ vấn đề
nào với các dịch vụ.
• Đăng ký để có tài khoản của Amazon Web Services.
• Amazon Web Services Developer Connection là cửa ngõ tới tất cả các tài nguyên phát triển.
• Đọc blog để cập nhật thông tin về Amazon Web Services.
• 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à báo cáo
sử dụng của tài khoản, và chỉnh sửa thông tin hồ sơ tại trang thông tin tài khoản Amazon Web
Services.
• Các tài nguyên kỹ thuật của S3 chứa các tài liệu kỹ thuật, hướng dẫn sử dụng, và các bài viết
khác.
• Amazon S3 chứa thông tin về giá cả mới nhất. Sử dụng máy tính AWS Simple Monthly
Calculator để tính toán phí sử dụng hàng tháng của bạn.
• Xem Hướng dẫn cho nhà phát triển S3 để biết thêm chi tiết.
• Tham khảo thỏa thuận sử dụng dịch vụ Service Level Agreement (SLA) cho S3.
• Trang tài nguyên S3stats chứa các đường dẫn về việc xử lý các bản ghi nhật ký của S3. Các
nhật ký ở định dạng S3 Server Access Log, nhưng có thể dễ dàng chuyển đổi sang định dạng
Apache Combined Log, sau đó dễ dàng được phân tích bởi bất cứ công cụ phân tích nhật ký
thương mại hay mã mở nào như là Webalizer.
• Tìm hiểu về JetS3t, một bộ công cụ Java mã mở cho Amazon S3, được phát triển bởi James
Murty. Xem tài liệu của bộ công cụ, và các giải thích chi tiết về các tham số trong hướng dẫn
cấu hình.
• Nhận RSS feed của loạt bài này.
• Lấy các tài nguyên cần thiết để nâng cao kỹ năng của bạn ở Architecture area on
developerWorks.
• Duyệt kho sách công nghệ để tìm các quyển sách về chủ đề này và các chủ đề khác.
Lấy sản phẩm và công nghệ
• Tải JetS3t và các công cụ khác.
• Tải các phiên bản dùng thử của các sản phẩm của IBM và thực hành trên các công cụ phát
triển ứng dụng và các sản phẩm lớp giữa từ IBM® DB2®, Lotus®, Rational®, Tivoli®, và
WebSphere®.
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 17 của 19
developerWorks®
ibm.com/developerWorks/vn/
Thảo luận
• Tham khảo developerWorks blogs và tham gia cộng đồng developerWorks.
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 18 của 19
ibm.com/developerWorks/vn/
developerWorks®
Đôi nét về tác giả
Prabhakar Chaganti
Prabhakar Chaganti là CTO của Ylastic, là người đầu tiên thực hiện xây dựng một
giao diện thống nhất cho các nhà kiến trúc sư, nhà quản lý và người giám sát của môi
trường điện toán đám mây AWS: EC2, S3, SQS và SimpleDB. Ông cũng là tác giả của
hai trong số các cuốn sách được xuất bản gần đây, là Xen Virtualization và GWT Java
AJAX Programing. Đồng thời ông cũng giành được giải thưởng cao nhất cho hầu hết
các sáng tạo ứng dụng máy ảo trong VMware Global Virtual Appliance Challenge
© Copyright IBM Corporation 2009
(www.ibm.com/legal/copytrade.shtml)
Nhẫn hiệu đăng ký
(www.ibm.com/developerworks/vn/ibm/trademarks/)
Điện toán đám mây với Amazon Web Services, Phần 2: Lưu trữ
trong đám mây với Amazon Simple Storage Service (S3)
Trang 19 của 19
Similar pages
PDF