亚马逊AWS官方博客

在 AWS 中国区域一键部署面向基因分析的 Cromwell-on-AWS-Batch 解决方案

摘要:Cromwell-on-AWS-Batch是AWS在生命科学领域联合Broad研究院推出的解决方案,已有很多AWS海外区域的客户在使用该解决方案进行基因分析。AWS Batch服务于2019年10月在AWS中国区域上线之后,我们随即根据AWS中国区域的特点对该解决方案进行了适应修改和优化提升,本文通过一个测试示例和一个GATK实际例子来演示在中国区域一键部署的过程,为国内基因分析客户快速上手使用该解决方案加速分析效率提供参考。

1、基本介绍

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数据库服务来管理作业数据记录。

 

2、一键部署的过程及测试示例

部署过程通过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的测试脚本(wdl的规范参考文末链接)。

task echoHello{
    command {
        echo "Hello AWS!"
    }
    runtime {
        docker: "amazonlinux:latest"
    }
}
workflow printHelloAndGoodbye {
    call echoHello
}

测试示例很快完成,在CloudWatch Log中有详细记录信息,如下图所示。

 

3、运行一个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/路径下。

实验完成后,在CloudFormation界面中选择模板删除即可释放堆栈相关资源避免产生不必要的费用,其中S3存储桶和CloudWatch Log记录可在对应服务内手动删除。

 

 

4、参考资源链接

Cromwell快速教程:

https://cromwell.readthedocs.io/en/stable/tutorials/FiveMinuteIntro/

Cromwell-on-AWS-Batch海外区域部署指南:

https://docs.opendata.aws/genomics-workflows/orchestration/cromwell/cromwell-overview/

AWS基因分析参考资料:

https://docs.opendata.aws/genomics-workflows/

AWS CloudFormation使用指南:

https://amazonaws-china.com/cn/cloudformation/getting-started/

wdl参考链接:

https://github.com/openwdl/wdl

Github参考链接:

https://github.com/iwillsky/cromwellcn/

AWS中国区域帐号申请:

https://www.amazonaws.cn/signup/?sc_channel=el&sc_campaign=request_for_pilot_account&sc_geo=chna&sc_country=cn&sc_outcome=ml&sc_publisher=internal&trkCampaign=request_for_pilot_account&trk=GSRC

本篇作者

崔向徽

AWS解决方案架构师,目前负责医疗健康与生命科学行业云端应用的架构设计与技术咨询。加入AWS前从事了十余年信息系统研发,设计部署了多个HPC、SOA系统,多次获国家级科技进步奖项。

包光磊

AWS解决方案架构师经理,也是国内最资深的AWS技术讲师。深度掌握AWS的核心服务,拥有利用AWS云平台为多个跨行业客户设计、开发、部署AWS云端应用的经验。在加入AWS之前就职Oracle多年,也是一名Oracle技术堆栈专家,上海Oracle用户组创始人,曾著有《临危不惧:Oracle 11g数据库恢复技术》一书。