如何帮EC2摸到S3上的数据

一般来说,因为s3的存储成本优势,我们都会把数据如bcl,fastq,bam,sam等全部丢到s3上长期保存,然后需要分析的时候,开启一台服务器EC2,拷贝这些数据到EC2连接的EBS/EFS上,再进行下一步的分析,那么问题来了,我怎么才能帮EC2摸到s3上的数据呢?

-- D.C

你该知道的

你该掌握的

方式1 - GET 或 wget

这两个命令我们一定不陌生吧,wget是HTTP和FTP客户端的常用下载方式,默认在Amazon Linux中都安装好的。所以如果我们知道要下载对象的URL,就可以用这个命令下载:

wget https://my_bucket.s3.amazonaws.com/path-to-file

需要注意:

方式2 - AKSK访问

什么是AKSK? 简单来说,我们在aws账户下新建user的时候,都会给我们一个csv格式文件,里面保存的就是AKSK两个key,在向云端发起访问时向它证明你就是你。

通过配置EC2上的AWS CLI 访问S3上的桶和文件,AWS CLI默认都在EC2上装好的。在这台EC2上配置好CLI的AKSK信息,就可以向S3进行数据交互了,而且无须申请S3的ICP备案 白名单,缺点是每台EC2都要配置一次AKSK密钥信息,不太安全。

$ aws configure
AWS Access Key ID [****************xxxx]:   # 输入你的AK key
AWS Secret Access Key [****************xxxx]: # 输入你的SK key
Default region name [cn-northwest-1]:  # 宁夏:cn-northwest-1,北京:cn-north-1
Default output format [json]:   # 默认json

配置完之后利用aws cli中的S3模块命令进行数据拷贝:

aws s3 cp s3://my_bucket/my_folder/my_file.ext my_copied_file.ext

aws s3 cp my_copied_file.ext s3://my_bucket/my_folder/my_file.ext

aws s3 sync s3://remote_S3_bucket ./

aws s3 sync s3://remote_S3_bucket/myfolder ./myfolder

aws s3 sync myfolder s3://remote_S3_bucket/myfolder

方式3 - IAM角色设置(推荐)

以上两种方式有利有弊,用IAM角色来控制EC2的权限是官方推荐的最佳实践 哦。

什么是AWS IAM?全称AWS Identity and Access Management ,用于集中管理用户、访问密钥等安全凭证,以及控制用户和应用程序可以访问哪些 AWS 资源的权限。(这里仅作简要介绍,后面会开专贴详解)

iamrolecreate

iamroleec2

iamrolepolicy

iamroletag

iamrolename

iamrolelist

ec2giveiam

ec2iamchose

aws s3 ls

An error occurred (InvalidToken) when calling the ListBuckets operation: The provided token is malformed or otherwise invalid.

why ??? 很简单,我们知道,s3的桶名必是同区域内唯一的,但不同区域内的桶名是有可能相同的,所以,虽然我们给了EC2访问S3的权限,但是AWS全球那么多区域,它怎么知道去哪个区找你的s3呢?

$ aws configure
AWS Access Key ID [None]:  # 不需要输入,直接回车
AWS Secret Access Key [None]:   # 不需要输入,直接回车
Default region name [None]: cn-northwest-1 # 告诉它在哪个区域
Default output format [None]: json

再试试...#_#

$ aws s3 ls
2020-01-02 13:28:47 91porn
2020-01-09 13:15:15 athena

接下来,我们就可以用aws s3 cp 或是aws s3 sync 来和S3的数据进行交互了!不需要输入任何密钥,也不需要ICP备案白名单。以后再创建新的ec2服务器,直接attach我们创建好的角色 (Role)给它,再配置一次aws configure 就可以了!

道路千万条,安全第一条。