Amazon Web Services 한국 블로그

Amazon Genomics CLI, 유전체 데이터 처리 도구 오픈 소스로 정식 출시

70년도 채 되지 않은 기간 동안 우리는 역사상 가장 위대한 발견 중 하나인 DNA의 이중 나선 구조를 발견했습니다. 이제 우리는 DNA가 염기라고 불리는 네 가지 유형의 화합물로 구성된 일종의 꼬인 사다리라는 것을 알고 있습니다. 네 가지 염기는 일반적으로 아데닌(A), 구아닌(G), 시토신(C) 및 티민(T)과 같이 대문자로 구분됩니다. 이러한 화합물이 사다리의 양면에 있을 때 A는 항상 T와 결합하고 C는 항상 G와 결합한다는 것이 이중 나선 구조를 이루는 이유 중 하나입니다.

테이블에 있는 사다리를 펼치면 두 개의 ‘문자’ 서열을 볼 수 있고, 두 면에 각각 동일한 유전 정보가 있습니다. 예를 들어, 두 개의 시리즈(AGCTTCGA)가 다음과 같이 결합되어 있습니다.

A – T
G – C
C – G
T – A

이러한 일련의 문자는 매우 길 수 있습니다. 예를 들어 인간 게놈은 30억 자 이상의 코드로 구성되어 있으며 사람의 모든 세포에 대한 생물학적 청사진 역할을 합니다. 사람의 게놈에 있는 정보는 개인의 건강뿐만 아니라 전체 인구의 건강을 개선하도록 고도로 맞춤화한 치료법을 만드는 데 사용될 수 있습니다. 마찬가지로 유전체 데이터는 전염성 질병을 추적하고 진단을 개선하며, 전염병, 식품 병원균 및 독소를 추적하는 데 사용할 수 있습니다. 이는 환경 유전체학에서 부상하고 있는 분야입니다.

유전체 데이터에 액세스하려면 게놈 서열 분석(genome sequencing)이 필요한데, 최근에 기술이 발전하면서 어느 때보다 빠르고 효율적인 비용으로 대규모 집단을 분석할 수 있습니다. 향후 5년 동안 유전체 데이터 집합은 10억 개 이상의 염기 서열 게놈을 포함하게 될 것으로 추정됩니다.

유전체 데이터 분석 작동 방식
유전체 데이터 분석은 특정 단계 시퀀스 또는 워크플로로 오케스트레이션할 필요가 있는 다양한 도구를 사용합니다. 워크플로의 개발, 공유 및 실행을 용이하게 하려고 유전체학 및 생물 정보학 커뮤니티에서는WDL, Nextflow, CWLSnakemake와 같이 특수한 워크플로 정의 언어를 개발했습니다.

그러나 이 프로세스는 페타바이트 규모의 원시 유전체 데이터를 생성하므로 유전체학 및 생명 과학 전문가들은 대규모의 데이터를 처리하기 위해 컴퓨팅 및 스토리지 리소스를 조정하려고 노력하고 있습니다.

데이터를 처리하고 신속하게 답변을 제공하려면, 분석 도구와 함께 작동하도록 컴퓨팅, 스토리지 및 네트워킹 등의 클라우드 리소스를 구성해야 합니다. 결과적으로 과학자와 연구원은 많은 경우, 유전체학을 혁신하는 데 기여하는 대신, 인프라를 배포하고 오픈 소스 유전체학 분석 도구를 수정하는 데 귀중한 시간을 써야 합니다.

Amazon Genomics CLI 소개
몇 달 전, 페타바이트 규모로 유전체 데이터를 더 쉽게 처리할 수 있는 도구인 Amazon Genomics CLI미리 보기 출시했습니다. Amazon Genomics CLI는 현재 오픈 소스 프로젝트이며 지금 정식 출시 되었음을 공유하게 되어 기쁩니다. 공개적으로 사용 가능한 워크플로우와 함께 이 워크플로를 시작점으로 사용할 수 있으며, 이를 기반으로 분석을 개발할 수 있습니다.

Amazon Genomics CLI는 클라우드 인프라 배포를 간소화하고 자동화하여 AWS에서 유전체학 워크플로를 신속하게 설정하고 실행할 수 있도록 사용하기 쉬운 명령줄 인터페이스를 제공합니다. 클라우드에서 유전체학 워크플로우를 설정하고 실행하는 데 따른 부담을 제거함으로써 소프트웨어 개발자와 연구원은 클라우드 리소스를 자동으로 프로비저닝, 구성 및 크기를 조정하게 되고 더 빠르고 비용 효율적인 인구 수준의 유전학 연구, 신약 개발 주기 등을 지원할 수 있습니다.

Amazon Genomics CLI를 사용하면 최적화된 클라우드 인프라에서 워크플로를 실행할 수 있습니다. 더욱 구체적으로, 이 CLI의 특성은 다음과 같습니다.

  • 유전체학 워크플로 엔진이 AWS와 더 잘 통합될 수 있도록 개선되어, 오픈 소스 도구를 수동으로 수정하고 규모에 맞게 효율적으로 실행되도록 조정해야 하는 부담이 없습니다. 이러한 도구는Amazon Elastic Container Service(Amazon ECS), Amazon DynamoDB, Amazon Elastic File System(Amazon EFS)Amazon Simple Storage Service(Amazon S3)와 원활하게 작동하여, 컴퓨팅 및 스토리지 크기를 조정하면서 EC2 스팟 인스턴스와 같은 기능을 사용해 비용을 최적화하는 데 도움을 줍니다.
  • 스토리지 및 컴퓨팅 용량 프로비저닝, 유전체학 워크플로 엔진 배포, 워크플로를 실행할 때 사용되는 클러스터 튜닝과 같이 시간이 가장 많이 소요되는 작업을 하지 않아도 됩니다.
  • 워크로드에 따라 클라우드 리소스를 자동으로 늘리거나 줄여 너무 많거나 너무 적은 용량을 구매할 위험이 없습니다.
  • AWS 비용 및 사용 보고서와 같은 도구를 사용하여 다양한 AWS 서비스에서 유전체 데이터 분석과 관련된 비용을 이해할 수 있도록 리소스를 태그를 지정합니다.

Amazon Genomics CLI의 사용은 다음 세 가지 주요 개념을 기반으로 합니다.

워크플로 – WDL 또는 Nextflow 등의 언어로 작성된 생물 정보학 워크플로입니다. 단일 스크립트 파일이거나 여러 파일로 이루어진 패키지일 수 있습니다. 이러한 워크플로 스크립트 파일은 워크플로 정의이며 정의가 작성된 워크플로 언어와 같은 추가 메타데이터와 결합되어 CLI에서 적절한 컴퓨팅 리소스에서 워크플로를 실행하는 데 사용되는 워크플로 사양을 형성합니다.

컨텍스트 – 컨텍스트는 시간이 많이 걸리는 태스크를 캡슐화 및 자동화하여 워크플로 엔진을 구성하고 배포하며, 데이터 액세스 정책을 생성하고, 규모에 맞게 운영할 수 있도록 컴퓨팅 클러스터를 조정(AWS Batch를 사용하여 관리)합니다.

프로젝트 – 프로젝트는 워크플로, 데이터 집합 및 이들을 처리 시 사용하는 컨텍스트를 연결합니다. 사용자 관점에서 동일한 문제와 관련되거나 동일한 팀에서 사용하는 리소스를 처리합니다.

실제로 어떻게 작동하는지 알아보겠습니다.

Amazon Genomics CLI 사용
지침에 따라 Amazon Genomics CLI를 랩톱에 설치합니다. 이제agc 명령을 사용하여 유전체 워크로드를 관리할 수 있습니다. 사용 가능한 옵션은 다음과 같습니다.

$ agc --help

처음 사용할 때 AWS 계정을 활성화합니다.

$ agc account activate

S3 버킷, Virtual Private cloud(VPC) 및 DynamoDB 테이블을 포함하여 Amazon Genomics CLI에서 운영할 핵심 인프라가 생성됩니다. S3 버킷은 오래 유지되는 메타데이터에 사용되며, VPC는 컴퓨팅 리소스를 분리하는 데 사용됩니다.

필요한 경우 자체 VPC를 가져올 수 있습니다. AWS 명령줄 인터페이스(CLI)명명된 프로필 중 하나를 사용할 수도 있습니다. 이러한 방법으로 Amazon Genomics CLI에서 사용할 AWS 리전 및 AWS 계정을 사용자 지정할 수 있습니다.

로컬 설정에서 이메일 주소를 구성합니다. 이 옵션은 CLI로 생성된 리소스를 태깅하는 데 사용됩니다.

$ agc configure email me@example.net

Amazon Genomics CLI 설치 시 포함된 예제 폴더에 몇 가지 데모 프로젝트가 있습니다. 이러한 프로젝트는Cromwell 또는Nextflow 등 다른 엔진을 사용합니다. 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

이 프로젝트에는 네 가지 워크플로(hello, read, words-with-vowels haplotype)가 있습니다. 프로젝트에는 2개의 S3 버킷에 대한 읽기 전용 액세스 권한이 있으며 두 컨텍스트를 사용해 워크플로를 실행할 수 있습니다. 두 컨텍스트 모두 Cromwell 엔진을 사용합니다. 하나의 컨텍스트(spotCtx)는 Amazon EC2 스팟 인스턴스를 사용하여 비용을 최적화합니다.

demo-wdl-project 폴더에서 Amazon Genomics CLI를 사용하여 spotCtx 컨텍스트를 배포합니다.

$ agc context deploy -c spotCtx

몇 분 후 컨텍스트가 준비되어 워크플로를 실행할 수 있습니다. 시작된 후에는 컨텍스트에 시간당 0.40 USD의 기준 비용이 발생합니다. 워크플로를 실행하려고 생성한 리소스는 비용에 포함되지 않습니다. 리소스는 특정 사용 사례에 따라 달라집니다. 컨텍스트에는requestSpotInstances 플래그를 구성에 추가하여 스팟 인스턴스를 사용할 수 있는 옵션이 있습니다.

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 파일의 내용은 프로그래밍 언어를 알고 있으면 이해할 수 있습니다.

버전 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'
2021-09-24T13:13:07:22 +0100	download: s3://agc-123412341234-eu-west-1/scripts/1a82f9a96e387d78ae3786c967f97cc0 to tmp/tmp.498XAhEOy/batch-file-temp
2021-09-24T13:13:07:22 +0100	*** LOCALIZING INPUTS ***
2021-09-24T13: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
2021-09-24T13:13:07:23 +0100	*** COMPLETED LOCALIZATION ***
2021-09-24T13:13:07:23 +0100	Hello Amazon Genomics CLI!
2021-09-24T13:13:07:23 +0100	*** DELOCALIZING OUTPUTS ***
2021-09-24T13: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
2021-09-24T13: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
2021-09-24T13: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
2021-09-24T13:13:07:25 +0100	*** COMPLETED DELOCALIZATION ***
2021-09-24T13:13:07:25 +0100	*** EXITING WITH RETURN CODE ***
2021-09-24T13: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!

작동되었습니다! 이제 좀 더 복잡한 워크플로를 살펴보겠습니다. 프로젝트를 변경하기 전에 데모 프로젝트의 컨텍스트를 폐기합니다.

$ agc context destroy -c spotCtx

gatk-best-practices-project 폴더에는 프로젝트에서 사용할 수 있는 워크플로가 나열되어 있습니다.

$ agc workflow list

2021-09-24T11:41:14+01:00 𝒊 워크플로 나열.
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 𝒊  워크플로 실행. Workflow name: 'gatk4-data-processing', Arguments: '', Context: 'spotCtx'
630e2d53-0c28-4f35-873e-65363529c3de

몇 시간이 지나 워크플로가 종료되었습니다.

$ agc workflow status

2021-09-24T14:06:40+01:00 𝒊  워크플로 실행 표시. 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 ***
2021년 9월 24일 금요일, 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
2021년 9월 24일 금요일, 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
2021년 9월 24일 금요일, 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
2021년 9월 24일 금요일, 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
2021년 9월 24일 금요일, 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
2021년 9월 24일 금요일, 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
2021년 9월 24일 금요일, 14:03:50 +0100	*** COMPLETED DELOCALIZATION ***
2021년 9월 24일 금요일, 14:03:50 +0100	*** EXITING WITH RETURN CODE ***
2021년 9월 24일 금요일, 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를 사용하면 인프라를 설계하는 대신 과학 연구에 집중할 수 있습니다. 더 빠르게 시작하고 실행할 수 있으므로 연구, 개발 및 워크로드 테스트가 가능합니다. 수천 개의 병렬 워크플로로 크기가 조정되는 프로덕션 워크로드의 경우 AWS Step Functions와 같은 추가 Amazon 서비스를 활용하도록 권장 방법을 제공해 드릴 수 있으니, 자세한 내용은 계정 팀으로 문의하십시오.

Danilo