弹性网卡
初始化
确认Endpoint
在确认您使用SDK时配置的Endpoint时,可先阅读开发人员指南中关于VPC服务域名的部分,理解Endpoint相关的概念。百度云目前开放了多区域支持,请参考区域选择说明。
目前支持“华北-北京”、“华南-广州”、“华东-苏州”、“香港”、“金融华中-武汉”和“华北-保定”六个区域。对应信息为:
访问区域 | 对应Endpoint | 协议 |
---|---|---|
BJ | bcc.bj.baidubce.com | HTTP and HTTPS |
GZ | bcc.gz.baidubce.com | HTTP and HTTPS |
SU | bcc.su.baidubce.com | HTTP and HTTPS |
HKG | bcc.hkg.baidubce.com | HTTP and HTTPS |
FWH | bcc.fwh.baidubce.com | HTTP and HTTPS |
BD | bcc.bd.baidubce.com | HTTP and HTTPS |
获取密钥
要使用百度云路由,您需要拥有一个有效的AK(Access Key ID)和SK(Secret Access Key)用来进行签名认证。AK/SK是由系统分配给用户的,均为字符串,用于标识用户,为访问Route做签名验证。
可以通过如下步骤获得并了解您的AK/SK信息:
创建弹性网卡
- 可指定IPv4和IPv6内网IP,指定的内网IP必须在弹性网卡所在子网内,而且不能被占用。
- 指定的IPv4 IP中只能有一个是主IP,其他必须是辅助IP。
- 指定IPv6 IP时,需弹性网卡所在子网已分配IPv6网段,目前IPv6 IP均为辅助IP。
- privateIpAddress为””表示自动分配IP地址。
- 创建弹性网卡同时可以绑定已有普通安全组或企业安全组(二选一),普通安全组所属VPC必须与网卡所属的VPC一致。
函数声明
type PrivateIp struct {
PublicIpAddress string `json:"publicIpAddress"`
Primary bool `json:"primary"`
PrivateIpAddress string `json:"privateIpAddress"`
}
type CreateEniArgs struct {
ClientToken string `json:"-"`
Name string `json:"name"`
SubnetId string `json:"subnetId"`
InstanceId string `json:"instanceId,omitempty"`
SecurityGroupIds []string `json:"securityGroupIds"`
EnterpriseSecurityGroupIds []string `json:"enterpriseSecurityGroupIds"`
PrivateIpSet []PrivateIp `json:"privateIpSet"`
Ipv6PrivateIpSet []PrivateIp `json:"ipv6PrivateIpSet,omitempty"`
Description string `json:"description,omitempty"`
}
type CreateEniResult struct {
EniId string `json:"eniId"`
}
func (c *Client) CreateEni(args *CreateEniArgs) (*CreateEniResult, error)
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/pkknfara0
返回值
操作成功:
{
"eniId":"eni-2dn7v328tegp"
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_create_eni.go
更新弹性网卡
更新弹性网卡名称和描述。
- 名称为大小写字母、数字以及-_/.特殊字符,必须以字母开头,长度1-65
- 名称和描述二者不能同时为空
函数声明
type UpdateEniArgs struct {
EniId string `json:"-"`
ClientToken string `json:"-"`
Name string `json:"name"`
Description string `json:"description"`
}
func (c *Client) UpdateEni(args *UpdateEniArgs) error
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Zkknfh5h8
返回值
操作成功:
无特殊返回参数
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_update_eni.go
删除弹性网卡
- 已挂载、挂载中、卸载中的弹性网卡不能删除。
- 删除之后弹性网卡上所有内网IP都将被退还。
函数声明
type DeleteEniArgs struct {
EniId string
ClientToken string
}
func (c *Client) DeleteEni(args *DeleteEniArgs) error
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/ikknfinx7
返回值
操作成功:
无特殊返回参数
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_delete_eni.go
查询弹性网卡列表
函数声明
type ListEniArgs struct {
VpcId string
InstanceId string
Name string
Marker string
MaxKeys int
PrivateIpAddress []string `json:"privateIpAddress,omitempty"`
}
type ListEniResult struct {
Eni []Eni `json:"enis"`
Marker string `json:"marker"`
IsTruncated bool `json:"isTruncated"`
NextMarker string `json:"nextMarker"`
MaxKeys int `json:"maxKeys"`
}
func (c *Client) ListEni(args *ListEniArgs) (*ListEniResult, error)
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Okknfjt6o
返回值
操作成功:
{
"enis":[
{
"eniId":"eni-tnj00he350fh",
"name":"eni-1",
"zoneName":"cn-bj-d",
"description":"",
"instanceId":"",
"macAddress":"fa:20:20:2f:c6:30",
"vpcId":"vpc-jm7h2j497ut7",
"subnetId":"sbn-d63m7t0bbwt5",
"status":"available",
"privateIpSet":[
{
"publicIpAddress":"",
"primary":true,
"privateIpAddress":"10.0.1.115"
},
{
"publicIpAddress":"",
"primary":false,
"privateIpAddress":"10.0.1.6"
}],
"ipv6PrivateIpSet":[],
"securityGroupIds":null,
"enterpriseSecurityGroupIds":null,
"createdTime":"2023-12-06T06:32:46Z"
},
{
"eniId":"eni-2dn7v328tegp",
"name":"eni-1",
"zoneName":"cn-bj-d",
"description":"",
"instanceId":"",
"macAddress":"fa:20:20:30:08:08",
"vpcId":"vpc-jm7h2j497ut7",
"subnetId":"sbn-d63m7t0bbwt5",
"status":"available",
"privateIpSet":[
{
"publicIpAddress":"",
"primary":true,
"privateIpAddress":"10.0.1.116"
},
{
"publicIpAddress":"",
"primary":false,
"privateIpAddress":"10.0.1.7"
}],
"ipv6PrivateIpSet":[],
"securityGroupIds":null,
"enterpriseSecurityGroupIds":null,
"createdTime":"2023-12-06T07:07:10Z"
}],
"marker":"eni-tnj00he350fh",
"isTruncated":true,
"nextMarker":"eni-ziqsx63b3nfq",
"maxKeys":2
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_list_eni.go
增加弹性网卡内网IP
- isIpv6为true时,表示新增IPv6内网IP,弹性网卡所在子网需分配IPv6网段。
- 如果privateIpAddress为""表示自动分配。
- 若privateIpAddress不为空,则必须为该子网内的IP地址。
- 新增的内网IP都是辅助IP。
函数声明
type EniPrivateIpArgs struct {
EniId string `json:"-"`
ClientToken string `json:"-"`
IsIpv6 bool `json:"isIpv6,omitempty"`
PrivateIpAddress string `json:"privateIpAddress"`
}
type AddPrivateIpResult struct {
PrivateIpAddress string `json:"privateIpAddress"`
}
func (c *Client) AddPrivateIp(args *EniPrivateIpArgs) (*AddPrivateIpResult, error)
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Hkknfl4q3
返回值
操作成功:
{
"privateIpAddress":"10.0.1.108"
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_add_private_ip.go
删除弹性网卡内网IP
- 主IP不能删除,仅可删除辅助IP。
- 可指定IPv4或IPv6内网IP删除。
函数声明
type EniPrivateIpArgs struct {
EniId string `json:"-"`
ClientToken string `json:"-"`
IsIpv6 bool `json:"isIpv6,omitempty"`
PrivateIpAddress string `json:"privateIpAddress"`
}
func (c *Client) DeletePrivateIp(args *EniPrivateIpArgs) error
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/jkknfm534
返回值
操作成功:
无特殊返回参数
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_delete_private_ip.go
查询指定的弹性网卡
函数声明
type Eni struct {
EniId string `json:"eniId"`
Name string `json:"name"`
ZoneName string `json:"zoneName"`
Description string `json:"description"`
InstanceId string `json:"instanceId"`
MacAddress string `json:"macAddress"`
VpcId string `json:"vpcId"`
SubnetId string `json:"subnetId"`
Status string `json:"status"`
PrivateIpSet []PrivateIp `json:"privateIpSet"`
Ipv6PrivateIpSet []PrivateIp `json:"ipv6PrivateIpSet"`
SecurityGroupIds []string `json:"securityGroupIds"`
EnterpriseSecurityGroupIds []string `json:"enterpriseSecurityGroupIds"`
CreatedTime string `json:"createdTime"`
}
func (c *Client) GetEniDetail(eniId string) (*Eni, error)
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/6kknfn5m8
返回值
操作成功:
{
"eniId":"eni-477g9akswgjv",
"name":"GO_SDK_TEST_UPDATE",
"zoneName":"cn-bj-d",
"description":"go sdk update",
"instanceId":"",
"macAddress":"fa:20:20:2f:b2:ae",
"vpcId":"vpc-jm7h2j497ut7",
"subnetId":"sbn-d63m7t0bbwt5",
"status":"available",
"privateIpSet":[
{
"publicIpAddress":"",
"primary":true,
"privateIpAddress":"10.0.1.100"
}],
"ipv6PrivateIpSet":[
{
"publicIpAddress":"",
"primary":false,
"privateIpAddress":"240c:4081:8005:5e04::2"
}],
"securityGroupIds":[],
"enterpriseSecurityGroupIds":["esg-1atxb1iqd1e2"],
"createdTime":"2023-11-24T11:39:54Z"
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_get_eni_detail.go
弹性网卡挂载云主机
- 一个云主机可以绑定多个弹性网卡,但只能绑定一个主网卡。
- 一个弹性网卡只能同时绑定一个云主机。
- 只有运行中或者已关机状态的云主机才能绑定弹性网卡。
- 弹性网卡和绑定的云主机必须是在同一私有网络内,且两者所在子网的可用区相同。
函数声明
type EniInstance struct {
EniId string `json:"-"`
InstanceId string `json:"instanceId"`
ClientToken string `json:"-"`
}
func (c *Client) AttachEniInstance(args *EniInstance) error
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/qkknfp44w
返回值
操作成功:
无特殊返回参数
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_attach_eni_instance.go
弹性网卡卸载云主机
- 只有已挂载状态的弹性网卡可以解绑云主机。
函数声明
type EniInstance struct {
EniId string `json:"-"`
InstanceId string `json:"instanceId"`
ClientToken string `json:"-"`
}
func (c *Client) DetachEniInstance(args *EniInstance) error
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/jkknfq87r
返回值
操作成功:
无特殊返回参数
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_detach_eni_instance.go
弹性网卡绑定EIP
- 挂载中和卸载中的网卡不能绑定EIP。
- NAT专属子网中的网卡不能绑定EIP。
函数声明
type BindEniPublicIpArgs struct {
EniId string `json:"-"`
ClientToken string `json:"-"`
PrivateIpAddress string `json:"privateIpAddress"`
PublicIpAddress string `json:"publicIpAddress"`
}
func (c *Client) BindEniPublicIp(args *BindEniPublicIpArgs) error
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/vkknfr857
返回值
操作成功:
无特殊返回参数
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_bind_eni_public_ip.go
弹性网卡解绑EIP
- 挂载中和卸载中的网卡不能解绑EIP。
函数声明
type UnBindEniPublicIpArgs struct {
EniId string `json:"-"`
ClientToken string `json:"-"`
PublicIpAddress string `json:"publicIpAddress"`
}
func (c *Client) UnBindEniPublicIp(args *UnBindEniPublicIpArgs) error
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Hkknfs7ee
返回值
操作成功:
无特殊返回参数
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_unbind_public_ip.go
弹性网卡更新普通安全组
- 弹性网卡至少要有一个安全组(普通安全组或企业安全组)。
- 该操作是弹性网卡最终加入的普通安全组,并会移出已有的普通安全组或企业安全组。
函数声明
type UpdateEniSecurityGroupArgs struct {
EniId string `json:"-"`
ClientToken string `json:"-"`
SecurityGroupIds []string `json:"securityGroupIds"`
}
func (c *Client) UpdateEniSecurityGroup(args *UpdateEniSecurityGroupArgs) error
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Nkknft2l0
返回值
操作成功:
无特殊返回参数
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_update_eni_sg.go
弹性网卡更新企业安全组
- 弹性网卡至少要有一个安全组(普通安全组或企业安全组)。
- 该操作是弹性网卡最终加入的企业安全组,并会移出已有的普通安全组或企业安全组。
函数声明
type UpdateEniEnterpriseSecurityGroupArgs struct {
EniId string `json:"-"`
ClientToken string `json:"-"`
EnterpriseSecurityGroupIds []string `json:"enterpriseSecurityGroupIds"`
}
func (c *Client) UpdateEniEnterpriseSecurityGroup(args *UpdateEniEnterpriseSecurityGroupArgs) error
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Jl5kp9uyw
返回值
操作成功:
无特殊返回参数
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_update_eni_esg.go
批量删除弹性网卡内网IP
- 主IP不能删除,仅可删除辅助IP。
- 可指定IPv4或IPv6内网IP删除。
函数声明
type EniBatchPrivateIpArgs struct {
EniId string `json:"-"`
ClientToken string `json:"-"`
IsIpv6 bool `json:"isIpv6,omitempty"`
PrivateIpAddresses []string `json:"privateIpAddresses"`
PrivateIpAddressCount int `json:"privateIpAddressCount,omitempty"`
}
func (c *Client) BatchDeletePrivateIp(args *EniBatchPrivateIpArgs) error
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Akw4yd4ht
返回值
操作成功:
无特殊返回参数
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_batch_delete_private_ip.go
批量增加弹性网卡内网IP
- 新增的内网IP都是辅助IP。
- isIpv6为true时,表示新增IPv6内网IP,弹性网卡所在子网需分配IPv6网段。
函数声明
type EniBatchPrivateIpArgs struct {
EniId string `json:"-"`
ClientToken string `json:"-"`
IsIpv6 bool `json:"isIpv6,omitempty"`
PrivateIpAddresses []string `json:"privateIpAddresses"`
PrivateIpAddressCount int `json:"privateIpAddressCount,omitempty"`
}
type BatchAddPrivateIpResult struct {
PrivateIpAddresses []string `json:"privateIpAddresses"`
}
func (c *Client) BatchAddPrivateIp(args *EniBatchPrivateIpArgs) (*BatchAddPrivateIpResult, error)
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/9kw4xi713
返回值
操作成功:
{
"privateIpAddresses": ["10.0.1.201","10.0.1.202"]
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_batch_add_private_ip.go
查询弹性网卡状态
函数声明
type EniStatusInfo struct {
Status string `json:"status"`
}
func (c *Client) GetEniStatus(eniId string) (*EniStatusInfo, error)
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/alk0j86xp
返回值
操作成功:
{
"status": "available"
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7#弹性网卡业务错误码
代码示例
具体代码示例参考:example_get_eni_status.go