您可以使用私网连接,实现在本地 IDC 通过专线访问对象存储。本文介绍如何使用私网连接访问对象存储。
您可以使用 VPN、CEN 或专线连接实现云上 VPC 与 本地 IDC 网络互通,然后使用私网连接的终端节点和终端节点服务建立私有网络 VPC 和对象存储 TOS 的网络连接,最后实现在本地数据中心访问对象存储。
以下以专线连接为例,展示在本地 IDC 访问对象存储的过程。
类别 | 注意事项 |
---|---|
私网连接 |
|
对象存储 |
|
费用 | 使用本方案访问对象存储时,会产生终端节点实例费用和流量处理费用。详细介绍,请参见计费说明。 |
登录私有网络控制台。
在顶部导航栏,选择目标地域。
在左侧导航栏选择私网连接 > 终端节点 。
在接口终端节点页签下,单击创建终端节点。
在创建终端节点页面,配置如下参数。
类别 | 参数 | 说明 |
---|---|---|
基本信息 | 地域 | 选择终端节点所属的地域。 |
名称 | 输入终端节点的名称。 | |
类型 | 选择终端节点的类型。本场景选择接口。 | |
描述 | 输入终端节点的描述。 | |
项目 | 选择终端节点所属的项目。详细介绍,请参见项目管理。 | |
终端节点服务 | 添加方式 | 选择待关联终端节点服务的添加方式。本场景选择火山引擎服务。 |
终端节点服务 | 选择对接 TOS 的终端节点服务,已默认创建了 2 个对接 TOS 的终端节点服务,您无需手动创建。可选以下服务,具体说明如下:
| |
网络配置 | 私有网络 | 选择配置专线连接时使用的私有网络。 |
可用区及子网 | 选择需要建立连接的终端节点服务可用区和子网。 | |
安全组 | 选择安全组。 说明 创建私有网络时,系统会为该私有网络自动创建一个默认安全组 Default。关于安全组的详细介绍,请参见安全组概述。 | |
高级选项 | 标签 | 标签由一个键值对组成,用于资源的分类和搜索。更多关于标签的介绍请参见标签管理。 |
单击确认订单。
阅读并勾选**《产品和服务协议》、《私网连接服务条款》、《私网连接服务等级协议》,单击立即购买**。
单击去控制台,在接口终端节点页签下终端节点域名列,获取目标终端节点的域名。
在本地 IDC ping 终端节点域名,如果能 ping 通,说明本地 IDC 和对象存储之间网络连通正常。
将 Endpoint 修改为终端节点的域名后,您可以使用 API、 SDK 访问对象存储。例如在本地 IDC 使用 GO SDK 列举对象,示例代码如下:
package main import ( "context" "fmt" "github.com/volcengine/ve-tos-golang-sdk/v2/tos" ) func checkErr(err error) { if err != nil { if serverErr, ok := err.(*tos.TosServerError); ok { fmt.Println("Error:", serverErr.Error()) fmt.Println("Request ID:", serverErr.RequestID) fmt.Println("Response Status Code:", serverErr.StatusCode) fmt.Println("Response Header:", serverErr.Header) fmt.Println("Response Err Code:", serverErr.Code) fmt.Println("Response Err Msg:", serverErr.Message) } else if clientErr, ok := err.(*tos.TosClientError); ok { fmt.Println("Error:", clientErr.Error()) fmt.Println("Client Cause Err:", clientErr.Cause.Error()) } else { fmt.Println("Error:", err) } panic(err) } } func main() { var ( accessKey = "*** Provide your access key ***" secretKey = "*** Provide your secret key ***" // 填写终端节点域名 endpoint = "ep-3rf21wq2bsh6o5zsk2ipt****.tos-s3.cn-beijing-.privatelink.volces.com" region = "cn-beijing" // 填写 BucketName bucketName = "*** Provide your bucket name ***" ctx = context.Background() ) // 初始化客户端 client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey))) checkErr(err) // 获取 bucket 中最多 10 个对象 output, err := client.ListObjectsV2(ctx, &tos.ListObjectsV2Input{ Bucket: bucketName, ListObjectsInput: tos.ListObjectsInput{ MaxKeys: 10, }, }) checkErr(err) for _, obj := range output.Contents { // 对象 Key fmt.Println("Object Key:", obj.Key) // 对象最后修改时间 fmt.Println("Object LastModified:", obj.LastModified) // 对象 Etag fmt.Println("Object ETag:", obj.ETag) // 对象大小 fmt.Println("Object Size:", obj.Size) // 对象 Owner fmt.Println("Object Owner:", obj.Owner) // 对象存储类型 fmt.Println("Object StorageClass:", obj.StorageClass) // 对象 CRC64 fmt.Println("Object HashCrc64ecma:", obj.HashCrc64ecma) } }