# 创建缓存实例
#### 功能介绍
创建缓存实例，该接口创建的缓存实例支持按需计费和包周期两种方式。
#### URI
POST /v1.0/{project_id}/instances
参数说明见[表1]。
 表1参数说明 
| 参数          | 类型      | 必选 | 说明                                                                                 |
|:---|:---|:---|:---|
| project_id | String | 是     | 项目ID。获取方式，参考[获取项目ID](https://support.huaweicloud.com/api-dcs/dcs-api-0312045.html)。 |
   
#### 请求消息
**请求参数**
参数说明见[表2]。
 表2参数说明 
| 参数                        | 类型               | 必选 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
|:---|:---|:---|:---|
| name                     | String            | 是   | 实例名称。 由英文字符开头，只能由英文字母、数字、中划线和下划线组成。 创建单个实例时，名称长度为4到64位的字符串。批量创建实例时，名称长度为4到56位的字符串，且实例名称格式为"自定义名称-*n*"，其中n从000开始，依次递增。例如，批量创建两个实例，自定义名称为dcs_demo，则两个实例的名称为dcs_demo-000和dcs_demo-001。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| description               | String            | 否   | 实例的描述信息。 长度不超过1024的字符串。 说明： \\与"在json报文中属于特殊字符，如果参数值中需要显示\\或者"字符，请在字符前增加转义字符\\，比如**\\\\** 或者**\\"**。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| engine                     | String            | 是  | 缓存引擎：Redis和Memcached。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| engine_version            | String          | 是  | 缓存版本。当缓存引擎为Redis时，该字段为必填，取值为3.0、4.0或5.0。当缓存引擎为Memcached时，该字段为可选，取值可为空。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| capacity                | Float           | 是   | 缓存容量（G Byte）。 - Redis3.0：单机和主备类型实例取值：2、4、8、16、32、64。Proxy集群实例规格支持64、128、256、512和1024。  - Redis4.0和Redis5.0：单机和主备类型实例取值：0.125、0.25、0.5、1、2、4、8、16、32、64。Cluster集群实例规格支持24、32、48、64、96、128、192、256、384、512、768、1024。  - Memcached：单机和主备类型实例取值：2、4、8、16、32、64。                                                                                                                                                                                                                                                                                                                                                                 |
| no_password_access        | String          | 是 | 是否允许免密码访问缓存实例。 - true：该实例无需密码即可访问。  - false：该实例必须通过密码认证才能访问。   若未配置该参数则默认值为"false"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| password                  | String            | 否   | 缓存实例的认证信息。 说明： 当"no_password_access"配置为"false"或未配置时，请求消息中须包含password参数。 Redis类型的缓存实例密码复杂度要求： - 输入长度为8到32位的字符串。  - 新密码不能与旧密码相同。  - 必须包含如下四种字符中的三种组合： - 小写字母  - 大写字母  - 数字  - 特殊字符包括（\`\~!@#$%\^\&\*()-_=+\\\|\[{}\]:'",\<.\>/?）     |
| access_user              | String            | 否  | 当缓存类型为Redis时，则不需要设置，保持为空即可。 当缓存引擎为Memcached，且"no_password_access"为"false"时才需要设置，表示通过密码认证访问缓存实例的认证用户名。 由英文字符开头，只能由英文字母、数字、中划线和下划线组成，长度为1\~64的字符。 说明： - 当缓存引擎为Memcached时，该参数为可选项。  - 当缓存引擎为Redis时，该参数不需要设置。                                                                                                                                                                                                                                                                                                                                                                                                                |
| vpc_id                   | String            | 是    | 虚拟私有云ID。 获取方法如下： - 方法1：登录虚拟私有云服务的控制台界面，在虚拟私有云的详情页面查找VPC ID。  - 方法2：通过虚拟私有云服务的API接口查询，具体操作可参考[查询VPC列表](https://support.huaweicloud.com/api-vpc/vpc_api01_0003.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| security_group_id         | String            | 是    | 指定实例所属的安全组。 获取方法如下： - 方法1：登录虚拟私有云服务的控制台界面，在安全组的详情页面查找安全组ID。  - 方法2：通过虚拟私有云服务的API接口查询，具体操作可参考[查询安全组列表](https://support.huaweicloud.com/api-vpc/vpc_sg01_0002.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| subnet_id                 | String          | 是 | 子网的网络ID。 获取方法如下： - 方法1：登录虚拟私有云服务的控制台界面，单击VPC下的子网，进入子网详情页面，查找网络ID。  - 方法2：通过虚拟私有云服务的API接口查询，具体操作可参考[查询子网列表](https://support.huaweicloud.com/api-vpc/vpc_subnet01_0003.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| available_zones            | Array           | 是   | 创建缓存节点到指定且有资源的可用区ID。具体查询方法，请参考[查询可用区信息](https://support.huaweicloud.com/api-dcs/dcs-api-0312039.html)，在查询时，请注意查看该可用区是否有资源。 如果是创建主备、Proxy集群、Cluster集群实例，支持跨可用区部署，可以为备节点指定备可用区。在为节点指定可用区时，用逗号分隔开，具体请查看示例。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| product_id             | String         | 是  | 支持创建的产品的标识。具体查询方法，请参考[查询产品规格列表](https://support.huaweicloud.com/api-dcs/dcs-api-0312040.html)。 参数取值格式为：spec_code+"-"+ 计费模式缩写，计费模式缩写取值范围有：h、m、y。其中，h表示计费模式为按需；m表示计费模式为包月；y表示计费模式为包年。 例如：redis.single.au1.large.1-h，表示规格redis.single.au1.large.1的按需计费产品ID。 说明： 在查询产品规格中获取product_id时，请务必确保获取的product_id对应的计费模式和您选择的计费模式一致。例如，要订购按需计费、实例类型为Redis3.0的主备实例，可从接口响应消息中，查找charging_type字段为Hourly、spec_code字段为dcs.master_standby的记录对应的product_id。                                                                                                                                                                                                                                                                                                                                 |
| instance_backup_policy    | JSON          | 否  | 备份策略，实例类型为主备和集群时支持。具体备份参数，请参考[表4]和[表5]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| enable_publicip          | Boolean          | 否     | Redis缓存实例是否开启公网访问功能。 - true：开启  - false：不开启                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| publicip_id               | String            | 否   | Redis缓存实例绑定的弹性IP地址的id。 如果开启了公网访问功能（即enable_publicip为true），该字段为必选。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| enable_ssl              | Boolean        | 否  | Redis缓存实例开启公网访问功能时，是否选择支持ssl。 - true：开启  - false：不开启                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| maintain_begin         | String           | 否 | 维护时间窗开始时间，格式为HH:mm:ss。 - 维护时间窗开始和结束时间必须为指定的时间段，可参考[查询维护时间窗时间段](https://support.huaweicloud.com/api-dcs/dcs-api-0312041.html)获取。  - 开始时间必须为22:00:00、02:00:00、06:00:00、10:00:00、14:00:00和18:00:00。  - 该参数不能单独为空，若该值为空，则结束时间也为空。系统分配一个默认开始时间02:00:00。                                                                                                                                                                                                                                                                                                                                                                           |
| maintain_end            | String          | 否 | 维护时间窗结束时间，格式为HH:mm:ss。 - 维护时间窗开始和结束时间必须为指定的时间段，可参考[查询维护时间窗时间段](https://support.huaweicloud.com/api-dcs/dcs-api-0312041.html)获取。    - 结束时间在开始时间基础上加四个小时，即当开始时间为22:00:00时，结束时间为02:00:00。  - 该参数不能单独为空，若该值为空，则开始时间也为空，系统分配一个默认结束时间06:00:00。                                                                                                                                                                                                                                                                                                                                      |
| enterprise_project_id     | String           | 否 | 企业项目ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| enterprise_project_name | String         | 否 | 企业项目名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| instance_num              | Integer         | 否 | 表示批量创建缓存实例时，购买的实例个数。仅Redis和Memcached实例支持批量创建。 默认值：1 取值范围：1-100                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| private_ip             | String          | 否 | 创建缓存实例手动指定的IP地址,支持Redis和Memcached。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| bss_param                   | JSON               | 否     | 表示包周期计费模式的相关参数。如果为空，则默认计费模式为按需计费；如果是包周期方式，请参考[表6]设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| tags                      | Array of objects | 否   | 实例标签键值。具体请参考[表3]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| port                    | Integer         | 否 | 实例自定义端口。只有创建Redis4.0和Redis5.0实例才支持自定义端口，Redis3.0和Memcached实例不支持。 创建Redis4.0和Redis5.0实例，如果没发送该参数或该参数为空，表示实例使用默认端口6379。如果自定义端口，端口范围为1\~65535的任意数字。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| rename_commands             | JSON              | 否    | 支持自定义重命名高危命令。只有创建Redis4.0和Redis5.0实例才支持重命名高危命令，Redis3.0和Memcached实例不支持。 创建Redis4.0和Redis5.0实例，如果没发送该参数或该参数为空，表示没有需要重命名的命令。当前支持重命名的高危命令有command、keys、flushdb、flushall和hgetall，其他命令暂不支持重命名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   
 表3tags参数说明 
| 参数     | 是否必选 | 参数类型    | 描述                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| key     | 否       | String  | 标签键。 - 不能为空。  - 对于同一资源键值唯一。  - 长度不超过36个字符。   |
| value | 否      | String | 标签值。 - action为create时，必选。action为delete时，非必选。  - 长度不超过43个字符。                                                          |
   
 表4备份策略 
| 参数                    | 类型      | 必选  | 说明                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| save_days              | Integer | 否   | 当backup_type设置为manual时，该参数为必填。 保留天数，单位：天，取值范围：1-7。                                                                                                                                                                          |
| backup_type          | String  | 否 | 备份类型。 - auto：自动备份  - manual：手动备份   默认值是：manual。 |
| periodical_backup_plan | JSON  | 是   | 备份计划，具体请参考[表5]。                                                                                                                                                                                                       |
   
 表5备份计划 
| 参数                | 类型    | 必选 | 说明                                                      |
|:---|:---|:---|:---|
| begin_at           | String  | 是   | 备份执行时间，"00:00-01:00"代表0点开始执行备份。                           |
| period_type      | String | 是   | 备份周期类型，目前支持"weekly"。                                     |
| backup_at          | Array | 是  | 每周的周几开始备份，取值1-7，1代表周一，7代表周日。                           |
| timezone_offset | String | 否   | 备份的时区。取值为-1200 \~+1200之间的时区。若为空则默认使用DCS-Server节点的当前时区。 |
   
 表6bss_param参数说明 
| 参数             | 类型     | 必选 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
|:---|:---|:---|:---|
| charging_mode | String  | 是    | 功能说明：付费方式（预付费、按需付费；预付费，即包周期付费） 取值范围： - prePaid -预付费，即包年包月；  - postPaid -后付费，即按需付费；   默认值是postPaid。 后付费的场景下，bss_param参数的其他字段都会被忽略。                                                                                                                                                                   |
| is_auto_pay    | String   | 否    | 功能说明：下单订购后，是否自动从客户的账户中支付；默认是"不自动支付" 取值范围： - true：是（自动支付，从账户余额自动扣费）  - false：否（默认值，只提交订单不支付，需要客户手动去支付）   约束： 自动支付时，只能使用账户的现金支付；如果要使用代金券，请选择不自动支付，然后在用户费用中心，选择代金券支付。 **如果没有设置成自动支付，即设置为false时，在创建实例之后，实例状态为"支付中"，用户必须在"费用中心 \> 我的订单"，完成订单支付，否则订单一直在支付中，实例没有创建成功。** |
| period_type     | String | 否   | 当选择包年包月时，该字段为必选，表示订购资源的周期类型。 取值范围如下： - month：表示包月  - year：表示包年                                                                                                                                                                                                                                                                                                         |
| period_num      | Integer   | 否      | 功能说明：订购周期数 取值范围：(后续会随运营策略变化) - period_type为month时，为\[1,9\]，  - period_type为year时，为\[1,3\]   约束：同period_type约束。                                                                                                                                                                                                                        |
| is_auto_renew  | String | 否  | 当选择包年包月时，该字段为必选，表示是否自动续订资源。 取值范围： - false：不自动续订；  - true：自动续订；   默认值为：false 约束： 如果设置为自动续订，到期后，会自动续订一个月（自动续订时间后续可能会变化），详情可联系技术支持咨询。                                                                                                                     |
   
**请求示例**
请求URL：
```
POST https://{dcs_endpoint}/v1.0/{project_id}/instances
```
- 示例：
  **创建Redis实例**
  ```
  {
      "name": "dcs-APITest",
      "description": "Test",
      "engine": "Redis",
      "engine_version": "3.0",
      "capacity": 2,
      "enterprise_project_id": "0",
      "enterprise_project_name": "default",
      "no_password_access": false,
      "access_user": "",
      "password": "********",
      "vpc_id": "0402ea19-5457-4032-9d1b-eb48b98f6c66",
      "security_group_id": "4b95a790-5cfc-463d-8de5-42199e55371c",
      "subnet_id": "a3bd29e4-d5bc-414c-a79a-1f35ee4ead88",
      "available_zones": [
          "12c47a78666b4e438cd0c692b9860387"
      ],
      "maintain_begin": "02:00",
      "maintain_end": "06:00",
      "product_id": "dcs.master_standby-h",
      "enable_publicip": false,
      "publicip_id": "",
      "enable_ssl": false,
      "private_ip": "",
      "instance_num": 1
  }
  ```
  
- 示例 **创建按需的Redis主备实例（设置了标签、自定义端口、重命名高危命令、跨可用区部署）**
  ```
  {
  "name": "dcs-demo",
  "engine": "Redis",
  "engine_version": "4.0",
  "capacity": 2,
  "no_password_access": true,
  "vpc_id": "c5cd009b-9ba9-41f2-9a26-2b8c3f3ffd39",
  "subnet_id": "7e95c4d6-d7af-424c-a3cf-2be10968fe81",
  "product_id": "redis.ha.au1.large.2-h",
  "available_zones": ["ae04cf9d61544df3806a3feeb401b204","d573142f24894ef3bd3664de068b44b0"],
  "security_group_id": "d57fad27-e3e9-43b7-9498-0a698ab63b27",
  "port": "4040",
          "rename_commands": 
           {
             "keys":"keys001",
             "flushdb":"flushdb001",
             "flushall":"flushall001"
           },
  "tags": [{
  "key": "dcs001",
  "value": "002"
  },
  {
  "key": "dcs003",
  "value": "004"
  }]
  }
  ```
  
- 示例： **创建包周期的Redis主备实例（设置了备份策略）**
  ```
  {
      "name": "dcs-APITest1",
      "description": "",
      "engine": "Redis",
      "engine_version": "3.0.7",
      "capacity": 2,
      "enterprise_project_id": "0",
      "enterprise_project_name": "default",
      "no_password_access": false,
      "access_user": "",
      "password": "********",
      "vpc_id": "0402ea19-5457-4032-9d1b-eb48b98f6c66",
      "security_group_id": "4b95a790-5cfc-463d-8de5-42199e55371c",
      "subnet_id": "a3bd29e4-d5bc-414c-a79a-1f35ee4ead88",
      "available_zones": [
          "12c47a78666b4e438cd0c692b9860387"
      ],
      "maintain_begin": "02:00",
      "maintain_end": "06:00",
      "product_id": "dcs.master_standby-m",
      "enable_publicip": false,
      "publicip_id": "",
      "enable_ssl": false,
      "instance_num": 1,
      "private_ip": "",
      "instance_backup_policy": {
          "save_days": 1,
          "backup_type": "auto",
          "periodical_backup_plan": {
              "begin_at": "16:00-17:00",
              "period_type": "weekly",
              "backup_at": [
                  "1",
                  "2",
                  "3",
                  "4",
                  "5",
                  "6",
                  "7"
              ],
              "timezone_offset": "+0800"
          }
      },
  "bss_param": {
          "charging_mode": "prePaid",
          "is_auto_pay": "true",
          "period_type": "month",
          "period_num": "1",
          "is_auto_renew": "false"
      }
  }
  ```
  
- 示例： **创建包周期的Redis集群实例（设置了备份策略）**
  ```
  {
      "name": "dcs-k3ej",
      "description": "",
      "engine": "Redis",
      "engine_version": "3.0.7",
      "capacity": 64,
      "enterprise_project_id": "0",
      "enterprise_project_name": "default",
      "no_password_access": true,
      "access_user": "",
      "password": "",
      "vpc_id": "0402ea19-5457-4032-9d1b-eb48b98f6c66",
      "security_group_id": "4b95a790-5cfc-463d-8de5-42199e55371c",
      "subnet_id": "a3bd29e4-d5bc-414c-a79a-1f35ee4ead88",
      "available_zones": [
          "12c47a78666b4e438cd0c692b9860387"
      ],
      "maintain_begin": "02:00",
      "maintain_end": "06:00",
      "product_id": "dcs.cluster-m",
      "enable_publicip": false,
      "publicip_id": "",
      "enable_ssl": false,
      "instance_num": 1,
      "private_ip": "",
      "instance_backup_policy": {
          "save_days": 1,
          "backup_type": "auto",
          "periodical_backup_plan": {
              "begin_at": "16:00-17:00",
              "period_type": "weekly",
              "backup_at": [
                  "1",
                  "2",
                  "3",
                  "4",
                  "5",
                  "6",
                  "7"
              ],
              "timezone_offset": "+0800"
          }
      },
  "bss_param": {
          "charging_mode": "prePaid",
          "is_auto_pay": "true",
          "period_type": "month",
          "period_num": "1",
          "is_auto_renew": "false"
      }
  }
  ```
  
- 示例： **创建Memcached主备实例（设置了备份策略）**
  ```
  {
      "name": "dcs-a11b",
      "description": "Create an instance",
      "engine": "Memcached",
      "engine_version": "",
      "capacity": 2,
      "password": "XXXXXX",
      "vpc_id": "27d99e17-42f2-4751-818f-5c8c6c03ff16",
      "security_group_id": "1477393a-29c9-4de5-843f-18ef51257c8e",
      "subnet_id": "ec2f34b9-20eb-4872-85bd-bea9fc943129",
      "available_zones": [
          "1d7b939b382c4c3bb3481a8ca10da769"
      ],
      "product_id": "XXXXXX",
      "instance_backup_policy": {
          "save_days": 1,
          "backup_type": "auto",
          "periodical_backup_plan": {
              "begin_at": "00:00-01:00",
              "period_type": "weekly",
              "backup_at": [
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7
              ]
          }
      },
      "maintain_begin": "22:00:00",
      "maintain_end": "02:00:00",
      "no_password_access": "true",
      "access_user": "",
      "timezone_offset":""
  }
  ```
  
 
#### 响应消息
**响应参数**
参数说明见[表7]。
 表7参数说明 
| 参数          | 类型     | 说明                                                                                                                                               |
|:---|:---|:---|
| instance_id | String | 缓存实例ID。 如果批量创建实例，则会返回多个实例ID，以逗号分隔。 说明： 该参数用于兼容老版本，参数列出的实例列表与**instances**相同。 |
| instances  | JSON   | 缓存实例列表。具体参数，请参考[表8]。                                                                                        |
   
 表8instances参数说明 
| 参数            | 类型      | 说明    |
|:---|:---|:---|
| instance_id  | String | 缓存实例ID。 |
| instance_name | String   | 缓存实例名称。  |
   
**响应示例**
如果是按需实例，响应消息如下：
```
{
    "instances": [
        {
            "instance_id": "3c49fd6b-fc7c-419e-9644-b6cce008653f",
            "instance_name": "dcs-test005"
        }
    ],
    "instance_id": "3c49fd6b-fc7c-419e-9644-b6cce008653f"
}
```
如果是包周期实例，响应消息如下：
```
{
    "instance_id": "77284d69-cd51-4bf1-aa30-2e60f055800c",
    "order_id": "CS2005091653L2DAM",
    "instances": [
        {
            "instance_id": "77284d69-cd51-4bf1-aa30-2e60f055800c",
            "instance_name": "dcs-APITest1"
        }
    ]
}
```
#### **状态码**
操作成功的状态码如[表9]所示，其他响应见[表1](https://support.huaweicloud.com/api-dcs/dcs-api-0312043.html#dcs-api-0312043__table5210141351517)。
 表9状态码 
| 状态码  | 描述         |
|:---|:---|
| 200 | 创建缓存实例成功。 |
   
