amazon-s3开始使用amazon-s3


备注

文档摘要

来自http://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html

Amazon Simple Storage Service是Internet的存储。它旨在使开发人员更轻松地进行Web规模计算。

Amazon S3有一个简单的Web服务界面,您可以使用它在任何时间从Web上的任何位置存储和检索任何数量的数据。它使任何开发人员都可以访问亚马逊用于运行其自己的全球网站网络的高度可扩展,可靠,快速,廉价的数据存储基础架构。该服务旨在最大限度地扩大规模效益,并将这些优势传递给开发人员。

语言和脚本支持

S3不是这样的开发语言,而是支持Web服务请求的云平台。亚马逊发布了各种各样的工具和SDK 。语言SDK通过处理诸如Web服务请求,身份验证,会话管理,令牌续订等任务来提供对S3的透明访问。还有用于bash / windows / iospowershell的命令行界面。

S3 API

竞争供应商支持 S3 Web服务API。本主题目前不直接涵盖API,因此此处的示例对于构建连接到利用S3 API的竞争系统的应用程序没有用。

版本

截至2017年3月28日,AWS CLI有174个版本,这些版本在CLI发行说明中有详细记录 。 Amazon S3有66个版本,其中一些是宣布添加新区域,另一些是添加功能。这些内容记录在S3发行说明中

例子

对于到目前为止在“入门”部分中显示的示例,Amazon S3对于以下用例的开发人员非常有用:

  • 在高性能,持久的系统中存储或备份文件 ,从而将此任务从非云架构中卸载:Linux和Windows文件系统。使用内部部署服务器或EC2实例重新创建S3的持久性和性能级别是昂贵的。
  • 当网络带宽成为问题时,例如,在多个并发用户必须下载大文件的情况下,将数据移动到S3可以用作应用程序缓解数据中心或本地服务器的带宽短缺的方式 。这是一种分发大型代码存储库,虚拟机映像,视频或软件安装程序的方法。可以改善用户上传时间和用户下载时间。 [为了在非常大的用户群场景中获得额外的性能,可以使用诸如cloudfront之类的内容交付系统来缓存离用户更近的文件。
  • 您的应用程序需要创建或使用大文件,并且您需要一种允许用户访问或存放它的方法。
  • 您的应用程序分发非常大 ,您需要与用户共享。
  • 您正在组建一个持续的交付管道 ,例如在Amazon S3上托管您网站的部分内容。

此时,示例未显示如何执行以下操作:

  • 这些示例虽然比输入aws s3 help, do not mention some of the commands covered in help, such as更快更清晰aws s3 help, do not mention some of the commands covered in help, such as aws s3 website`。
  • 如何共享或限制用户访问权限。如果没有明确的限制,这些示例仅适用于共享同一AWS账户的用户。
  • 如何通过加密保护数据。请注意,AWS将S3定位为具有比EC2中存储的数据更高的安全级别。 AWS安全最佳实践,2016年8月,p。 27

安全

AWS建议将S3视为安全平台:

除非您有更严格的业务或合规性要求,否则除了AWS安全全局基础架构提供的保护之外,您不需要引入额外的保护层。 同上。第2页

在其安全指南中 ,AWS建议使用适用于S3的AWS身份验证。 同上。页。 27

此外,S3还提供服务器端加密或客户端加密。 AWS Java SDK透明地提供客户端加密;密钥不需要存储在AWS上。 同上。页。 28

版本

版本名称描述笔记发布日期
亚马逊S3在2016-12-13 添加伦敦地区 笔记 2016年12月13日

AWS CLI S3命令列表

常用S3 AWS CLI命令列表

创建桶

aws s3 mb s3://bucket-name
 

删除铲斗

aws s3 rb s3://bucket-name
 

列出铲斗

aws s3 ls
 

列出存储桶内的内容

aws s3 ls s3://bucket-name
 

列出具有路径的桶

aws s3 ls s3://bucket-name/path
 

拷贝文件

aws s3 cp file.txt s3://my-bucket/ 
 

同步文件

aws s3 sync . s3://my-bucket/path
 

删除本地文件

rm ./MyFile1.txt
 

没有--delete选项尝试同步 - 没有任何反应

aws s3 sync . s3://my-bucket/path
 

与删除同步 - 从桶中删除对象

aws s3 sync . s3://my-bucket/path --delete
 

从桶中删除对象

aws s3 rm s3://my-bucket/path/MySubdirectory/MyFile3.txt
 

与删除同步 - 删除本地文件

aws s3 sync s3://my-bucket/path . --delete
 

与不常访问存储类同步

aws s3 sync . s3://my-bucket/path --storage-class STANDARD_IA
 

将当前目录中的MyFile.txt复制到s3:// my-bucket / path

aws s3 cp MyFile.txt s3://my-bucket/path/
 

将s3:// my-bucket / path中的所有.jpg文件移动到./MyDirectory

aws s3 mv s3://my-bucket/path ./MyDirectory --exclude '*' --include '*.jpg' --recursive
 

列出我的桶的内容

aws s3 ls s3://my-bucket
 

列出my-bucket中路径的内容

aws s3 ls s3://my-bucket/path
 

删除s3://my-bucket/path/MyFile.txt

aws s3 rm s3://my-bucket/path/MyFile.txt
 

删除s3:// my-bucket / path及其所有内容

aws s3 rm s3://my-bucket/path --recursive
 

使用Java的Hello World示例

此示例尝试创建名为“hello-world”的存储桶,并且由于存储桶hello-world已由S3的全局命名空间中的其他人创建,因此会引发以下异常。通过创建唯一命名的存储桶,将“hello-world”更改为其他内容以避免异常。 可以使用AWS控制台删除如此创建的新存储桶

线程“main”中的异常com.amazonaws.services.s3.model.AmazonS3Exception:请求的存储桶名称不可用。存储桶命名空间由系统的所有用户共享。请选择其他名称,然后重试。 (服务:Amazon S3;状态代码:409;错误代码:BucketAlreadyExists;请求ID:...

           import com.amazonaws.services.s3.AmazonS3;
           import com.amazonaws.services.s3.AmazonS3ClientBuilder;
           import com.amazonaws.services.s3.model.CreateBucketRequest;
           import com.amazonaws.services.s3.model.Bucket;

            /** S3 "hello world" example. */
            public class S3Hello {

                    /** Name of hello-world bucket -- must be globally unique.  The
                     *  bucket namespace is shared by all users of the system.
                     */
                    static final String BUCKET_NAME = "hello-world";

                    /** Creates bucket
                     *  @param args Command line arguments
                     */
                    public static void main(final String[] args) {

                            AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();

                            CreateBucketRequest request
                                 = new CreateBucketRequest(BUCKET_NAME);

                            Bucket bucket = s3.createBucket(request);
                            System.out.println("S3 Hello World completed.");
                    }
            }
 

此示例需要以下依赖项:

Hello World使用PowerShell

此示例需要一个错误,因为hello-world存储桶已存在且S3使用全局命名空间。

    New-S3Bucket -BucketName "hello-world"
 

New-S3Bucket:请求的存储桶名称不可用。存储桶命名空间由系统的所有用户共享。请选择其他名称,然后重试。

如果用其他独特的东西替换hello-world,则会创建存储桶而不会出现错误,您将获得以下结果:

    CreationDate                                      BucketName
    ------------                                      ----------
    3/30/2017 11:43:03 PM                             hello-world-832jklsdJF
 

此示例需要以下依赖项:

安装AWS CLI以访问S3

在Ubuntu / Debian实例中安装aws cli

sudo apt-get install -y python-dev python-pip
sudo pip install awscli
aws --version
aws configure
 

使用python安装aws cli

使用pip,您可以在Windows,OS X和Linux中安装aws cli

sudo pip install awscli
 

配置AWS命令行界面

本节介绍如何配置AWS命令行界面与AWS交互时使用的设置,例如安全凭据和默认区域。

$ aws configure
AWS Access Key ID [None]: <Your access key >
AWS Secret Access Key [None]: <Your secret key>
Default region name [None]: us-west-2
Default output format [None]: json
 

从AWS的帐户页面获取Access密钥和密钥

创建桶

使用aws s3 mb命令创建新存储桶。存储桶名称必须是唯一的,并且应符合DNS。存储桶名称可以包含小写字母,数字,连字符和句点

aws s3 mb s3://bucket-name
 

删除铲斗

要删除存储桶,请使用aws s3 rb命令。默认存储桶应为空。

aws s3 rb s3://bucket-name
 

要删除非空存储桶,您需要包含--force选项。

aws s3 rb s3://bucket-name --force
 

列出存储桶

要列出所有存储桶或其内容,请使用aws s3 ls命令

aws s3 ls
aws s3 ls s3://bucket-name
 

以下命令列出了bucket-name / path中的对象

aws s3 ls s3://bucket-name/path
 

在本地文件系统和S3之间同步文件

aws s3 sync . s3://my-bucket/path 
 

它会将当前目录中的所有文件上传到S3。要将文件从S3下载到当前目录执行

aws s3 sync s3://my-bucket/path .