
# 创建公网NAT网关 - CreateNatGateway
#### 功能介绍
创建公网NAT网关实例。
#### 调用方法
请参见[如何调用API](https://support.huaweicloud.com/api-natgateway/nat_api_0053.html)。
#### 授权信息
账号具备所有API的调用权限，如果使用账号下的IAM用户调用当前API，该IAM用户需具备调用API所需的权限。
- 如果使用角色与策略授权，具体权限要求请参见[权限和授权项](https://support.huaweicloud.com/api-natgateway/nat_api_0063.html)。
- 如果使用身份策略授权，需具备如下身份策略权限。
  
  | 授权项                    | 访问级别  | 资源类型（\*为必须） | 条件键                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 别名 | 依赖的授权项 |
  |:---|:---|:---|:---|:---|:---|
  | nat:natGateways:create | Write | gateway \*  | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | -  | -      |
  | nat:natGateways:create | Write | vpc \*      | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | -  | -      |
  | nat:natGateways:create | Write | subnet \*   | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | -  | -      |
  | nat:natGateways:create | Write | -           | - g:EnterpriseProjectId   - g:RequestTag/\<tag-key\>   - g:TagKeys    | -  | -      |
     
  
 
#### URI
POST /v2/{project_id}/nat_gateways
表1路径参数 
| 参数         | 是否必选 | 参数类型   | 描述     |
|:---|:---|:---|:---|
| project_id | 是    | String | 项目的ID。 |
   
#### 请求参数
表2请求Header参数 
| 参数           | 是否必选 | 参数类型   | 描述                                                                                                                                                                               |
|:---|:---|:---|:---|
| X-Auth-Token | 是    | String | 用户Token。 用户Token也就是调用获取用户Token获取请求认证接口的响应值，该接口是唯一不需要认证的接口。 请求响应成功后在响应消息头中包含的"X-Subject-Token"的值即为Token值。 |
   
表3请求Body参数 
| 参数          | 是否必选 | 参数类型                                                                               | 描述               |
|:---|:---|:---|:---|
| nat_gateway | 是    | [CreateNatGatewayOption] object | 创建公网NAT网关实例的请求体。 |
   
 表4CreateNatGatewayOption 
| 参数                    | 是否必选 | 参数类型                                                                           | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|:---|
| name                  | 是    | String                                                                         | 公网NAT网关实例的名字，长度限制为64。 公网NAT网关实例的名字仅支持数字、字母、_（下划线）、-（中划线）、中文。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| router_id             | 是    | String                                                                         | VPC的id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| internal_network_id   | 是    | String                                                                         | 公网NAT网关下行口（DVR的下一跳）所属的network id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ngport_ip_address     | 否    | String                                                                         | 公网NAT网关ng口占用的ip。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| description           | 否    | String                                                                         | 公网NAT网关实例的描述，长度范围小于等于255个字符，不能包含"\<"和"\>"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| tags                  | 否    | Array of strings                                                               | 标签列表, 用以标识资源类型                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| spec                  | 是    | String                                                                         | 公网NAT网关的规格。 取值为： - 1：小型，SNAT最大连接数10000   - 2：中型，SNAT最大连接数50000   - 3：大型，SNAT最大连接数200000   - 4：超大型，SNAT最大连接数1000000   - 5：企业型，SNAT最大连接数10000000    |
| enterprise_project_id | 否    | String                                                                         | 企业项目ID 创建公网NAT网关实例时，关联的企业项目ID。 关于企业项目ID的获取及企业项目特性的详细信息，请参考《企业管理用户指南》。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| session_conf          | 否    | [SessionConfiguration] object | 公网NAT网关会话参数配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| prepaid_options       | 否    | [PrepaidOptions] object             | 支付属性                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   
 表5SessionConfiguration 
| 参数                       | 是否必选 | 参数类型    | 描述                            |
|:---|:---|:---|:---|
| tcp_session_expire_time  | 否    | Integer | TCP会话过期时间（单位秒）。               |
| udp_session_expire_time  | 否    | Integer | UDP会话过期时间（单位秒）。               |
| icmp_session_expire_time | 否    | Integer | ICMP会话过期时间（单位秒）。              |
| tcp_time_wait_time       | 否    | Integer | TCP连接关闭时TIME_WAIT状态持续时间（单位秒）。 |
   
 表6PrepaidOptions 
| 参数            | 是否必选 | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|:---|:---|
| period_type   | 是    | String  | 订购周期类型，当前支持包月和包年: - month: 包月   - year: 包年    |
| period_num    | 是    | Integer | 订购周期数，取值会随运营策略变化。 period_type为month时，为\[1,9\]， period_type为year时，为\[1,3\]                                                                                                                                                                                                                                 |
| is_auto_renew | 否    | Boolean | 是否自动续订； true：自动续订 false：不自动续订                                                                                                                                                                                                                                                                             |
| is_auto_pay   | 否    | Boolean | 下单订购后，是否自动从客户的账户中支付; true：自动支付 false：不自动支付。                                                                                                                                                                                                                                                               |
   
#### 响应参数
**状态码：201**
表7响应Body参数 
| 参数             | 参数类型                                                                                | 描述             |
|:---|:---|:---|
| nat_gateway    | [NatGatewayResponseBody] object | 公网NAT网关实例的响应体。 |
| order_id       | String                                                                              | 订单ID。          |
| nat_gateway_id | String                                                                              | 公网NAT网关实例的ID。  |
   
 表8NatGatewayResponseBody 
| 参数                        | 参数类型                                                                            | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
|:---|:---|:---|
| id                        | String                                                                          | 公网NAT网关实例的ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| tenant_id                 | String                                                                          | 项目的ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| name                      | String                                                                          | 公网NAT网关实例的名字，长度限制为64。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| description               | String                                                                          | 公网NAT网关实例的描述，长度范围小于等于255个字符，不能包含"\<"和"\>"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| spec                      | String                                                                          | 公网NAT网关的规格。 取值为： - 1：小型，SNAT最大连接数10000   - 2：中型，SNAT最大连接数50000   - 3：大型，SNAT最大连接数200000   - 4：超大型，SNAT最大连接数1000000   - 5：企业型，SNAT最大连接数10000000    |
| status                    | String                                                                          | 公网NAT网关实例的状态。 取值为: - ACTIVE: 可用   - PENDING_CREATE: 创建中   - PENDING_UPDATE: 更新中   - PENDING_DELETE: 删除中   - INACTIVE: 不可用                         |
| admin_state_up            | Boolean                                                                         | 解冻/冻结状态。 取值范围： - true：解冻   - false：冻结                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| created_at                | String                                                                          | 公网NAT网关实例的创建时间，遵循UTC时间，格式是yyyy-mm-ddThh:mm:ssZ。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| router_id                 | String                                                                          | VPC的id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| internal_network_id       | String                                                                          | 公网NAT网关下行口（DVR的下一跳）所属的network id。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| enterprise_project_id     | String                                                                          | 企业项目ID。 创建公网NAT网关实例时，关联的企业项目ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| session_conf              | [SessionConfiguration] object | 公网NAT网关会话参数配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ngport_ip_address         | String                                                                          | 公网NAT网关私有IP地址，由VPC中子网分配。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| billing_info              | String                                                                          | 订单信息。此字段只有在订购包周期资源时才会有订单信息，而在订购按需资源时则为空。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| dnat_rules_limit          | Long                                                                            | 公网NAT网关下DNAT规则数量限制，默认为200。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| snat_rule_public_ip_limit | Integer                                                                         | 公网NAT网关下SNAT规则EIP池中EIP数量限制，默认为20。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| pps_max                   | Integer                                                                         | 网关每秒能够接收或发送的数据包数量，代表网络设备的流量处理能力。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| bps_max                   | Integer                                                                         | 网关每秒能够接收或发送的带宽大小，代表网络设备的流量处理能力。单位M                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   
 表9SessionConfiguration 
| 参数                       | 参数类型    | 描述                            |
|:---|:---|:---|
| tcp_session_expire_time  | Integer | TCP会话过期时间（单位秒）。               |
| udp_session_expire_time  | Integer | UDP会话过期时间（单位秒）。               |
| icmp_session_expire_time | Integer | ICMP会话过期时间（单位秒）。              |
| tcp_time_wait_time       | Integer | TCP连接关闭时TIME_WAIT状态持续时间（单位秒）。 |
   
#### 请求示例
创建公网NAT网关
```
POST https://{NAT_endpoint}/v2/70505c941b9b4dfd82fd351932328a2f/nat_gateways
{
  "nat_gateway" : {
    "name" : "nat_001",
    "description" : "my nat gateway 01",
    "router_id" : "d84f345c-80a1-4fa2-a39c-d0d397c3f09a",
    "internal_network_id" : "89d66639-aacb-4929-969d-07080b0f9fd9",
    "spec" : "1",
    "enterprise_project_id" : "0aad99bc-f5f6-4f78-8404-c598d76b0ed2"
  }
}
```
#### 响应示例
**状态码：201**
创建公网NAT网关实例成功。
```
{
  "nat_gateway" : {
    "id" : "14338426-6afe-4019-996b-3a9525296e11",
    "name" : "nat_001",
    "description" : "my nat gateway 01",
    "router_id" : "d84f345c-80a1-4fa2-a39c-d0d397c3f09a",
    "spec" : "1",
    "admin_state_up" : true,
    "tenant_id" : "70505c941b9b4dfd82fd351932328a2f",
    "internal_network_id" : "89d66639-aacb-4929-969d-07080b0f9fd9",
    "enterprise_project_id" : "0aad99bc-f5f6-4f78-8404-c598d76b0ed2",
    "status" : "PENDING_CREATE",
    "billing_info" : null,
    "dnat_rules_limit" : 200,
    "snat_rule_public_ip_limit" : 20,
    "ngport_ip_address" : "192.168.0.138",
    "created_at" : "2019-04-22T08:47:13Z",
    "session_conf" : {
      "tcp_session_expire_time" : 900,
      "udp_session_expire_time" : 300,
      "icmp_session_expire_time" : 10,
      "tcp_time_wait_time" : 5
    }
  }
}
```
#### SDK代码示例
SDK代码示例如下。
#### Java
创建公网NAT网关
```
package com.huaweicloud.sdk.test;
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.nat.v2.region.NatRegion;
import com.huaweicloud.sdk.nat.v2.*;
import com.huaweicloud.sdk.nat.v2.model.*;
public class CreateNatGatewaySolution {
    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";
        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);
        NatClient client = NatClient.newBuilder()
                .withCredential(auth)
                .withRegion(NatRegion.valueOf("<YOUR REGION>"))
                .build();
        CreateNatGatewayRequest request = new CreateNatGatewayRequest();
        CreateNatGatewayRequestBody body = new CreateNatGatewayRequestBody();
        CreateNatGatewayOption natGatewaybody = new CreateNatGatewayOption();
        natGatewaybody.withName("nat_001")
            .withRouterId("d84f345c-80a1-4fa2-a39c-d0d397c3f09a")
            .withInternalNetworkId("89d66639-aacb-4929-969d-07080b0f9fd9")
            .withDescription("my nat gateway 01")
            .withSpec(CreateNatGatewayOption.SpecEnum.fromValue("1"))
            .withEnterpriseProjectId("0aad99bc-f5f6-4f78-8404-c598d76b0ed2");
        body.withNatGateway(natGatewaybody);
        request.withBody(body);
        try {
            CreateNatGatewayResponse response = client.createNatGateway(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}
```
#### Python
创建公网NAT网关
```
# coding: utf-8
import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdknat.v2.region.nat_region import NatRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdknat.v2 import *
if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"
    credentials = BasicCredentials(ak, sk, projectId)
    client = NatClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(NatRegion.value_of("<YOUR REGION>")) \
        .build()
    try:
        request = CreateNatGatewayRequest()
        natGatewaybody = CreateNatGatewayOption(
            name="nat_001",
            router_id="d84f345c-80a1-4fa2-a39c-d0d397c3f09a",
            internal_network_id="89d66639-aacb-4929-969d-07080b0f9fd9",
            description="my nat gateway 01",
            spec="1",
            enterprise_project_id="0aad99bc-f5f6-4f78-8404-c598d76b0ed2"
        )
        request.body = CreateNatGatewayRequestBody(
            nat_gateway=natGatewaybody
        )
        response = client.create_nat_gateway(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)
```
#### Go
创建公网NAT网关
```
package main
import (
"fmt"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    nat "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/nat/v2"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/nat/v2/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/nat/v2/region"
)
func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"
    auth, err := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        SafeBuild()
    if err != nil {
        fmt.Println(err)
        return
    }
    hcClient, err := nat.NatClientBuilder().
         WithRegion(region.ValueOf("<YOUR REGION>")).
         WithCredential(auth).
         SafeBuild()
    if err != nil {
        fmt.Println(err)
        return
    }
    client := nat.NewNatClient(hcClient)
    request := &model.CreateNatGatewayRequest{}
descriptionNatGateway:= "my nat gateway 01"
enterpriseProjectIdNatGateway:= "0aad99bc-f5f6-4f78-8404-c598d76b0ed2"
natGatewaybody := &model.CreateNatGatewayOption{
Name: "nat_001",
RouterId: "d84f345c-80a1-4fa2-a39c-d0d397c3f09a",
InternalNetworkId: "89d66639-aacb-4929-969d-07080b0f9fd9",
Description: &descriptionNatGateway,
Spec: model.GetCreateNatGatewayOptionSpecEnum().E_1,
EnterpriseProjectId: &enterpriseProjectIdNatGateway,
}
request.Body = &model.CreateNatGatewayRequestBody{
NatGateway: natGatewaybody,
}
response, err := client.CreateNatGateway(request)
if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}
```
#### 更多
更多编程语言的SDK代码示例，请参见[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/NAT/sdk?api=CreateNatGateway)的代码示例页签，可生成自动对应的SDK代码示例。
#### 状态码
| 状态码 | 描述             |
|:---|:---|
| 201 | 创建公网NAT网关实例成功。 |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-natgateway/ErrorCode.html)。
