当 SRA 不能 dump 出来有效数据,如何使用 Amazon S3 下载原始数据 (Use Cloud Data Delivery)
引言
做上游做多了,总有从 sra 数据 dump 不出来需要的东西的情况,有时候是缺一端的匹配数据,有时候是上传的 bam, 有时候是少 l1 文件,总之总有奇奇怪怪的理由不能用 sra, 这时候就需要使用 Amazon S3 下载原始数据。
Amazon S3 是一个对象存储服务,提供了高可用性和可扩展性,适合存储和检索大量数据。对于生物信息学领域,S3 是 NCBI 指定的数据交付手段。缺点:要钱。但第一年免费。
过程
注册帐号
https://portal.aws.amazon.com/billing/signup#/start/email
注册一个 AWS 帐号,注意需要绑定信用卡。
创建 S3 存储桶
地区我选的 us-east-1.
- 登录 AWS 管理控制台。
- 在服务列表中选择 S3。
- 点击“创建存储桶”。
- 输入存储桶名称(必须唯一)和区域。
- 配置存储桶设置(如版本控制、加密等)。
- 点击“创建存储桶”。
Use Cloud Data Delivery[3]
在Deliver Data页面点击Choose data to deliver in Run Selector
按钮选取数据集。
会跳转到https://www.ncbi.nlm.nih.gov/Traces/study/页面。
在Choose destination bucket
中选择刚才创建的 S3 存储桶。
在Select one or more source file types
中选择你需要的数据类型 (也就是除了 SRA Run 和 SRA Lite 以外的类型)。
发送!
下载数据
我很懒,所以使用了 Use Cloud Data Delivery 之后下载全部就完事了,然后等下载完成后删除,这样下次就还是全新的数据全下就好。
使用 AWS CLI 下载数据
第一,安装 AWS CLI:https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html
第二,配置 AWS CLI:
1 | aws configure |
输入你的 AWS Access Key ID、Secret Access Key、默认区域和输出格式。
第三,使用以下命令下载数据:
1 | aws s3 cp s3://your-bucket-name/path/to/your/file /local/path/to/save |
1 | aws s3 cp --recursive s3://datsra ./ |
增强下载工具
跳过下载失败文件
使用 aws s3 sync 命令:
aws s3 sync 命令会比较本地文件和 S3 上的对象的大小和最后修改时间,仅下载新增或已更改的文件。如果某些文件在之前的下载中失败,sync 命令会尝试重新下载这些文件。
1 | aws s3 sync s3://datsra ./ |
请注意,sync 命令并不支持断点续传,如果下载过程中断,重新执行命令会从头开始下载整个文件。
如果不放心他下载什么可以使用--dryrun
查看接下来要运行的动作,但并不会实际运行,完整命令是aws s3 sync s3://datsra ./ --dryrun
.
使用支持断点续传的工具
我实际没有实验但是看起来还行。
由于 AWS CLI 不支持断点续传,您可以考虑使用支持该功能的工具,如 s5cmd。s5cmd 是一个高性能的 S3 和本地文件系统之间的文件传输工具,支持并发操作和断点续传,适合处理大量文件的下载任务。
安装 s5cmd(以 macOS 和 conda 为例):
1 | brew install s5cmd |
使用 s5cmd 下载 S3 存储桶中的所有文件:
1 | s5cmd sync s3://datsra/ ./ |
s5cmd 会自动跳过已成功下载的文件,并重新尝试下载失败的文件,支持断点续传,适合在网络不稳定的环境下使用。
账单查看
网页一天就失效而且那个验证码太难了吧…
还好命令行也能看。
1 | aws ce get-cost-and-usage \ |
如果权限不够就是没添加权限策略 (An error occurred (AccessDeniedException) when calling the GetCostAndUsage operation: User: ** is not authorized to perform: ce:GetCostAndUsage on resource: arn:aws:ce:us-east-1:637423541882:/GetCostAndUsage because no identity-based policy allows the ce:GetCostAndUsage action)。
您遇到的错误提示表明,当前 IAM 用户(arn:aws:iam::637423541882:user/lev)未被授权执行 ce:GetCostAndUsage
操作。这通常是由于缺少相应的 IAM 策略所致。
要解决此问题,您需要为该 IAM 用户添加允许执行 ce:GetCostAndUsage
操作的权限。以下是一个示例策略,授予对 AWS Cost Explorer 的完全访问权限[4]:
1 | { |
您可以通过以下步骤将此策略附加到 IAM 用户:
- 登录到 AWS 管理控制台。
- 导航到 IAM 服务。
- 在左侧导航栏中,选择 用户,然后点击您的用户名(例如,
lev
)。 - 选择 权限 标签页。
- 点击 添加权限。
- 选择 附加现有策略直接。
- 点击 创建策略,然后选择 JSON 选项卡。
- 粘贴上述策略 JSON。
- 点击 下一步:标签,然后点击 下一步:查看。
- 为策略命名,例如
CostExplorerFullAccess
,然后点击 创建策略。 - 返回到 添加权限 页面,刷新策略列表,搜索并选择刚创建的策略。
- 点击 下一步:查看,然后点击 添加权限。([Stack Overflow][1])
然后关于资费,我实际测试发送到云 100g 大约是 0.3 美元,也就是 2 人民币,然后下载网上说从美国东部 S3 存储桶下载数据到日本或台湾的互联网用户,属于“数据传出到互联网”,费用通常为每 GB $0.09 美元,也就是 6 毛左右。
结论
这技能做时间长了肯定用得上…