用 Amazon Web Services 进行云计算,第 2 部分: 用 Amazon Simple Storage Service (S3) 在云中存储数据
用 Amazon Web Services 進行云計算,第 2 部分: 用 Amazon Simple Storage Service (S3) 在云中存儲數據
簡介:?學習基本的 Amazon SimpleDB (SDB) 概念,研究 boto(一個用于與 SDB 交互的開放源碼 Python 庫)提供的一些功能。在這個 “用 Amazon Web Services 進行云計算” 系列中,學習如何使用 Amazon Web Services 進行云計算。了解這些服務如何為設計和構建可伸縮、可靠的應用程序提供一種可選方案。本文討論 Amazon Simple Storage Service (S3) 提供的可伸縮、高響應性的服務。了解用于與 S3 交互的工具,使用代碼示例構建一個簡單的 shell。
查看本系列更多內容
云計算空間
您是否希望隨時獲取最新的云計算消息?是否想得到云計算相關的技術知識?developerWorks 云計算空間就是這樣一個云計算信息資源的門戶,在這里您可以了解來自 IBM 和業界其他媒體的最新信息,并且得到如何在云環境中使用 IBM 軟件的入門知識。
IBM 在 Amazon EC2 云計算環境中提供了 DB2、Informix、Lotus、WebSphere 等方面的 AMI 鏡像資源。您只需按使用量支付少量費用,就可以使用到云上的數據、門戶、Web 內容管理、情景應用等服務。歡迎您隨時訪問?云計算空間,獲取更多信息。
Amazon Simple Storage Service
本系列的?第 1 部分?介紹了 Amazon Web Services 的構建塊,解釋了如何使用這個虛擬基礎設施構建 Web 范圍的系統。
在本文中,學習關于 Amazon Simple Storage Service (S3) 的更多知識。S3 是一個高度可伸縮的快速的 Internet 數據存儲系統,用戶可以從任何地方在任何時候輕松地存儲和獲取任意數量的數據。只需根據實際使用的存儲和帶寬付費。沒有安裝成本、最低成本或其他間接費用。
Amazon 負責對存儲基礎設施進行管理和維護,這使您能夠把注意力集中在系統和應用程序的核心功能上。S3 是一個具有工業強度的平臺,能夠輕松地滿足您的數據存儲需求。它能夠:
- 存儲應用程序的數據。
- 執行個人或企業備份。
- 把媒體和需要很大帶寬的其他內容快速且低成本地分發給您的客戶。
S3 的特性包括:
可靠性支撐 S3 框架的三個基本概念是?bucket、對象?和鍵。
bucket
bucket?是基本構建塊。存儲在 Amazon S3 中的每個對象都包含在一個 bucket 中。可以認為 bucket 相當于文件系統上的文件夾(即目錄)。文件夾和 bucket 之間的主要差異之一是,每個 bucket 及其內容都可以通過 URL 訪問。例如,如果有一個名為 “prabhakar” 的 bucket,就可以使用 URL http://prabhakar.s3.amazonaws.com 訪問它。
Each S3 賬戶可以包含最多 100 個 bucket。bucket 不能相互嵌套,所以不能在 bucket 中創建 bucket。在創建 bucket 時,可以指定位置限制,從而影響 bucket 的地理位置。這會自動地確保在這個 bucket 中存儲的所有對象都存儲在指定的地理位置。目前,可以把 bucket 放在美國或歐盟。如果在創建 bucket 時沒有指定位置,那么 bucket 及其內容會存儲在最接近您帳戶的賬單地址的地方。
bucket 名稱必須符合下面的 S3 規定:
- 名稱必須以數字或字母開頭。
- 名稱的長度必須在 3 到 255 個字符之間。
- 有效的名稱只能包含小寫字母、數字、點號、下劃線和連字符。
- 盡管名稱可以包含數字和點號,但是不能采用 IP 地址格式。例如,不能把 bucket 命名為 192.168.1.254。
- bucket 名稱空間在 S3 中的所有賬戶的所有 bucket 之間共享。bucket 名稱必須在整個 S3 中是惟一的。
如果要通過 URL 訪問 bucket 包含的對象,bucket 名稱還必須符合以下規定:
- bucket 名稱必須不包含下劃線。
- 名稱的長度必須在 3 到 63 個字符之間。
- 名稱不能以連字符結尾。例如,myfavorite-.bucket.com 是無效的。
- 在名稱中點號的旁邊不能有連字符。所以 my-.bucket.com 是無效的。
可以對 bucket 使用域名約定,比如 media.yourdomain.com,從而把現有的 Web 域或子域映射到 Amazon S3。通過添加指向 S3 的 DNS CNAME 條目進行實際的映射。這種方案的主要優點是,可以在下載文件的 URL 中使用自己的域名。CNAME 映射負責轉換 bucket 的 S3 地址。例如,http://media.yourdomain.com.s3.amazonaws.com 會轉換成更友好的 http://media.yourdomain.com。
對象
對象?包含存儲在 S3 中 bucket 中的數據。可以把對象看作要存儲的文件。存儲的每個對象由兩個實體組成:數據和元數據。數據是要實際存儲的東西,比如 PDF 文件、Word 文檔、視頻文件等。存儲的數據還有相關聯的元數據,元數據用于描述對象。例如,存儲的對象的內容類型、最后一次修改對象的日期以及應用程序特有的其他元數據。在把對象發送給 S3 時,由開發人員以鍵-值對的形式指定對象的元數據。
S3 對于 bucket 的數量有限制,但是對于對象的數量沒有限制。可以在 bucket 中存儲任意數量的對象,每個對象可以包含最多 5 GB 數據。
對于可公共訪問的 S3 對象,可以使用 HTTP、HTTPS 或 BitTorrent 獲取其中的數據。通過使用 BitTorrent,可以非常簡便地從 S3 賬戶分發大型媒體文件;Amazon 不僅會創建對象的 torrent 文件,還會作為它的種子。
鍵
在 S3 bucket 中存儲的每個對象由一個惟一的鍵標識。這在概念上與文件系統文件夾中的文件名相似。在硬盤上的文件夾中,文件名必須在文件夾中是惟一的。bucket 中的每個對象必須有且只有一個鍵。bucket 名稱和對象的鍵共同組成 S3 中存儲的對象的惟一標識。
可以使用 URL 訪問 S3 中的每個對象,這個 URL 由 S3 服務 URL、bucket 名稱和惟一的鍵組成。如果在名為 prabhakar 的 bucket 中存儲一個鍵為 my_favorite_video.mov 的對象,那么可以使用 URL http://prabhakar.s3.amazonaws.com/my_favorite_video.mov 訪問這個對象。
盡管概念很簡單(如圖 1 所示),但是 bucket、對象和鍵共同為構建數據存儲解決方案提供很強的靈活性。可以使用這些構建塊簡便地在 S3 中存儲數據,也可以利用其靈活性,在 S3 之上構建更復雜的存儲和應用程序,提供更多功能。
圖 1. S3 的概念視圖
?
回頁首
訪問日志記錄
每個 S3 bucket 可以有訪問日志記錄,其中包含每個對象請求的詳細信息。在默認情況下,日志記錄是關閉的;對于希望跟蹤的每個 Amazon S3 bucket,必須顯式地啟用日志記錄。訪問日志記錄包含關于請求的大量詳細信息,包括請求類型、請求的資源和處理請求的日期和時間。
日志采用?S3 Server Access Log Format,但是很容易轉換為?Apache Combined Log Format。然后,可以使用任何開放源碼或商業日志分析工具(比如?Webalizer)輕松地解析它們,從而提供適合人閱讀的報告和漂亮的圖表。可以通過報告了解訪問文件的客戶群。關于可以處理 S3 日志記錄的工具的信息見?參考資料。
回頁首
安全性
在 S3 中創建的每個 bucket 和對象都是創建它們的用戶賬戶私有的。必須顯式地把權限授予其他用戶和客戶,這樣他們才能看到 S3 bucket 中的對象列表和下載其中的數據。Amazon S3 提供下面的安全特性,從而保護 bucket 和其中的對象。
身份驗證對 S3 的每個 REST 請求必須經歷下面的標準步驟以確保安全性:
- 必須把請求和所需的所有參數組合為一個字符串。
- 必須使用 Amazon Web Services 密鑰創建請求字符串的 Hash Message Authentication Code (HMAC) 簽名散列值。
- 把這個計算出的簽名本身作為參數添加到請求中。
- 然后把請求發給 Amazon S3。
- Amazon S3 檢查提供的簽名是否是請求的有效 HMAC 散列值。
- 只有在簽名有效時,Amazon S3 才會處理這個請求。
回頁首
Amazon Web Services 和 S3 入門
要想開始使用 S3,需要注冊一個?Amazon Web Services 賬戶。您會得到一個 Amazon Web Services 賬號、安全訪問密鑰以及 x.509 安全證書,在開始使用各種庫和工具與 S3 通信時需要這些密鑰和安全證書。
與任何 Amazon Web Services 的所有通信都要通過 SOAP 接口或查詢/REST 接口。通過這兩個接口發送的請求消息必須由發送請求的用戶進行數字簽名,從而確保消息沒有在傳輸過程中被篡改,并確保它們確實來自發送請求的用戶。這是 Amazon Web Services API 使用過程的最基本部分。每個請求必須?進行數字簽名并把簽名附加到請求上。
每個 Amazon Web Services 用戶賬戶與下面的安全憑證相關聯:
- 訪問鍵 ID,用于識別通過查詢/REST 接口發出請求的用戶。
- 安全訪問密鑰,用于在通過查詢接口發出請求時計算數字簽名。
- 公共和私有 x.509 安全證書,用于在使用 SOAP 時進行簽名和身份驗證。
在?Web Services Account information?頁面上,可以管理密鑰和證書、重新生成它們、查看賬戶活動和使用情況報告以及修改個人信息。
在成功地注冊 Amazon Web Services 賬戶之后,需要按照以下步驟為賬戶啟用 Amazon S3 服務:
本文中的示例使用查詢/REST 接口與 S3 通信。需要獲得自己的訪問鍵。可以通過在?Web Services Account information?頁面上選擇View Access Key Identifiers?獲得訪問鍵。現在設置 Amazon Web Services 并為賬戶啟用 S3 服務。
回頁首
與 S3 交互
為了學習與 S3 交互,可以使用 Amazon、第三方或獨立開發人員提供的庫。本文并不深入討論與 S3 的通信的細節,比如如何對請求進行簽名、如何構建用來封裝數據的 XML 文檔以及對 S3 發送和接收的參數。我們使用庫提供的高層接口,讓庫處理所有細節。更多信息請查閱?S3 開發人員指南。
我們將使用開放源碼的 Java? 庫 JetS3t 與 S3 交互,通過一些代碼片段了解它的 API。在本文末尾,將把這些片段組合起來,實現一些有意義的功能:一個簡單方便的 S3 shell,可以隨時使用它與 S3 交互。
JetS3t
JetS3t?是一個用于與 S3 交互的開放源碼 Java 工具箱。它不僅僅是一個庫。它的發行版包含幾個非常有用的與 S3 相關的工具,一般 S3 用戶和在 S3 之上構建應用程序的服務提供商都可以使用它們。JetS3t 包含:
Cockpit下載?JetS3t?的最新版本。 當然,可以使用這些 GUI 應用程序之一與 S3 交互,但是這對于開發與 S3 交互的應用程序沒什么幫助。可以?下載?本文的完整源代碼,這是一個壓縮的存檔文件,其中包含一個準備就緒的 Netbeans 項目,可以把它導入自己的工作空間。
連接 S3
JetS3t 提供一個名為?org.jets3t.service.S3Service?的抽象類,實現特定接口(比如 REST 或 SOAP)的類必須擴展它。JetS3t 提供兩個用于連接 S3 和與 S3 交互的實現:
- org.jets3t.service.impl.rest.httpclient.RestS3Service?通過 REST 接口與 S3 通信。
- org.jets3t.service.impl.soap.axis.SoapS3Service?通過 SOAP 接口使用 Apache Axis 1.4 與 S3 通信。
JetS3t 使用名為 jets3t.properties 的文件配置在與 S3 通信時使用的各種參數。本文中的示例使用發行版附帶的默認 jets3t.properties。JetS3t?configuration guide?詳細解釋了這些參數。
在本文中,將使用 RestS3Service 連接 S3。通過以?AWSCredentials?對象的形式提供 Amazon Web Services 訪問鍵,可以創建一個新的 RestS3Service 對象。請記住,本文中的代碼片段只用于演示 API 的使用方法。要想運行這些片段,必須導入所需的所有類。正確的導入語句請參考?下載?包中的源代碼。更簡單的方法是,把提供的 Netbeans 項目導入自己的工作空間,這樣就能夠輕松地訪問所有源代碼。
清單 1. 創建一個新的 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); |
管理 bucket
bucket 的概念由?org.jets3t.service.model.S3Bucket?封裝,這個類擴展?org.jets3t.service.model.BaseS3Object?類。這個類是 JetS3t 模型中 bucket 和對象的父類。除了各種訪問器方法之外,每個?S3Bucket?對象還提供一個?toString()?方法,可以使用它輸出 bucket 的重要信息(bucket 的名稱和地理位置,創建 bucket 的日期,所有者的姓名,與這個 bucket 相關聯的所有元數據)。
清單 2. 列出 bucket
| // 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); } |
可以通過提供惟一的 bucket 名稱創建新的 bucket。bucket 的名稱空間由所有用戶賬戶共享,所以有時候找到惟一的名稱可能有困難。還可以指定希望把 bucket 及其包含的對象放在哪里。
清單 3. 創建 bucket
| // 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); |
在刪除 bucket 之前,必須刪除其中包含的所有對象,否則會引發異常。RestS3Service?類適合處理單一對象。如果需要處理多個對象,最好考慮使用多線程方式以提高速度。JetS3t 提供用于此目的的?org.jets3t.service.multithread.S3ServiceSimpleMulti?類。可以使用這個類包裝現有的?s3Service?對象,就可以充分利用多處理器的能力。這對于刪除 bucket 中的所有對象很方便。
清單 4. 刪除 bucket
| // 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); |
每個 bucket 與一個 ACL 相關聯,ACL 決定 bucket 的授權和提供給其他用戶的訪問級別。可以獲取 ACL 并輸出它提供的授權。
清單 5. 獲取 bucket 的 ACL
| // get the bucket S3Bucket bucket = getBucketFromName(s3Service, “my bucket”);// get the ACL and print it AccessControlList acl = s3Service.getBucketAcl(bucket); System.out.println(acl); |
在新創建的 bucket 和對象上,默認權限指定它們是所有者私有的。可以修改 bucket 的 ACL,向一組用戶授予讀和寫權限,或者對 bucket 的完全控制權。
清單 6. 公開 bucket 及其內容
| // 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); |
很容易為 bucket 啟用日志記錄和獲取當前的日志記錄狀態。啟用日志記錄之后,會在 S3 中存儲這個 bucket 中每個文件的詳細訪問日志。您的 S3 賬戶要為日志占用的存儲空間付費。
清單 7. S3 bucket 的日志記錄
| // 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."); |
管理對象
bucket 中的每個對象由?org.jets3t.service.model.S3Object?表示。每個?S3Object?對象提供一個?toString()?方法,可以使用它輸出對象的重要信息:
- 鍵的名稱
- 包含它的 bucket 的名稱
- 最后一次修改對象的日期
- 與對象相關聯的所有元數據
清單 8. 列出對象
| // 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);} } |
可以通過提供要匹配的前綴來篩選獲取的對象列表。
清單 9. 篩選對象列表
| // 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);} } |
每個對象可以有相關聯的元數據,比如內容類型、修改的日期等等。還可以把應用程序特有的定制元數據與對象關聯起來。
清單 10. 獲取對象的元數據
| // 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 metadatafor (S3Object o : objectsWithHeadDetails) {System.out.println(o);} } |
在默認情況下,每個新創建的對象都是私有的。可以使用 JetS3t 生成一個帶簽名的 URL,其他用戶可以使用它下載對象數據。這個 URL 只在特定的時間段內有效,在此之后它自動地過期。對象仍然是私有的,但是可以把 URL 提供給任何人,讓他們能夠在一段時間內下載對象。
清單 11. 生成用于下載對象的帶簽名的 URL
| // 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 允許 bucket 中的每個對象最多包含 5 GB 數據。如果對象超過這個限制,就需要把對象分割為多個不超過 5 GB 的文件,然后把所有部分上傳給 S3。
清單 12. 上傳到 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 提供一個?DownloadPackage?類,它可以方便地把 S3 對象中的數據與本地文件關聯起來,自動地把數據保存到文件中。可以使用這個特性輕松地從 S3 下載對象。
清單 13. 從 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"); |
本節討論了 JetS3t 工具箱提供的一些基本功能,以及如何使用它們與 S3 交互。關于 S3 服務和 JetS3t 工具箱的更多信息請參見?參考資料。
S3 shell
目前為止,我們通過代碼片段了解了與 S3 的交互。可以把這些片段組合起來,創建一個可以從命令行運行的簡單的 S3 shell 程序。我們將創建一個簡單的 Java 程序,它通過參數接收 Amazon Web Services 訪問鍵和密鑰,返回一個控制臺提示。然后,可以輸入一個或幾個字母,比如?b(列出 bucket)或?om(列出與特定前綴匹配的對象)。使用這個程序體驗 S3 服務。
這個 shell 程序包含一個?main()?方法,它的實現由本文中的代碼片段組成。為了節省篇幅,這里沒有給出 S3 shell 的代碼清單。完整的 S3 shell 源代碼和它依賴的文件可以在?下載?中找到。只需執行 devworks-s3.jar 文件,即可運行這個 shell。
清單 14. 運行 S3 shell
| java -jar devworks-s3.jar my_aws_access_key my_aws_secret_key |
在任何時候在 S3 shell 中輸入?h,就會列出支持的命令。
圖 2. S3 shell 中的幫助
?
這個 S3 shell 中已經添加了一些有用的方法。可以在其中添加其他功能,讓 shell 更適合您的需求。
回頁首
結束語
在本文中,了解了 Amazon S3 服務的一些基本概念。學習了用于與 S3 交互的開放源碼庫 JetS3t。還學習了如何使用示例代碼片段創建一個簡單的 S3 shell,讓您可以使用命令行輕松地體驗 S3 服務。
這個 “用 Amazon Web Services 進行云計算” 系列的?第 3 部分?解釋如何使用 Amazon Elastic Compute Cloud (EC2) 在云中運行虛擬服務器。
回頁首
下載
| 本文的示例代碼 | devworks-s3.zip | 2.93MB | HTTP |
關于下載方法的信息
參考資料
學習
- 閱讀本系列的其他部分:
- 第 1 部分 “簡介”
- 第 3 部分 “用 EC2 根據需要提供服務器”
- 第 4 部分 “用 SQS 進行可靠的消息傳遞”
- 第 5 部分 “用 SimpleDB 在云中處理數據集”
- 了解各種 Amazon Web Services 的相關信息:
- Amazon Simple Storage Service (S3)
- Amazon Elastic Compute Cloud (EC2)
- Amazon Simple Queue Service (SQS)
- Amazon SimpleDB (SDB)
- 由 Amazon 團隊負責更新的 Service Health?Dashboard?提供關于服務遇到的各種問題的信息。
- 注冊?一個 Amazon Web Services 賬戶。?
- Amazon Web Services?Developer Connection?提供開發人員需要的所有參考資料。?
- 閱讀?博客,了解 Amazon Web Services 的最新動態。
- 在?Web Services Account 信息頁面?上,可以管理密鑰和證書、重新生成它們、查看賬戶活動和使用情況報告以及修改個人信息。
- S3 技術資源?提供 Amazon Web Services 技術文檔、用戶指南和其他參考資料。
- Amazon S3?提供最新的定價信息。可以使用?AWS Simple Monthly Calculator?工具計算 S3 和其他 Amazon Web Services 的每月使用成本。
- 通過?S3 開發人員指南?了解更多信息。
- 查閱 S3 的?Service Level Agreement (SLA)。
- S3stats 資源頁面?提供幾個處理和查看 S3 日志記錄的鏈接。日志采用?S3 Server Access Log Format?格式,但是很容易轉換為?Apache Combined Log Format,任何開放源碼或商業日志分析工具都可以輕松地解析這種格式,比如?Webalizer。
- 了解?JetS3t,這是?James Murty?為 Amazon S3 開發的一種開放源碼 Java 工具箱。查看這個工具箱的?文檔,通過?配置指南詳細了解參數的作用。
- 在?developerWorks 上的體系結構專區?尋找提高體系結構方面的技能所需的參考資料。?
- 在?技術書店?瀏覽關于這些主題和其他技術主題的圖書。?
獲得產品和技術
- 下載?JetS3t?和其他工具。
- 下載?IBM 產品評估版,試用這些來自 DB2?、Lotus?、Rational?、Tivoli? 和 WebSphere? 的應用程序開發工具和中間件產品。
討論
- 參與?developerWorks blogs?并加入?developerWorks 社區。?
總結
以上是生活随笔為你收集整理的用 Amazon Web Services 进行云计算,第 2 部分: 用 Amazon Simple Storage Service (S3) 在云中存储数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 加载驱动时提示“驱动服务启动失败”或者“
- 下一篇: [VBS]_[活动分组程序]