AWS S3

Amazon Simple Storage Service (Amazon S3)html

     Amazon S3 提供了一個簡單 Web 服務接口,可用於隨時在 Web 上的任何位置存儲和檢索任何數量的數據。此服務讓全部開發人員都能訪問同一個具有高擴展性、可靠性、安全性和快速價廉的數據存儲基礎設施。java

Amazon S3的簡單操做:git

開發指南

1、建立請求

1. 使用 AWS 帳戶或 IAM 用戶憑證進行請求github

爲 AWS 開發工具包配置憑證的最簡單方法是使用 AWS 憑證文件,AWS 開發工具包會尋找您的本地 AWS 憑證文件。若是您使用 AWS Command Line Interface (AWS CLI),那麼您可能已經配置了本地 AWS 憑證文件。不然,請按照如下步驟設置憑證文件:安全

打開 IAM 控制檯 -> 建立新 IAM 用戶並賦予權限-> 下載csv -> 在本地計算機的主目錄/.aws下建立credentials空文件->將csv文件內容複製到credentials文件中ide

[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

AWS SDK for Java  --  要使用 AWS 帳戶或 IAM 用戶憑證向 Amazon S3 發出經身份驗證的請求,請執行如下操做:工具

  • 使用 AmazonS3ClientBuilder 類建立 AmazonS3Client 實例。開發工具

  • 執行 AmazonS3Client 方法之一,以向 Amazon S3 發送請求。客戶端將經過您提供的憑證生成所需的簽名並將其包含在請求中。您能夠在不提供安全憑證的狀況下建立 AmazonS3Client 客戶端。使用此客戶端發送的請求是匿名的請求,它們不帶簽名。若是爲不是公開可用的資源發送了匿名請求,Amazon S3 返回錯誤。網站

// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-s3-developer-guide/blob/master/LICENSE-SAMPLECODE.)

import java.io.IOException;
import java.util.List;

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;

public class MakingRequests {

    public static void main(String[] args) throws IOException {
        String clientRegion = "*** Client region ***";
        String bucketName = "*** Bucket name ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(clientRegion)
                    .build();
    
            // Get a list of objects in the bucket, two at a time, and 
            // print the name and size of each object.
            ListObjectsRequest listRequest = new ListObjectsRequest().withBucketName(bucketName).withMaxKeys(2);
            ObjectListing objects = s3Client.listObjects(listRequest);
            while(true) {
                List<S3ObjectSummary> summaries = objects.getObjectSummaries();
                for(S3ObjectSummary summary : summaries) {
                    System.out.printf("Object \"%s\" retrieved with size %d\n", summary.getKey(), summary.getSize());
                }
                if(objects.isTruncated()) {
                    objects = s3Client.listNextBatchOfObjects(objects);
                }
                else {
                    break;
                }
            }
        }
        catch(AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process 
            // it, so it returned an error response.
            e.printStackTrace();
        }
        catch(SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
View Code

2. 使用 IAM 用戶臨時憑證進行請求ui

AWS 帳戶或 IAM 用戶能夠請求臨時安全證書,而後使用它們向 Amazon S3 發送經身份驗證的請求。

使用 IAM 用戶臨時證書進行請求 - AWS SDK for Java

 

2、存儲桶

存儲桶是 Amazon S3 中用於存儲對象的容器。每一個對象都儲存在一個存儲桶中。例如,若是名爲 photos/puppy.jpg 的對象存儲在 johnsmith 存儲桶中,則可以使用 URL http://johnsmith.s3.amazonaws.com/photos/puppy.jpg 對該對象進行尋址。存儲桶有如下幾種用途:組織最高等級的 Amazon S3 命名空間、識別負責存儲和數據傳輸費用的帳戶、在訪問控制中發揮做用以及用做使用率報告的彙總單位。

1. 將存儲桶配置爲申請方付款

     一般,存儲桶擁有者將支付與他們的存儲桶相關聯的全部 Amazon S3 存儲和數據轉移費用。可是,存儲桶擁有者能夠將存儲桶配置爲申請方付款存儲桶。一般狀況下,當您想共享數據,而又不會產生與訪問數據等其餘操做相關聯的費用時,您能夠將存儲桶配置爲申請方付款。將存儲桶配置爲申請方付款存儲桶後,申請方必須在其請求中包含 x-amz-request-payer (在 POST、GET 和 HEAD 請求的標頭中,或在 REST 請求中做爲參數),以顯示他們知道請求和數據下載將產生費用。可是,在如下條件下會對存儲桶擁有者收取請求費用:

  • 申請方未在標頭中 (GET、HEAD 或 POST) 包含參數 x-amz-request-payer,或未在請求中將其做爲參數 (REST) (HTTP 代碼 403)。
  • 請求身份驗證失敗 (HTTP 代碼 403)。
  • 請求是匿名的 (HTTP 代碼 403)。
  • 請求是 SOAP 請求。

1)控制檯設置:在「Buckets」列表中單擊存儲桶名 -> 單擊「Properties」 -> 單擊「Requester Pays」 -> 選中 Enabled

2)API設:使用 PUT 請求在指定存儲桶上將 Payer 值設置爲 Requester您只能在存儲桶級別上設置申請方付款;您不能爲存儲桶內的特定對象設置申請方付款。您能夠隨時將存儲桶配置爲 BucketOwner 或 Requester。可是,須要注意的是可能會出現一些短暫延遲 (大約數分鐘),新配置值纔會生效。

PUT ?requestPayment HTTP/1.1
Host: [BucketName].s3.amazonaws.com
Content-Length: 173
Date: Wed, 01 Mar 2009 12:00:00 GMT
Authorization: AWS [Signature]

<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Payer>Requester</Payer>
</RequestPaymentConfiguration>

 

3、託管靜態網站

相關文章
相關標籤/搜索