一键部署面向基因分析的 Cromwell-on-AWS-Batch 解决方案(中国区域)
Cromwell-on-AWS-Batch是AWS在生命科学领域联合Broad研究院推出的解决方案,已有很多AWS海外区域的客户在使用该解决方案进行基因分析。AWS Batch服务于2019年10月在AWS中国区域上线之后,我们随即根据AWS中国区域的特点对该解决方案进行了适应修改和优化提升,本文通过一个测试示例和一个GATK实际例子来演示在中国区域一键部署的过程,为国内基因分析客户快速上手使用该解决方案加速分析效率提供参考。
-- D.C
基本介绍
Cromwell 是由Broad研究院面向科研领域开发的一套工作流管理框架,目前在基因分析领域更为常用。Cromwell目前已支持对接AWS Batch作为其集群管理后端,云端基础资源的调度管理由AWS Batch完成。
Cromwell-on-AWS-Batch的组成架构图如下图所示。由生信工程师编写wdl或cwl格式的基因分析工作流脚本,作为Cromwell的输入,通过API调用(或图形管理界面)的方式提交任务,分析过程中可通过AWS Batch服务的控制面板和CloudWatch-Log记录可以查看任务的执行状态,分析的结果保存在Amazon S3存储上。分析中支持调用Spot竞价实例来降低样本分析的成本。此外Cromwell还支持通过Amazon Aurora数据库服务来管理作业数据记录。
一键部署的过程及测试示例
部署过程通过CloudFormation模板导入,非常方便。进入AWS控制台,右上角选择宁夏区域,并通过左上角服务菜单进入CloudFormation服务界面,点击“创建堆栈”,在堆栈模板的URL信息栏中填入:https://awshcls.s3.cn-northwest-1.amazonaws.com.cn/cromwellcn/templates/cromwell-aio.template.yaml。
进入下一步,为堆栈指定名称。在堆栈参数栏中,下拉选择EC2密钥对(如果下拉列表为空,可进入EC2服务界面左侧密钥对菜单中建好再返回此处),该密钥对是后续SSH登录的凭据;并输入S3存储桶的名称,该名称需符合S3桶名规范并保证唯一(亦可通过指定Existing选项为true来使用已有存储桶名)。在AWS Batch参数中,指定Spot竞价实例在所有vCPU的使用比例,并指定最小最大vCPU数量,后续会建Default和High Priority两个不同优先级的任务队列,故最小最大数量可分别指定。此处两个最小值均填4。其他可保持默认值,进入下一步。
在权限参数中需要指定一个IAM权限角色用于授权CloudFormation来启动资源用,如果为空,参考右上角“了解更多”的步骤新建一个角色(简便起见可先建一个管理员权限的)再返回此处设置。
进入下一步,勾选两个确认框。
点击创建堆栈,即开始自动新建整个框架堆栈。等待十几分钟后堆栈建立完成,堆栈状态可看到均为CREATE_COMPLETE状态(该模板自动嵌套7个子模板)。
在EC2实例列表里也可以查看到对应的实例信息,选中cromwell-server实例点击上方“连接”查看SSH登录方式。
SSH登录进cromwell-server实例后,输入以下命令即可提交一个简单的测试示例。
wget https://awshcls.s3.cn-northwest-1.amazonaws.com.cn/cromwellcn/scripts/simple-hello.wdl
curl -X POST "http://localhost:8000/api/workflows/v1" -H "accept: application/json" -F "workflowSource=@simple-hello.wdl"
其中simple-hello.wdl的内容如下,是一个只执行一个task的测试脚本:
task echoHello{
command {
echo "Hello AWS!"
}
runtime {
docker: "amazonlinux:latest"
}
}
workflow printHelloAndGoodbye {
call echoHello
}
测试示例很快完成,在CloudWatch Log中有详细记录信息.
运行一个GATK基因分析处理的实际例子
本例子是基于hg38公开数据进行GATK分析流程中HaplotypeCaller 步骤处理。(提示:本实验会产生一定运行费用根据运行实例类型和Spot比例设置有所不同)
SSH登录进cromwell-server实例后,输入以下命令获取工作流脚本HaplotypeCaller.aws.wdl和配置文件HaplotypeCaller.aws.json
wget https://awshcls.s3.cn-northwest-1.amazonaws.com.cn/cromwellcn/scripts/HaplotypeCaller.aws.wdl
wget https://awshcls.s3.cn-northwest-1.amazonaws.com.cn/cromwellcn/scripts/HaplotypeCaller.aws.json
其中配置文件HaplotypeCaller.aws.json的内容格式如下,其中的s3://开头的地方是用到的bam/fastq等资源文件,您也可以指定到自己S3存储桶的文件链接。
{
"##_COMMENT1": "INPUT BAM",
"HaplotypeCallerGvcf_GATK4.input_bam": "s3://gatk-test-data/wgs_bam/NA12878_24RG_hg38/NA12878_24RG_small.hg38.bam",
"HaplotypeCallerGvcf_GATK4.input_bam_index": "s3://gatk-test-data/wgs_bam/NA12878_24RG_hg38/NA12878_24RG_small.hg38.bai",
"##_COMMENT2": "REFERENCE FILES",
"HaplotypeCallerGvcf_GATK4.ref_dict": "s3://broad-references/hg38/v0/Homo_sapiens_assembly38.dict",
"HaplotypeCallerGvcf_GATK4.ref_fasta": "s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta",
"HaplotypeCallerGvcf_GATK4.ref_fasta_index": "s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.fai",
"##_COMMENT3": "INTERVALS",
"HaplotypeCallerGvcf_GATK4.scattered_calling_intervals_list": "s3://gatk-test-data/intervals/hg38_wgs_scattered_calling_intervals.txt",
"HaplotypeCallerGvcf_GATK4.HaplotypeCaller.interval_padding": 100,
"##_COMMENT4": "DOCKERS",
"HaplotypeCallerGvcf_GATK4.gatk_docker": "broadinstitute/gatk:4.0.0.0",
"##_COMMENT5": "PATHS",
"HaplotypeCallerGvcf_GATK4.gatk_path": "/gatk/gatk",
"##_COMMENT6": "JAVA OPTIONS",
"HaplotypeCallerGvcf_GATK4.HaplotypeCaller.java_opt": "-Xms8000m",
"HaplotypeCallerGvcf_GATK4.MergeGVCFs.java_opt": "-Xms8000m",
"##_COMMENT7": "MEMORY ALLOCATION",
"HaplotypeCallerGvcf_GATK4.HaplotypeCaller.mem_size": "10 GB",
"HaplotypeCallerGvcf_GATK4.MergeGVCFs.mem_size": "30 GB",
}
提交如下命令启动分析流程:
curl -X POST "http://localhost:8000/api/workflows/v1" -H "accept: application/json" -F "workflowSource=@HaplotypeCaller.aws.wdl" -F workflowInputs=@HaplotypeCaller.aws.json
分析完成后,可在CloudWatch Log中查看每个任务的日志,如下图所示。结果数据文件存放在s3://yourbucket/cromwell-execution/HaplotypeCallerGvcf_GATK4/{UUID}/call-HaplotypeCaller/shard-xx/路径下。
PS: 实验完成后,在CloudFormation界面中选择模板删除即可释放堆栈相关资源避免产生不必要的费用,其中S3存储桶和CloudWatch Log记录可在对应服务内手动删除。