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>

    三、托管静态网站

  • 相关阅读:
    C++ 整型长度的获取 不同的系统
    第二章习题 C++
    输入cin对象的用法
    将Mnist手写数字库转化为图片形式 和标签形式
    寻找图片中数字的轮廓并裁剪 扣取数字
    Linux中的日志功能
    Linux中的系统默认日志
    Linux中进程在前后台的切换
    Linux中的服务管理
    Linux中的流程控制语句
  • 原文地址:https://www.cnblogs.com/anxiao/p/10330262.html
Copyright © 2011-2022 走看看