亚马逊AWS官方博客

新增功能 — Amazon Genomics CLI 现已开源并全面推出

不到 70 年的时间内,我们一直无缘有史以来最伟大的发现之一:DNA 的双螺旋结构。我们现在知道 DNA 的形状是一种扭曲的阶梯,由四种称为碱基的化合物组成。这四种碱基通常用大写字母标识:腺嘌呤 (A)、鸟嘌呤 (G)、胞嘧啶 (C) 和胸腺嘧啶 (T)。DNA 为双螺旋结构的原因之一是,当这些化合物位于阶梯的两侧时,A 总是与 T 结合,C 总是与 G 结合。

如果我们在桌子上展开此阶梯,就会看到两个“字母”序列,每个序列携带相同的遗传信息。例如,以下是绑定在一起的两个系列(AGCTTCGA):

A — T
G — C
C — G
T — A

这些字母序列可能很长。例如,人类基因组由超过 30 亿个代码字母组成,是人体中每个细胞的生物蓝图。个人基因组中的信息可以用来形成高度个性化的治疗方法,以改善个人甚至人类社会的健康。同样,基因组数据可用于跟踪传染病、改善诊断结果,甚至跟踪流行病、食物病原体和毒素。这就是新兴的环境基因组学领域。

获取基因组数据需要执行基因组测序,随着最新技术的进步,我们能够以更快、更具成本效益的方式为大批个体执行基因组测序。在未来五年内,基因组学数据集估计将不断增长,包含超过十亿个测序基因组。

基因组学数据分析的工作原理
基因组学数据分析使用各种工具,这些工具需要按照特定的步骤序列或工作流进行协调。为了促进工作流的制定、共享和运行,基因组学和生物信息学界开发了专门的工作流定义语言,例如 WDLNextflowCWLSnakemake

但是,此过程会生成数 PB 级的原始基因组数据,因此基因组学和生命科学领域的专家正在努力扩展计算和存储资源以处理如此庞大规模的数据。

为了快速处理数据并提供答案,需要将计算、存储和联网等云资源配置为与分析工具配合使用。因此,科学家和研究人员往往不得不花费宝贵的时间来部署基础设施和修改开源基因组学分析工具,而无法致力于基因组学的创新。

Amazon Genomics CLI 简介
几个月前,我们分享了 Amazon Genomics CLI 的预览版,该工具可让您更轻松地在 AWS 上以 PB 级处理基因组学数据。我很高兴分享的是,Amazon Genomics CLI 现在成为开源项目,并于今日全面推出。您可以将该工具与公开的工作流搭配使用,并在此基础上形成分析。

Amazon Genomics CLI 简化并自动化云基础设施的部署,同时提供易于使用的命令行界面,可在 AWS 上快速设置和运行基因组学工作流。通过免除其在云中设置和运行基因组学工作流的繁重工作,软件开发人员和研究人员可以自动配置、配置和扩展云资源,从而实现更快、更具成本效益的人群级遗传学研究、药物发现周期等。

借助 Amazon Genomics CLI,您可以在优化的云基础设施上运行工作流。更具体地说,CLI:

Amazon Genomics CLI 的使用基于以下三个主要概念:

工作流 – 这些是用 WDL 或 Nextflow 等语言编写的生物信息学工作流。它们可以是单个脚本文件,也可以是多个文件组成的软件包。这些工作流脚本文件是工作流定义,并与其他元数据 (如定义所使用的工作流语言) 结合在一起,形成工作流规范,CLI 使用该规范在适当的计算资源上执行工作流。

上下文 – 上下文封装并自动执行耗时的任务,以配置和部署工作流引擎,创建数据访问策略,以及调整计算集群 (使用 AWS Batch 管理) 以实现大规模操作。

项目 – 项目将工作流、数据集和用于处理它们的上下文链接在一起。从用户的角度来看,它处理与同一问题相关或由同一团队使用的资源。

我们来看看这些步骤的实际操作。

使用 Amazon Genomics CLI
我按照说明在笔记本电脑上安装 Amazon Genomics CLI。现在,我可以使用 agc 命令来管理基因组工作负载。我看到了以下可用的选项:

$ agc --help

第一次使用该选项时,我激活自己的 AWS 账户:

$ agc account activate

这将创建 Amazon Genomics CLI 运行所需的核心基础设施,其中包括 S3 存储桶、Virtual Private Cloud (VPC) 和 DynamoDB 表。S3 存储桶用于持久元数据,而 VPC 用于隔离计算资源。

或者,我可以引入自己的 VPC。我还可以将自己的一个指定的配置文件用于 AWS 命令行界面 (CLI)。通过这种方式,我可以自定义 AWS 区域和 Amazon Genomics CLI 使用的 AWS 账户。

我在本地设置中配置自己的电子邮件地址。这将用于标记 CLI 创建的资源:

$ agc configure email me@example.net

Amazon Genomics CLI 安装中包含的示例文件夹中有一些演示项目。这些项目使用不同的引擎,例如 CromwellNextflow。在 demo-wdl-project 文件夹中,agc-project.yaml 文件描述了 Demo 项目的工作流、数据和上下文:

---
name: Demo
schemaVersion: 1
workflows:
  hello:
    type:
      language: wdl
      version: 1.0
    sourceURL: workflows/hello
  read:
    type:
      language: wdl
      version: 1.0
    sourceURL: workflows/read
  haplotype:
    type:
      language: wdl
      version: 1.0
    sourceURL: workflows/haplotype
  words-with-vowels:
    type:
      language: wdl
      version: 1.0
    sourceURL: workflows/words
data:
  - location: s3://gatk-test-data
    readOnly: true
  - location: s3://broad-references
    readOnly: true
contexts:
  myContext:
    engines:
      - type: wdl
        engine: cromwell

  spotCtx:
    requestSpotInstances: true
    engines:
      - type: wdl
        engine: cromwell

对于这个项目,有四个工作流 (helloreadwords-with-vowelshaplotype)。项目对两个 S3 存储桶具有只读访问权限,并且可以使用两个上下文运行工作流。两种上下文都使用 Cromwell 引擎。一个上下文 (SpotCtX) 使用 Amazon EC2 Spot 实例来优化成本。

demo-wdl-project 文件夹中,我使用亚 Amazon Genomics CLI 来部署 spotCtx 上下文:

$ agc context deploy -c spotCtx

几分钟后,上下文就准备就绪,我可以开始执行工作流。一旦启动,上下文每小时产生大约 0.40 USD 的基准成本。这些成本不包括为执行工作流而创建的资源。这些资源取决于您的具体使用案例。上下文可以通过在其配置中添加 requestSpotInstances 标志来选择使用 Spot 实例。

我使用 CLI 查看项目上下文的状态:

$ agc context status

INSTANCE spotCtx STARTED true

现在,让我们看一下此项目中包含的工作流:

$ agc workflow list

2021-09-24T11:15:29+01:00 𝒊  Listing workflows.
WORKFLOWNAME haplotype
WORKFLOWNAME hello
WORKFLOWNAME read
WORKFLOWNAME words-with-vowels

最简单的工作流是 hello。如果您了解任何编程语言,那么完全可以理解 hello.wdl 文件的内容:

version 1.0
workflow hello_agc {
    call hello {}
}
task hello {
    command { echo "Hello Amazon Genomics CLI!" }
    runtime {
        docker: "ubuntu:latest"
    }
    output { String out = read_string( stdout() ) }
}

hello 工作流定义打印命令输出的单个任务 (hello)。该任务在特定的容器镜像 (ubuntu: latest) 上执行。输出取自标准输出 (stdout),标准输出是进程可以在其中写入输出的默认文件描述符。

运行工作流是一个异步过程。从 CLI 提交工作流后,它将完全在云中进行处理。我可以一次运行多个工作流。底层计算资源将自动扩展,我只需按使用的资源付费。

我使用 CLI 启动 hello 工作流:

$ agc workflow run hello -c spotCtx

2021-09-24T13:03:47+01:00 𝒊  Running workflow.Workflow name: 'hello', Arguments: '', Context: 'spotCtx'
fcf72b78-f725-493e-b633-7dbe67878e91

工作流已成功提交,最后一行是工作流执行 ID。我可以使用此 ID 来引用特定的工作流执行。现在,我检查工作流的状态:

$ agc workflow status

2021-09-24T13:04:21+01:00 𝒊  Showing workflow run(s).Max Runs: 20
WORKFLOWINSTANCE	spotCtx	fcf72b78-f725-493e-b633-7dbe67878e91	true	RUNNING	2021-09-24T12:03:53Z	hello

hello 工作流仍在运行。几分钟后,我再次检查:

$ agc workflow status

2021-09-24T13:12:23+01:00 𝒊  Showing workflow run(s).Max Runs: 20
WORKFLOWINSTANCE	spotCtx	fcf72b78-f725-493e-b633-7dbe67878e91	true	COMPLETE	2021-09-24T12:03:53Z	hello

工作流已终止,并且现已完成。我查看工作流日志:

$ agc logs workflow hello

2021-09-24T13:13:08+01:00 𝒊  Showing the logs for 'hello'
2021-09-24T13:13:12+01:00 𝒊  Showing logs for the latest run of the workflow.Run id: 'fcf72b78-f725-493e-b633-7dbe67878e91'
Fri, 24 Sep 2021 13:07:22 +0100	download: s3://agc-123412341234-eu-west-1/scripts/1a82f9a96e387d78ae3786c967f97cc0 to tmp/tmp.498XAhEOy/batch-file-temp
Fri, 24 Sep 2021 13:07:22 +0100	*** LOCALIZING INPUTS ***
Fri, 24 Sep 2021 13:07:23 +0100	download: s3://agc-123412341234-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/script to agc-024700040865-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/script
Fri, 24 Sep 2021 13:07:23 +0100	*** COMPLETED LOCALIZATION ***
Fri, 24 Sep 2021 13:07:23 +0100	Hello Amazon Genomics CLI!
Fri, 24 Sep 2021 13:07:23 +0100	*** DELOCALIZING OUTPUTS ***
Fri, 24 Sep 2021 13:07:24 +0100	upload: ./hello-rc.txt to s3://agc-123412341234-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/hello-rc.txt
Fri, 24 Sep 2021 13:07:25 +0100	upload: ./hello-stderr.log to s3://agc-123412341234-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/hello-stderr.log
Fri, 24 Sep 2021 13:07:25 +0100	upload: ./hello-stdout.log to s3://agc-123412341234-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/hello-stdout.log
Fri, 24 Sep 2021 13:07:25 +0100	*** COMPLETED DELOCALIZATION ***
Fri, 24 Sep 2021 13:07:25 +0100	*** EXITING WITH RETURN CODE ***
Fri, 24 Sep 2021 13:07:25 +0100	0

在日志中,我如预期找到了工作流打印的 Hello Amazon Genomics CLI! 消息。

我还可以使用上面日志中的信息查看 S3 上 hello-stdout.log 的内容:

aws s3 cp s3://agc-123412341234-eu-west-1/project/Demo/userid/danilop20tbvT/context/spotCtx/cromwell-execution/hello_agc/fcf72b78-f725-493e-b633-7dbe67878e91/call-hello/hello-stdout.log -

Hello Amazon Genomics CLI!

它正常发挥作用! 现在,我们查看更复杂的工作流。在更改项目之前,我会销毁 Demo 项目的上下文:

$ agc context destroy -c spotCtx

gatk-best-practices-project 文件夹中,我列出了该项目的可用工作流:

$ agc workflow list

2021-09-24T11:41:14+01:00 𝒊  Listing workflows.
WORKFLOWNAME	bam-to-unmapped-bams
WORKFLOWNAME	cram-to-bam
WORKFLOWNAME	gatk4-basic-joint-genotyping
WORKFLOWNAME	gatk4-data-processing
WORKFLOWNAME	gatk4-germline-snps-indels
WORKFLOWNAME	gatk4-rnaseq-germline-snps-indels
WORKFLOWNAME	interleaved-fastq-to-paired-fastq
WORKFLOWNAME	paired-fastq-to-unmapped-bam
WORKFLOWNAME	seq-format-validation

agc-project.yaml 文件中,gatk4-data-processing 工作流指向同名的本地目录。以下是该目录的内容:

$ ls gatk4-data-processing

MANIFEST.json
processing-for-variant-discovery-gatk4.hg38.wgs.inputs.json
processing-for-variant-discovery-gatk4.wdl

该工作流使用专注于变异发现的基因组分析工具包 GATK4 处理高吞吐量测序数据。

该目录包含一个 MANIFEST.json 文件。此清单文件描述了哪个文件包含要执行的主工作流 (目录中可以有多个 WDL 文件) 以及在何处查找输入参数和选项。以下是清单文件的内容:

{
  "mainWorkflowURL": "processing-for-variant-discovery-gatk4.wdl",
  "inputFileURLs": [
    "processing-for-variant-discovery-gatk4.hg38.wgs.inputs.json"
  ],
  "optionFileURL": "options.json"
}

gatk-best-practices-project 文件夹中,我创建了一个上下文来运行工作流:

$ agc context deploy -c spotCtx

然后,我启动 gatk4-data-processing 工作流:

$ agc workflow run gatk4-data-processing -c spotCtx

2021-09-24T12:08:22+01:00 𝒊  Running workflow.Workflow name: 'gatk4-data-processing', Arguments: '', Context: 'spotCtx'
630e2d53-0c28-4f35-873e-65363529c3de

几个小时后,工作流已终止:

$ agc workflow status

2021-09-24T14:06:40+01:00 𝒊  Showing workflow run(s).Max Runs: 20
WORKFLOWINSTANCE	spotCtx	630e2d53-0c28-4f35-873e-65363529c3de	true	COMPLETE	2021-09-24T11:08:28Z	gatk4-data-processing

我查看日志:

$ agc logs workflow gatk4-data-processing

...
Fri, 24 Sep 2021 14:02:32 +0100	*** DELOCALIZING OUTPUTS ***
Fri, 24 Sep 2021 14:03:45 +0100	upload: ./NA12878.hg38.bam to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/NA12878.hg38.bam
Fri, 24 Sep 2021 14:03:46 +0100	upload: ./NA12878.hg38.bam.md5 to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/NA12878.hg38.bam.md5
Fri, 24 Sep 2021 14:03:47 +0100	upload: ./NA12878.hg38.bai to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/NA12878.hg38.bai
Fri, 24 Sep 2021 14:03:48 +0100	upload: ./GatherBamFiles-rc.txt to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/GatherBamFiles-rc.txt
Fri, 24 Sep 2021 14:03:49 +0100	upload: ./GatherBamFiles-stderr.log to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/GatherBamFiles-stderr.log
Fri, 24 Sep 2021 14:03:50 +0100	upload: ./GatherBamFiles-stdout.log to s3://agc-123412341234-eu-west-1/project/GATK/userid/danilop20tbvT/context/spotCtx/cromwell-execution/PreProcessingForVariantDiscovery_GATK4/630e2d53-0c28-4f35-873e-65363529c3de/call-GatherBamFiles/GatherBamFiles-stdout.log
Fri, 24 Sep 2021 14:03:50 +0100	*** COMPLETED DELOCALIZATION ***
Fri, 24 Sep 2021 14:03:50 +0100	*** EXITING WITH RETURN CODE ***
Fri, 24 Sep 2021 14:03:50 +0100	0

结果已写入账户激活期间创建的 S3 存储桶。存储桶的名称位于日志中,但我也可以发现它由 AWS Systems Manager 存储为参数。我可以使用以下命令将其保存在环境变量中:

$ export AGC_BUCKET=$(aws ssm get-parameter \
  --name /agc/_common/bucket \
  --query 'Parameter.Value' \
  --output text)

使用 AWS 命令行界面 (CLI),我现在可以浏览 S3 存储桶上的结果并获取工作流的输出。

在查看结果之前,我通过停止上下文来删除不需要的资源。这将销毁所有计算资源,但会将数据保留在 S3 中。

$ agc context destroy -c spotCtx

GitHub 上的文档提供了有关配置不同上下文和运行其他工作流的其他示例。

可用性和定价
Amazon Genomics CLI 是一种开源工具,除了 AWS GovCloud (美国) 和位于中国的区域之外,您现在可以在所有 AWS 区域使用它。使用 AWS Genomics CLI 无需支付任何费用。您需要为 CLI 创建的 AWS 资源付费。

使用 Amazon Genomics CLI,您可以专注于科学研究,而无需构建基础设施。这可以让您更快地启动工作,同时支持研究、开发和测试工作负载。对于可扩展到数千个并行工作流的生产工作负载,我们可以提供利用其他 Amazon 服务 (如 AWS Step Functions) 的建议方法,只需联系我们的客户团队以获取更多信息即可。

Danilo