實際測序任務中,您可能期望使用阿里雲AGS Remote Api來實現Mapping流程,而獲取Bam數據後續的Call操作期望在自己集群實現,本方案將討論如何使遠程的API調用和專有集群中的後續流程結合使用。
系統原理:
整個測序流程通過一個本地AGS工作流完成:工作流中嵌入一個或多個task,並調用Remote Api完成Fastq的Mapping流程;獲取Bam文件後,本地工作流來完成後續測序任務。
流程解讀:
上述系統包括幾個部分:
用戶IDC環境:包括測序儀系統、本地數據緩存、操作機;
用戶的阿里雲基因集群:用戶在ACK中申請的K8S專有集群;
阿里雲RemoteApi系統:通過API提供Mapping服務;
阿里雲OSS服務:用於保存用戶源數據、中間Bam數據、最終的vcf數據;
操作流程:
- 用戶IDC環境內,基因數據下線暫存;
- 用戶通過數據傳輸工具(Ossutil)將待處理的fastq數據上傳到阿里雲OSS存儲服務(用戶賬號下的OSS);
- 用戶通過AGS命令行工具,像用戶的專有集群提交測序服務;
- 測序工作流的task1:向阿里雲AGS服務提交RemoteApi請求,執行fastq數據的Mapping服務,task1等待mapping服務完成後再執行後面的任務;
- AGS Mapping服務會下載fastq數據,對比完成後會將bam數據上傳到oss;
- 用戶工作流完成剩餘的任務,下載bam文件、執行call變異、上傳最終數據等;
環境準備:
- AGS命令行下載地址:
詳見:https://help.aliyun.com/document_detail/148762.html
- OSS數據授權:
詳見:https://help.aliyun.com/document_detail/148762.html
- Fastq數據上傳
詳見:https://help.aliyun.com/document_detail/148762.html
任務提交:
提交混合方式的工作流,需要您編輯自己的工作流YAML模板,示例如下:
1. 模板示例:
具體應用需要根據業務進行定製,例如:
使用什麼RemoteApi接口?
在什麼位置調用?
具體的調用參數是什麼?
在專有集群中執行什麼任務?
等等,
下面示例,描述如何在一個工作流中即包含RemoteApi的調用,並進行專有集群任務的調用:
apiVersion: argoproj.io/v1alpha1
kind: Workflow #new type of k8s spec
metadata:
generateName: mpileup- #name of workflow spec
spec:
entrypoint: mpileup #invoke the whalesay template
arguments:
parameters:
- name: AKID
value: ""
- name: AKSEC
value: ""
- name: OSSURL
value: "oss-cn-shenzhen-internal.aliyuncs.com"
# fastq define
- name: region
value: "cn-shenzhen"
- name: bucket
value: "shenzhen"
- name: fastq1
value: "fastq/MGISEQ2000/MGISEQ2000_PCR-free_NA12878_1_V100003043_L01_1.fq.gz"
- name: fastq2
value: "fastq/MGISEQ2000/MGISEQ2000_PCR-free_NA12878_1_V100003043_L01_2.fq.gz"
# gene define
- name: bamFile
value: "output/bam/gene.bam"
- name: cpuNumber
value: "32"
- name: vcfFileName
value: "gene.vcf"
- name: service
value: "s"
templates:
- name: agsmapping
container:
image: registry.cn-hangzhou.aliyuncs.com/aliyun-gene-service/ags-cli:v1.0.1-a5a06af
imagePullPolicy: Always
command: [bash,-c]
args:
- region={{workflow.parameters.region}};
akID={{workflow.parameters.AKID}};
akSec={{workflow.parameters.AKSEC}};
akSecAuth=`echo -n $akSec | base64`;
mkdir -p /root/.ags; echo "{\"region\":\"cn-beijing\",\"access_key_id\":\"$akID\",\"access_key_secret\":\"$akSecAuth\",\"cluster_id\":\"\",\"kubectl_location\":\"\"}" > /root/.ags/config;
ags remote run mapping --region $region --fastq1 {{workflow.parameters.fastq1}} --fastq2 {{workflow.parameters.fastq2}} --bucket {{workflow.parameters.bucket}} --output-bam {{workflow.parameters.bamFile}} --markdup "true" --service {{workflow.parameters.service}} --reference=hg19 &> ags.log;
sucessline=`cat ags.log | awk -FJobName '{print $2}' | awk -F\" '{print $3}'`;
if [ "$sucessline" = "" ]; then
echo "ags submit with error "$res;
exit 1;
fi;
taskName=${sucessline:0:-1};
for ((i=0; i<100; i++));
do
success=`ags remote get $taskName | grep Succeeded | wc -l`;
if [ "$success" = "1" ]; then
echo "ags task successful";
break;
fi;
echo "exec command ags remote get $taskName";
sleep 60;
done;
- name: mpileupprepare
container:
image: registry.cn-shenzhen.aliyuncs.com/plugins/gene-tools:ags-hunhe
imagePullPolicy: Always
command: [sh,-c]
args:
- ossutil config -e {{workflow.parameters.OSSURL}} -i {{workflow.parameters.AKID}} -k {{workflow.parameters.AKSEC}};
bamFile={{workflow.parameters.bamFile}};
bamRootDir=/data;
mkdir -p $bamRootDir/$bamFile;
ossutil cp --parallel=100 oss://{{workflow.parameters.bucket}}/$bamFile $bamRootDir/$bamFile;
samtools view $bamRootDir/$bamFile/`basename $bamFile`;
resources:
requests:
memory: 2Gi
cpu: 2
- name: mpileup
dag:
tasks:
- name: agsmappingtask
template: agsmapping
- name: tasks-prepare
dependencies: [agsmappingtask]
template: mpileupprepare
過ags命令行工具提交工作流,參考文檔:https://help.aliyun.com/document_detail/121342.html
工作流編排模板,一般可以有兩部分:RemoteApi部分 + 專有集群任務部分;
例如編排模板可以有如下任務:
任務1:調用RemoteApi執行fastq數據的mapping流程,並等待mapping結束;
任務2:下載任務1生成的數據,並執行samtools view處理命令;
其中:registry.cn-hangzhou.aliyuncs.com/aliyun-gene-service/ags-cli:v1.0.1-a5a06af 為包含了ags命令行工具的鏡像,可以直接使用。
2. Remote Api命令解析:
AGS RemoteAPI提交命令如下:
ags remote run mapping \
--region cn-shenzhen # region of oss, e.g. cn-shenzhen, cn-beijing and etc\
--fastq1 MGISEQ/MGISEQ2000_PCR-free_NA12878_1_V100003043_L01_1.fq.gz # filename of fastq pair 2, fastq-path\filename \
--fastq2 MGISEQ/MGISEQ2000_PCR-free_NA12878_1_V100003043_L01_2.fq.gz # filename of fastq pair 1\
--bucket my-test-shenzhen # Bucket name\
--output-bam bam/MGISEQ_NA12878_hs37d5.bam # Output filename of BAM \
--service "g" #SLA: [n:normal|s:silver|g:gold|p:platinum]\
--markdup [true|false|default true] #Mark Duplicated, by default true
--reference [hg19|hg38|<reference path on OSS>]
service:提供服務等級,n為普通模式,處理速度較慢;s、g、p提供的服務使用更小的時間;