一、简介
云点播专业版应用支持在腾讯云内网使用 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 mainimport ( "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 自定义 Endpointfunc (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
·HeadObject
·ListObjects
·ListObjectsV2
·GetObject
·PutObject
·DeleteObject
·DeleteObjects
·ListMultipartUploads
·CreateMultipartUpload
·CompleteMultipartUpload
·AbortMultipartUpload
·UploadPart
·ListParts
十五、如何判断是否内网访问?
以腾讯云服务器(Cloud Virtual Machine,CVM)访问专业版应用存储桶为例,判断是否使用内网访问 ,可以在 CVM 上 使用 nslookup 命令解析内网访问域名,若返回内网 IP,则可确定是内网访问,否则为外网访问。实际使用中,如果通过内网域名进行外网访问,服务端会返回 404 响应码。
注意:说明:
注意:内网 IP 地址一般形如 10.*.*.*、100.*.*.* ,VPC 网络一般为 169.254.*.* 等,这两种形式的 IP 都属于内网。