zoukankan      html  css  js  c++  java
  • AWS S3

    Amazon Simple Storage Service (Amazon S3)

         Amazon S3 提供了一个简单 Web 服务接口,可用于随时在 Web 上的任何位置存储和检索任何数量的数据。此服务让所有开发人员都能访问同一个具备高扩展性、可靠性、安全性和快速价廉的数据存储基础设施。

    Amazon S3的简单操作:

    开发指南

    一、创建请求

    1. 使用 AWS 账户或 IAM 用户凭证进行请求

    为 AWS 开发工具包配置凭证的最简单方法是使用 AWS 凭证文件,AWS 开发工具包会寻找您的本地 AWS 凭证文件。如果您使用 AWS Command Line Interface (AWS CLI),那么您可能已经配置了本地 AWS 凭证文件。否则,请按照以下步骤设置凭证文件:

    打开 IAM 控制台 -> 创建新 IAM 用户并赋予权限-> 下载csv -> 在本地计算机的主目录/.aws下创建credentials空文件->将csv文件内容复制到credentials文件中

    [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
    ", 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 用户临时凭证进行请求

    AWS 账户或 IAM 用户可以请求临时安全证书,然后使用它们向 Amazon S3 发送经身份验证的请求。

    使用 IAM 用户临时证书进行请求 - AWS SDK for Java

    二、存储桶

    存储桶是 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>

    三、托管静态网站

  • 相关阅读:
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第三节 梯度下降法 (上)理解篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第二节 线性回归算法 (下)实操篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第二节 线性回归算法 (上)理解篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第一节 KNN算法 (下)实操篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第一节 KNN算法 (上)理解篇
    萌新向Python数据分析及数据挖掘 第二章 pandas 第五节 Getting Started with pandas
    Oracle数据库安装和授权
    c# 如何获取JSON文件以及如何获取Config文件(framework 和 net .Core)
    C#Core查询数据库存储EXCEL文件
    如何在WINDOW系统下编译P12证书制作
  • 原文地址:https://www.cnblogs.com/anxiao/p/10330262.html
Copyright © 2011-2022 走看看