
# 基于CCE的GATK4最佳实践流程
本节通过示例流程调用GCS的API启动示例流程的基因测序，介绍使用GCS API的基本流程。
启动完成的基因测序结果如下所示。
![](https://support.huaweicloud.com/api-gcs/zh-cn_image_0179363052.png "点击放大")
通过GCS执行基因测序流程的步骤如下：
1. 参照[3.1-构造请求](https://support.huaweicloud.com/api-gcs/gcs_api_003_001.html)中的调用方式获取用户Token，因为在后续的请求中需要将Token放到请求消息头中作为认证。
2. 调用[5.1.1-部署environment](https://support.huaweicloud.com/api-gcs/gcs_api_005_002.html)接口创建环境，为后续启动示例流程提供集群计算资源。
3. 登录GCS控制台，下载示例流程gatk4-best-practices.yaml，并调用[5.2.1-创建workflow](https://support.huaweicloud.com/api-gcs/gcs_api_005_0010.html)接口，上传示例流程作为自己的流程。
4. 调用[5.3.1-创建execution](https://support.huaweicloud.com/api-gcs/gcs_api_005_0020.html)接口执行计算流程，运行示例流程的基因测序。
5. 调用[5.3.3-删除execution](https://support.huaweicloud.com/api-gcs/gcs_api_005_0022.html)接口，删除测序流程，清理资源。
6. 如果后续不再需要此计算流程，调用[5.2.2-删除workflow](https://support.huaweicloud.com/api-gcs/gcs_api_005_0011.html)接口，删除workflow，清理资源。
7. 如果后续不再需要执行计算任务，可以调用[5.1.2-删除environment](https://support.huaweicloud.com/api-gcs/gcs_api_005_003.html)接口，删除环境，清理资源。
#### 前提条件
- 根据选择区域，获取对应的区域名称。当前GCS仅支持如[表1]所示区域。
   表1区域名称 
  | 区域     | 区域名称       |
  |:---|:---|
  | 华北-北京一 | cn-north-1 |
  | 华北-北京四 | cn-north-4 |
  | 华东-上海二 | cn-east-2  |
     
  
- 根据选择的区域，获取对应的IAM（请参见[地区和终端节点](https://developer.huaweicloud.com/endpoint)）、GCS的Endpoint（请参见[终端节点](https://support.huaweicloud.com/api-gcs/gcs_api_001.html#gcs_api_001__section1021116406182)）。
- 若您第一次使用GCS，请先访问[GCS控制台](https://console.huaweicloud.com/gcs/)，授权GCS服务使用其它相关服务。
- 已获取项目ID，具体请参见[获取项目ID](https://support.huaweicloud.com/api-gcs/gcs_api_006_003.html)。
- 已创建至少一个可用密钥对，具体请参见[创建密钥对](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0014250631.html)。
- 已创建OBS桶，桶的创建方法参见[添加OBS桶](https://support.huaweicloud.com/usermanual-obs/obs_03_0088.html)。
- 已创建的可用文件存储卷名称，CCE的文件存储卷的创建和导入参见[文件存储卷](https://support.huaweicloud.com/usermanual-cce/cce_10_0111.html)。
- 已创建的集群，集群创建方法参见[CCE的集群管理部分](https://support.huaweicloud.com/usermanual-cce/cce_10_0028.html)，创建好集群后，请设置弹性伸缩策略，可以参见[CCE插件管理的autoscaler](https://support.huaweicloud.com/usermanual-cce/cce_10_0154.html)。
 
#### 创建Environment
假设区域选择为华北北京四区，则前提条件中的信息为如下值（实际操作中您需要根据实际情况替换）：
- IAM的Endpoint为：iam.cn-north-4.myhuaweicloud.com
- GCS的Endpoint为：gcs.cn-north-4.myhuaweicloud.com
- 区域名称："cn-north-4"
- 秘钥对名称："KeyPair-3587"

- 项目ID：10556c21\*\*\*\*\*\*\*\*8bf10512591189e
- OBS桶：gene-container-bucket
- 集群ID：d9d8912d-a6cb-11e8-bc20-0255ac105709
1. 调用其他接口前，需要参见[3.1-构造请求](https://support.huaweicloud.com/api-gcs/gcs_api_003_001.html)中的调用方式获取token，并设置成环境变量。
   
   1. 获取token。 其中加粗的蓝色字体部分，需要替换为真实的数据。
      - iam_endpoint：IAM的Endpoint，以cn-north-4的Endpoint为例则应该为iam.cn-north-4.myhuaweicloud.com。
      
      - username：华为云的用户账号，必填项。
      
      - password：华为云的用户密码，必填项。
      
      - domainname：若是子账号，请填写对应的主账号名称。若不是子账号，请与username保持一致，必填项。
      
      - cn-north-4：此处以中国华北区4为例，必填项。
        ```
        curl -H "Content-Type:application/json" https://{iam_endpoint}/v3/auth/tokens -X POST -d '{"auth": {"identity":{"methods":["password"],"password":{"user":{"name":"username","password":"password","domain":{"name":"domainname"}}}},"scope":{"project":{"name":"cn-north-4"}}}}' -v -k
        ```
        
      
      
      响应Header中"X-Subject-Token"的值即为Token：
      ```
      X-Subject-Token:
      MIIDkgYJKoZIhvcNAQcCoIIDgzCCA38CAQExDTALBglghkgBZQMEAgEwgXXXXX...
      ```
      
   
   2. 使用如下命令将token设置为环境变量，方便后续使用。 **export Token=** *{* *X-Subject-Token}*
      **X-Subject-Token**即为上一步骤获取到的token，如下所示。
      ```
      export Token=MIIDkgYJKoZIhvcNAQcCoIIDgzCCA38CAQExDTALBglghkgBZQMEAgEwgXXXXX...
      ```
      
   
   3. 将API的入口地址设置为环境变量，方便后续事使用，入口地址为"https://*GCS_ENDPOINT* "。
      ```
      export GCS_Endpoint="https://gcs.cn-north-4.myhuaweicloud.com"
      ```
      
   
   
   
   
2. 创建环境。 
   调用[5.1.1-部署Environment](https://support.huaweicloud.com/api-gcs/gcs_api_005_002.html)接口，利用前提条件中已创建的集群创建GCS环境。
   ```
   curl -i -k -X POST -H "X-Auth-Token: $Token" ${GCS_ENDPOINT}/v1/environments -d '{"source":"cce","project_id":"10556c21********8bf10512591189e","cluster_id":"d9d8912d-a6cb-11e8-bc20-0255ac105709","bucket_name":"gene-container-bucket","env_name":"gcs-env-cce-new"}'
   ```
   命令中主要参数说明如下：
   - project_id: 前提条件中获取到的项目ID
   
   - source: 创建环境的来源 cce表示，创建cce环境
   
   - bucket_name: 前提条件中已创建的OBS桶名称
   
   - cluster_id：前提条件中已创建的集群ID
   
   - env_name：要创建的环境的名称
   
   
   创建成功的时候会返回环境的ID，为了后续操作，需要记录下环境的ID。
   ```
   {  
       "id": "6e03f731-9c31-569a-4121-6a10b6996458"
   }
   ```
   
   
3. 将环境ID设置为环境变量。 
   ```
   export ENVIRONMENT_ID=6e03f731-9c31-569a-4121-6a10b6996458
   ```
   
   
4. 查看环境。 
   调用5.1.4-查询Environment接口，查询GCS环境。
   ```
   curl -i -k -X GET -H "X-Auth-Token: $Token" ${GCS_ENDPOINT}/v1/environments/${ENVIRONMENT_ID}
   ```
   查询成功的时候会返回环境的详情。
   ```
   {
   "guid": "bcdd92fd-0380-e114-5dbe-38dac77857e9",
   "project_id": "10556c21********8bf10512591189e",
   "domain_id": "b0148a2cb********477bab429e48e7",
   "name": "gcs-env-cce-new",
   "description": "Gene container environment form cce",
   "status": "Running",
   "create_at": "2018-08-13T03:50:30Z",
   "update_at": "2018-08-13T07:27:02Z",
   "cluster_id": "d9d8912d-a6cb-11e8-bc20-0255ac105709",
   "cluster_name": "gcs-cluster",
   "cpu": 8,
   "memory": 16,
   "source": "cce",
   "stack_id": "10185add-acde-cc18-b8dd-b3a87a1f484c"
   "is_gene_cluster": false,
   "bucket_name": "gene-container-bucket",
   "default_env": false,
   "order_id": ""
   }
   ```
   
   
5. 将集群的ID设置为环境变量。 
   ```
   export CLUSTER_ID=d9d8912d-a6cb-11e8-bc20-0255ac105709
   ```
   
   
 
#### 创建Workflow
1. 登录GCS控制台，下载示例流程。 
   1. 选择左侧导航栏的"基因测序"\>"示例流程"。 
      ![](https://support.huaweicloud.com/api-gcs/zh-cn_image_0180684029.png "点击放大")
      
   
   2. 找到gcs-grammar示例流程，单击下载文件，保存示例流程到本地。 
      
   
   
   
   
2. 上传示例流程gcs-grammar.yaml到执行curl命令的服务器的任一路径，例如/home/gcs-user。
3. 进入服务器中流程文件所在路径，调用[创建workflow](https://support.huaweicloud.com/api-gcs/gcs_api_005_0010.html)接口，上传gatk4-best-practices.yaml作为自己的流程。
   
   ```
   curl -k -X POST -H "X-Auth-Token: ${Token}" -F 'resource={"name":"gcs-demo-workflow", "description":"gcs demo workflow", "filename":"gatk4-best-prectices.yaml" }' -F 'archive_content=@gatk4-best-prectices.yaml' ${GCS_Endpoint}/v1/workflows
   ```
   命令中参数说明如下：
   - name：流程名字。
   
   - description：流程描述。
   
   - filename：要上传的workflow文件的文件名
   
   - archive_content：要上传的workflow文件。如果执行curl命令时，未进入到模板文件所在路径，可以在此处加上路径，例如模板文件**gcs-grammar.yaml** 在**/home/gcs-user** 路径下，则命令为**archive_content=@** */home/gcs-user/gcs-grammar.yaml* 
   
   
   创建成功的时候会返回流程的ID，为了后续操作，需要记录下此流程的ID。
   ```
   {  
       "id": "f2637630-5d83-11e8-a6de-0255ac101a0c"
   }
   ```
   
   
4. 将workflow ID设置为环境变量。 
   ```
   export WORKFLOW_ID=d9d8912d-a6cb-11e8-bc20-0255ac105709
   ```
   
   
 
#### 创建Execution
假设已获取前提条件中的信息为如下值（实际操作中您需要根据实际情况替换）：
- 集群下文件存储卷名称："gcs-sfs-358712"

- 项目ID：10556c2112784111b8bf10512591189e
1. 调用[5.3.1-创建execution](https://support.huaweicloud.com/api-gcs/gcs_api_005_0020.html)接口，创建execution。
   
   ```
   curl -k -X POST -H "X-Auth-Token: $Token" ${GCS_Endpoint}/v1/executions -d '{"name":"gcs-demo-execution", "workflow_id": ${WORKFLOW_ID}, "cluster_id": ${CLUSTER_ID}, "sfs_pvc_name": "gcs-sfs-358712", "data_bucket_name": "gene-container-bucket", "target": "cce"}'
   ```
   命令中参数说明如下
   - name**：**自定义execution名称，例如gcs-demo-execution
   
   - workflow_id：创建流程过程中创建的流程ID
   
   - sfs_pvc_name：文件存储卷名称
   
   
   
   - cluster_id**：**创建环境过程中创建的集群ID
   
   - data_bucket_name：前提条件中的OBS桶
   
   - target：执行execution的环境类型，cce表示使用的是cce环境
   
   
   ```
   {  
       "id": "10185add-acde-cc18-b8dd-b3a87a1f484c"
   }
   ```
   
   
2. 将execution id设置为环境变量。 
   ```
   export EXECUTION_ID=10185add-acde-cc18-b8dd-b3a87a1f484c
   ```
   
   
3. 调用[查询execution](https://support.huaweicloud.com/api-gcs/gcs_api_005_0023.html)接口，查询execution。
   
   ```
   curl -k -X GET -H "X-Auth-Token: $Token" ${GCS_Endpoint}/v1/executions/${EXECUTION_ID}
   ```
   GCS界面可以查看运行成功的execution
   
   
 
#### 清理资源
假设已获取前提条件中的信息为如下值（实际操作中您需要根据实际情况替换）：
- 项目ID：10556c2112784111b8bf10512591189e
![](https://support.huaweicloud.com/api-gcs/public_sys-resources/notice_3.0-zh-cn.png)
OBS、SFS等资源如果不再需要，请至对应该服务的控制台手动删除。
1. 调用[删除execution](https://support.huaweicloud.com/api-gcs/gcs_api_005_0022.html)接口，删除创建的execution。
   
   ```
   curl -k -X DELETE -H "X-Auth-Token: $Token" ${GCS_Endpoint}/v1/executions/${EXECUTION_ID}
   ```
   如果使用的集群是创建环境时一并创建的，可以设置delete_cluster参数，将集群一并删除。
   ```
   curl -k -X DELETE -H "X-Auth-Token: $Token" ${GCS_Endpoint}/v1/executions/${EXECUTION_ID}?delete_cluster=true
   ```
   
   
2. 如果后续不再需要执行计算任务，调用[删除environment](https://support.huaweicloud.com/api-gcs/gcs_api_005_003.html)接口，删除创建的environment。
   
   ```
   curl -k -X DELETE -H "X-Auth-Token: $Token" ${GCS_Endpoint}/v1/environments/${ENVIRONMENT_ID}
   ```
   
   
3. 如果后续不再需要此计算流程，调用[删除workflow](https://support.huaweicloud.com/api-gcs/gcs_api_005_0011.html)接口，删除创建的workflow。
   
   ```
   curl -k -X DELETE -H "X-Auth-Token: $Token" ${GCS_Endpoint}/v1/workflow/${WORKFLOW_ID}
   ```
   
   
 
