文档中心>云点播>实践教程>内网访问专业版存储桶

内网访问专业版存储桶

最近更新时间:2024-12-24 15:08:43

我的收藏

简介

云点播专业版(Video on Demand Professional,VOD Pro)是基于腾讯云音视频能力提供的高品质媒体服务,在标准版的基础上,支持以对象存储模式管理内容,并使用 EdgeOne 进行内容分发,为直播、教育、电商、金融、游戏等行业提供更优的用户体验。
云点播专业版应用支持在腾讯云内网使用 AWS S3 兼容的 API 对存储桶内的文件进行读写。客户可使用相同地域的腾讯云服务器(如云服务器轻量应用服务器容器服务等)实现存储桶文件的内网安全访问,此方式可实现数据的内网传输,即上传和下载文件均只产生内网流量,不会形成流量费用。

本文主要介绍在腾讯云内网访问专业版应用存储桶的方法,访问方式以 AWS 命令行工具和常用开发平台的 AWS S3 SDK 为例,其他兼容 S3 API 的工具或 SDK 通常也可以使用。如果您的数据是从 S3 或 S3 兼容的存储服务迁移到点播专业版应用,一般只需要进行简单的适配就可以使用了。

准备工作

1. 创建应用和存储桶:
云点播控制台创建好专业版应用和存储桶,具体操作步骤参考 应用管理创建存储桶 文档。
2. 获取内网访问域名:
创建好存储桶后,在专业版应用的 存储桶列表 中,可以获取到存储桶的内网访问域名,一般形式为:[存储桶 ID].vodsrc-internal.[存储地域].eovod.com。
3. 获取密钥对:
从专业版应用的密钥管理中,获取密钥对 AccessKeyId 和 SecretAccessKey,具体操作步骤参考 密钥管理 文档。
4. 准备服务器:
准备好与存储桶同地域的腾讯云服务器,如腾讯云服务器、轻量应用服务器、容器服务等。

方式一:通过命令行访问存储桶

下面以 AWS CLI V2 版本为例,介绍如何适配并访问专业版应用的存储桶,工具的安装可参考 AWS CLI 的 安装/更新 文档。

步骤一:AWS 配置和证书文件

以 Linux 操作系统为例,AWS 的默认配置文件通常在用户目录下,可以参考 AWS 配置和证书文件 文档。
1. 在配置文件(文件位置是~/.aws/config) 中添加以下配置:
[default]
s3 =
addressing_style = virtual
2. 在证书文件(文件路径为 ~/.aws/credentials)中配置点播专业版应用的密钥对:
[default]
aws_access_key_id = [AccessKeyId]
aws_secret_access_key = [SecretAccessKey]

步骤二:使用 AWS CLI 访问专业版应用的存储桶

使用 AWS CLI 访问专业版应用的存储桶时,需要指定 endpoint-url 参数。以存储地域为 ap-chongqing ,存储桶 ID 为 bucketid1 为例,常用命令如下所示:
# 上传本地文件到存储桶的 a/b/ 目录下
aws s3 cp --endpoint-url http://vodsrc-internal.ap-chongqing.eovod.com ./e.jpeg s3://bucketid1/a/b/
# 将存储桶中的文件 a/b/e.jpeg 下载到本地
aws s3 cp --endpoint-url http://vodsrc-internal.ap-chongqing.eovod.com s3://bucketid1/a/b/e.jpeg .
# 获取对象 a/b/c.jpeg 的元数据
aws s3api head-object --endpoint-url http://vodsrc-internal.ap-chongqing.eovod.com --bucket bucketid1 --key a/b/c.jpeg

方式二:通过 SDK 访问存储桶

以下为各语言使用 SDK 访问存储桶的指引。

GO SDK

下面以 AWS GO SDK V2 版本的上传文件为例,介绍如何适配以访问专业版应用的存储桶。以存储地域为 ap-chongqing ,存储桶 ID 为 bucketid1 为例,上传文件的代码示例如下所示:
package main

import (
"context"
"errors"
"fmt"
"net/url"
"os"
"strings"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/s3"
endpoints "github.com/aws/smithy-go/endpoints"
)

type customEndpointResolverV2 struct {
}

// ResolveEndpoint 自定义 Endpoint
func (r *customEndpointResolverV2) ResolveEndpoint(ctx context.Context,
params s3.EndpointParameters) (endpoints.Endpoint, error) {
if params.Bucket == nil || params.Region == nil {
return endpoints.Endpoint{}, errors.New("invalid s3 endpoint param")
}
return endpoints.Endpoint{
URI: url.URL{
Scheme: "http",
Host: fmt.Sprintf("%s.vodsrc-internal.%s.eovod.com", *params.Bucket, *params.Region),
},
}, nil
}

func main() {
// 通过环境变量 ACCESS_KEY_ID 和 SECRET_ACCESS_KEY 获取密钥
creds := credentials.NewStaticCredentialsProvider(os.Getenv("ACCESS_KEY_ID"), os.Getenv("SECRET_ACCESS_KEY"), "")
cfg, _ := config.LoadDefaultConfig(
context.TODO(),
config.WithRegion("ap-chongqing"),
config.WithCredentialsProvider(creds),
)
s3Client := s3.New(s3.Options{
Credentials: cfg.Credentials,
Region: cfg.Region,
EndpointResolverV2: new(customEndpointResolverV2),
UsePathStyle: false,
})

input := &s3.PutObjectInput{
Body: strings.NewReader("xxxxxxx"),
Bucket: aws.String("bucketid1"), // 存储桶 ID
Key: aws.String("a/b/c.jpeg"), // 文件的目标存储路径
StorageClass: "STANDARD",
}
result, err := s3Client.PutObject(context.Background(), input)
if err != nil {
panic(err)
}
fmt.Println(result)
}

C++ SDK

下面以 AWS C++ SDK 1.7.68 版本为例,介绍如何适配以访问专业版应用的存储桶。
1. 修改 AWS 配置和证书文件
以 Linux 操作系统为例,AWS SDK 的默认配置文件通常在用户目录下,可以参考 AWS 配置和证书文件文档。
在配置文件(文件位置是~/.aws/config) 中添加以下配置:
[default]
s3 =
addressing_style = virtual
在证书文件(文件路径为 ~/.aws/credentials)中配置点播专业版应用的密钥对:
[default]
aws_access_key_id = [AccessKeyId]
aws_secret_access_key = [SecretAccessKey]
2. 代码中设置 Endpoint
变量 endpointOverride 传入内网访问域名的不包含存储桶 ID 的部分,即 vodsrc-internal.[存储地域].eovod.com。以存储地域为 ap-chongqing 为例,代码示例如下所示:
Aws::Client::ClientConfiguration awsCC;
awsCC.scheme = Aws::Http::Scheme::HTTP;
awsCC.region = "ap-chongqing";
awsCC.endpointOverride = "vodsrc-internal.ap-chongqing.eovod.com";
Aws::S3::S3Client s3_client(awsCC);

Java SDK

下面以 AWS Java SDK 1.11.609 版本为例,介绍如何适配以访问专业版应用的存储桶。
1. 修改 AWS 配置和证书文件
以 Linux 操作系统为例,AWS SDK 的默认配置文件通常在用户目录下,可以参考 AWS 配置和证书文件文档。
在配置文件(文件位置是~/.aws/config) 中添加以下配置:
[default]
s3 =
addressing_style = virtual
在证书文件(文件路径为 ~/.aws/credentials)中配置点播专业版应用的密钥对:
[default]
aws_access_key_id = [AccessKeyId]
aws_secret_access_key = [SecretAccessKey]
2. 代码中设置 Endpoint
变量 endpointOverride 传入内网访问域名的不包含存储桶 ID 的部分,即 vodsrc-internal.[存储地域].eovod.com。以存储地域为 ap-chongqing 为例,代码示例如下所示:
S3Client s3Client = S3Client.builder()
.endpointOverride(URI.create("http://vodsrc-internal.ap-chongqing.eovod.com"))
.region(Region.of("ap-chongqing"))
.build();

.NET SDK

下面以 AWS .NET SDK 3.3.104.12 版本为例,介绍如何适配以访问专业版应用的存储桶。以存储地域为 ap-chongqing 为例,初始化代码示例如下所示:
string sAccessKeyId = "AccessKeyId";
string sAccessKeySecret = "SecretAccessKey";
string region = "ap-chongqing";

var config = new AmazonS3Config() { ServiceURL = "http://vodsrc-internal." + region + ".eovod.com" };
var client = new AmazonS3Client(sAccessKeyId, sAccessKeySecret, config);


Node.js SDK

下面以 AWS JS SDK 2.509.0 版本为例,介绍如何适配以访问专业版应用的存储桶。以存储地域为 ap-chongqing 为例,初始化代码示例如下所示:
var AWS = require('aws-sdk');

AWS.config.update({
accessKeyId: "AccessKeyId",
secretAccessKey: "SecretAccessKey",
region: "ap-chongqing",
endpoint: 'http://vodsrc-internal.ap-chongqing.eovod.com',
});
s3 = new AWS.S3({apiVersion: '2006-03-01'});

PHP SDK

下面以 AWS PHP SDK 3.109.3 版本为例,介绍如何适配以访问专业版应用的存储桶。
1. 修改 AWS 配置和证书文件
以 Linux 操作系统为例,AWS SDK 的默认配置文件通常在用户目录下,可以参考 AWS 配置和证书文件文档。
在配置文件(文件位置是~/.aws/config) 中添加以下配置:
[default]
s3 =
addressing_style = virtual
在证书文件(文件路径为 ~/.aws/credentials)中配置点播专业版应用的密钥对:
[default]
aws_access_key_id = [AccessKeyId]
aws_secret_access_key = [SecretAccessKey]
2. 代码中设置 Endpoint
变量 endpoint 传入内网访问域名的不包含存储桶 ID 的部分,即 http://vodsrc-internal.[存储地域].eovod.com。以存储地域为 ap-chongqing 为例,代码示例如下所示:
$S3Client = new S3Client([
'region' => 'ap-chongqing',
'version' => '2006-03-01',
'endpoint' => 'http://vodsrc-internal.ap-chongqing.eovod.com'
]);

Python SDK

下面以 AWS Python SDK 1.9.205 版本为例,介绍如何适配以访问专业版应用的存储桶。
1. 修改 AWS 配置和证书文件
以 Linux 操作系统为例,AWS SDK 的默认配置文件通常在用户目录下,可以参考 AWS 配置和证书文件文档。
在配置文件(文件位置是~/.aws/config) 中添加以下配置:
[default]
s3 =
addressing_style = virtual
在证书文件(文件路径为 ~/.aws/credentials)中配置点播专业版应用的密钥对:
[default]
aws_access_key_id = [AccessKeyId]
aws_secret_access_key = [SecretAccessKey]
2. 代码中设置 Endpoint
参数 endpoint_url 传入内网访问域名的不包含存储桶 ID 的部分,即 http://vodsrc-internal.[存储地域].eovod.com。以存储地域为 ap-chongqing 为例,代码示例如下所示:
client = boto3.client('s3', endpoint_url='http://vodsrc-internal.ap-chongqing.eovod.com')

兼容的 S3 API

GetObject
PutObject
ListParts

常见问题

如何判断是否内网访问?

以腾讯云服务器(Cloud Virtual Machine,CVM)访问专业版应用存储桶为例,判断是否使用内网访问 ,可以在 CVM 上 使用 nslookup 命令解析内网访问域名,若返回内网 IP,则可确定是内网访问,否则为外网访问。实际使用中,如果通过内网域名进行外网访问,服务端会返回 404 响应码。
说明:
内网 IP 地址一般形如 10.*.*.*、100.*.*.* ,VPC 网络一般为 169.254.*.* 等,这两种形式的 IP 都属于内网。