
# 创建组件 - CreateComponent
#### 功能介绍
创建组件。
#### 调试
您可以在[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/CAE/doc?api=CreateComponent)中调试该接口，支持自动认证鉴权。API Explorer可以自动生成SDK代码示例，并提供SDK代码示例调试功能。
#### 授权信息
账号具备所有API的调用权限，如果使用账号下的IAM用户调用当前API，该IAM用户需具备调用API所需的权限。
- 如果使用角色与策略授权，具体权限要求请参见[权限和授权项](https://support.huaweicloud.com/api-cae/cae_06_0016.html)。
- 如果使用身份策略授权，当前API调用无需身份策略权限。
#### URI
POST /v1/{project_id}/cae/applications/{application_id}/components
表1路径参数 
| 参数             | 是否必选 | 参数类型   | 描述                                                                                |
|:---|:---|:---|:---|
| project_id     | 是    | String | 项目ID，获取项目ID请参见[获取项目ID](https://support.huaweicloud.com/api-cae/cae_06_0021.html)。 |
| application_id | 是    | String | 应用ID。                                                                             |
#### 请求参数
表2请求Header参数 
| 参数                      | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                             |
|:---|:---|:---|:---|
| X-Auth-Token            | 是    | String | 用户Token。 - 获取Token，请参考《[统一身份认证服务API参考](https://support.huaweicloud.com/api-iam/iam_30_0001.html)》的"获取用户Token"章节。 - 请求响应成功后在响应消息头中包含的"X-Subject-Token"的值即为Token值。                                                               |
| X-Enterprise-Project-ID | 否    | String | 企业项目ID。 - 创建环境时，环境会绑定企业项目ID。 - 最大长度36字节，带"-"连字符的UUID格式，或者是字符串"0"。 - 该字段不传（或传为字符串"0"）时，则查询默认企业项目下的资源。 说明： 关于企业项目ID的获取及企业项目特性的详细信息，请参见《[企业管理服务用户指南](https://support.huaweicloud.com/usermanual-em/zh-cn_topic_0126101490.html)》。 |
| X-Environment-ID        | 是    | String | 环境ID。 - 获取环境ID，通过[获取环境列表](https://support.huaweicloud.com/api-cae/ListEnvironments.html)来获取环境信息。 - 请求响应成功后在响应体的items数组中的一个元素即为一个环境的信息，其中id字段即是环境ID。                                                                            |
   
表3请求Body参数 
| 参数          | 是否必选 | 参数类型                                                  | 描述                           |
|:---|:---|:---|:---|
| api_version | 是    | String                                                | API版本，固定值"v1"，该值不可修改。        |
| kind        | 是    | String                                                | API类型，固定值"Component"，该值不可修改。 |
| metadata    | 是    | [metadata] object | 请求数据。                        |
| spec        | 是    | [spec] object         | 组件规格信息。                      |
   
 表4metadata 
| 参数          | 是否必选 | 参数类型                 | 描述                                |
|:---|:---|:---|:---|
| name        | 是    | String               | 组件名称。                             |
| annotations | 是    | Map\<String,String\> | 创建组件请求体附加参数，当前只支持version参数，此参数必填。 |
   
 表5spec 
| 参数             | 是否必选 | 参数类型                                                            | 描述      |
|:---|:---|:---|:---|
| runtime        | 是    | String                                                          | 语言/运行时。 |
| replica        | 是    | Integer                                                         | 实例个数。   |
| build          | 否    | [Build] object                 | 构建信息。   |
| source         | 是    | [Source] object               | 源信息。    |
| resource_limit | 是    | [ResourceLimit] object | 实例规格。   |
| image_url      | 否    | String                                                          | 镜像地址。   |
   
 表6Build 
| 参数         | 是否必选 | 参数类型                                                | 描述                                                                                                                                                                            |
|:---|:---|:---|:---|
| archive    | 是    | [Archive] object | 构建产物纳管。                                                                                                                                                                       |
| parameters | 是    | Map\<String,String\>                                | 构建附加参数。 - base_image：基础镜像地址。 - build_cmd：自定义构建命令。 - dockerfile_path：自定义dockerfile文件路径 - dockerfile_content：自定义dockerfile内容 - artifact_name: 针对java多模块构建，指定构建后运行的产物，以".jar"结尾。 |
   
 表7Archive 
| 参数                 | 是否必选 | 参数类型   | 描述         |
|:---|:---|:---|:---|
| artifact_namespace | 否    | String | 产物纳管SWR组织。 |
   
 表8Source 
| 参数       | 是否必选 | 参数类型                                          | 描述                                                                                                                                                         |
|:---|:---|:---|:---|
| code     | 否    | [Repo] object | 源码仓库信息。                                                                                                                                                    |
| type     | 是    | String                                        | **参数解释：** 源类型。 **约束限制：** 更新组件时，源类型需要与创建组件时的源类型保持一致。 **取值范围：** - image：镜像 - code：源码 - softwarePackage：软件包 **默认取值：** 不涉及。                                    |
| sub_type | 否    | String                                        | 源子类型。 - 源类型为code时，子类型表示不同的代码仓库，如DevCloud（CodeArts）、GitLab、GitHub、Gitee、Bitbucket。 - 源类型为softwarePackage时，子类型表示不同的软件包仓库，如BinObs、BinDevCloud（CodeArts软件发布库）。 |
| url      | 是    | String                                        | url地址。 - 源类型为image时，url地址为镜像地址。 - 源类型为code时，url地址为git地址。 - 源类型为softwarePackage时，url地址为软件包地址。                                                               |
   
 表9Repo 
| 参数        | 是否必选 | 参数类型   | 描述                     |
|:---|:---|:---|:---|
| auth_name | 否    | String | 授权名称。                  |
| branch    | 否    | String | 分支。                    |
| namespace | 否    | String | 命名空间，需填写命名空间的Base64编码。 |
   
 表10ResourceLimit 
| 参数           | 是否必选 | 参数类型   | 描述     |
|:---|:---|:---|:---|
| cpu_limit    | 是    | String | cpu限额。 |
| memory_limit | 是    | String | 内存限额。  |
   
#### 响应参数
**状态码：200**
表11响应Body参数 
| 参数          | 参数类型                                                                         | 描述                           |
|:---|:---|:---|
| api_version | String                                                                       | API版本，固定值"v1"，该值不可修改。        |
| kind        | String                                                                       | API类型，固定值"Component"，该值不可修改。 |
| metadata    | [MetadataResponse] object       | 响应数据。                        |
| spec        | [CreateComponentSpec] object | 组件规格。                        |
   
 表12MetadataResponse 
| 参数          | 参数类型                 | 描述                                                                           |
|:---|:---|:---|
| id          | String               | 组件ID。                                                                        |
| name        | String               | 组件名称。                                                                        |
| annotations | Map\<String,String\> | 组件附加属性。 - log_group_id：LTS日志组的ID。 - log_stream_id：LTS日志流的ID。 - version：组件版本。 |
| created_at  | String               | 创建时间。                                                                        |
| updated_at  | String               | 更新时间。                                                                        |
   
 表13CreateComponentSpec 
| 参数                | 参数类型                                                             | 描述                                                                    |
|:---|:---|:---|
| runtime           | String                                                           | 语言/运行时。                                                               |
| env_id            | String                                                           | 环境ID。                                                                 |
| replica           | Integer                                                          | 实例个数。                                                                 |
| source            | [Source] object               | 源信息。                                                                  |
| build             | [Build] object                 | 构建信息。                                                                 |
| resource_limit    | [ResourceLimit] object | 实例规格。                                                                 |
| available_replica | Integer                                                          | 可用实例个数。                                                               |
| status            | String                                                           | 组件状态。 - created: 未部署。 - running: 运行中。 - paused: 已停止。 - notReady: 未就绪。 |
   
 表14Source 
| 参数       | 参数类型                                           | 描述                                                                                                                                                         |
|:---|:---|:---|
| code     | [Repo] object | 源码仓库信息。                                                                                                                                                    |
| type     | String                                         | **参数解释：** 源类型。 **约束限制：** 更新组件时，源类型需要与创建组件时的源类型保持一致。 **取值范围：** - image：镜像 - code：源码 - softwarePackage：软件包 **默认取值：** 不涉及。                                    |
| sub_type | String                                         | 源子类型。 - 源类型为code时，子类型表示不同的代码仓库，如DevCloud（CodeArts）、GitLab、GitHub、Gitee、Bitbucket。 - 源类型为softwarePackage时，子类型表示不同的软件包仓库，如BinObs、BinDevCloud（CodeArts软件发布库）。 |
| url      | String                                         | url地址。 - 源类型为image时，url地址为镜像地址。 - 源类型为code时，url地址为git地址。 - 源类型为softwarePackage时，url地址为软件包地址。                                                               |
   
 表15Repo 
| 参数        | 参数类型   | 描述                     |
|:---|:---|:---|
| auth_name | String | 授权名称。                  |
| branch    | String | 分支。                    |
| namespace | String | 命名空间，需填写命名空间的Base64编码。 |
   
 表16Build 
| 参数         | 参数类型                                                 | 描述                                                                                                                                                                            |
|:---|:---|:---|
| archive    | [Archive] object | 构建产物纳管。                                                                                                                                                                       |
| parameters | Map\<String,String\>                                 | 构建附加参数。 - base_image：基础镜像地址。 - build_cmd：自定义构建命令。 - dockerfile_path：自定义dockerfile文件路径 - dockerfile_content：自定义dockerfile内容 - artifact_name: 针对java多模块构建，指定构建后运行的产物，以".jar"结尾。 |
   
 表17Archive 
| 参数                 | 参数类型   | 描述         |
|:---|:---|:---|
| artifact_namespace | String | 产物纳管SWR组织。 |
   
 表18ResourceLimit 
| 参数           | 参数类型   | 描述     |
|:---|:---|:---|
| cpu_limit    | String | cpu限额。 |
| memory_limit | String | 内存限额。  |
   
#### 请求示例
- 使用源码仓库创建组件，组件名称"test-code"，版本"1.0.0"，选择GitLab源码仓库，运行时为Java8。
  ```
  POST https://{endpoint}/v1/{project_id}/cae/applications/{application_id}/components
  {
    "api_version" : "v1",
    "kind" : "Component",
    "metadata" : {
      "name" : "test-code",
      "annotations" : {
        "version" : "1.0.0"
      }
    },
    "spec" : {
      "runtime" : "Java8",
      "build" : {
        "archive" : {
          "artifact_namespace" : "xxx"
        },
        "parameters" : {
          "base_image" : "openjdk:8u181-jdk-alpine",
          "dockerfile_path" : "./Dockerfile"
        }
      },
      "source" : {
        "type" : "code",
        "sub_type" : "GitLab",
        "url" : "https://xxx:8090/xxx/cae-frontend.git",
        "code" : {
          "branch" : "master",
          "auth_name" : "gitlab-xxx",
          "namespace" : "em1n"
        }
      },
      "resource_limit" : {
        "cpu_limit" : "500m",
        "memory_limit" : "1Gi"
      },
      "replica" : 1
    }
  }
  ```
- 使用镜像创建组件，组件名称"test-image"，版本"1.0.0"，选择nginx镜像，运行时为Docker。
  ```
  POST https://{endpoint}/v1/{project_id}/cae/applications/{application_id}/components
  {
    "api_version" : "v1",
    "kind" : "Component",
    "metadata" : {
      "name" : "test-image",
      "annotations" : {
        "version" : "1.0.0"
      }
    },
    "spec" : {
      "runtime" : "Docker",
      "source" : {
        "type" : "image",
        "url" : "nginx:stable-alpine-perl"
      },
      "resource_limit" : {
        "cpu_limit" : "500m",
        "memory_limit" : "1Gi"
      },
      "replica" : 1
    }
  }
  ```
- 使用软件包创建组件，组件名称"test-jar"，版本"1.0.0"，在OBS对象存储中选择名称为"forecast-1.0.0.jar"的软件包，运行时为Java8。
  ```
  POST https://{endpoint}/v1/{project_id}/cae/applications/{application_id}/components
  {
    "api_version" : "v1",
    "kind" : "Component",
    "metadata" : {
      "name" : "test-jar",
      "annotations" : {
        "version" : "1.0.0"
      }
    },
    "spec" : {
      "runtime" : "Java8",
      "build" : {
        "archive" : {
          "artifact_namespace" : "xxx"
        },
        "parameters" : {
          "base_image" : "openjdk:8u181-jdk-alpine",
          "dockerfile_content" : "FROM java:8 \\nADD forecast-1.0.0.jar \\nEXPOSE 8080 \\nENTRYPOINT [\"java\",\"-jar\",\"forecast-1.0.0.jar\"]"
        }
      },
      "source" : {
        "type" : "softwarePackage",
        "sub_type" : "BinObs",
        "url" : "https://xxx.obs.region.xxx.huawei.com/xxx/forecast-1.0.0.jar"
      },
      "resource_limit" : {
        "cpu_limit" : "500m",
        "memory_limit" : "1Gi"
      },
      "replica" : 1
    }
  }
  ```
#### 响应示例
**状态码：200**
请求成功。
```
{
  "api_version": "v1",
  "kind": "Component",
  "metadata": {
    "id": "cac09548-047f-46c4-abbd-a6a652305565",
    "name": "test-code",
    "annotations": {
      "log_group_id": "5b13213a-84f8-4b72-8ca5-530e15cc1402",
      "log_stream_id": "6ddf6c71-4767-46db-98a2-fe5fb301b366",
      "version": "1.0.0"
    },
    "created_at": "2023-02-13T02:38:22.689607114Z",
    "updated_at": "2023-02-13T02:38:22.689607114Z"
  },
  "spec": {
    "runtime": "Java8",
    "env_id": "9819b3f5-dd08-44ff-ba88-eb38e435594c",
    "replica": 1,
    "source": {
      "type": "code",
      "sub_type": "GitLab",
      "url": "http://xxx@cpe.gitlab.com:8090/xxx/cae-backend.git",
      "code": {
        "branch": "master",
        "auth_name": "gitlab-xxx",
        "namespace": "em1n"
      }
    },
    "build": {
      "archive": {
        "artifact_namespace": "xxx"
      },
      "parameters": {
        "base_image": "openjdk:8u181-jdk-alpine"
        "dockerfile_path": "./Dockerfile"
      }
    },
    "resource_limit": {
      "cpu_limit": "500m",
      "memory_limit": "1Gi"
    },
    "available_replica": 0,
    "status": "created"
  }
}
```
#### 状态码
| 状态码 | 描述    |
|:---|:---|
| 200 | 请求成功。 |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-cae/ErrorCode.html)。
