简介
CSP 提供了 AWS S3 兼容的 API,因此当您的数据从 S3 迁移到 CSP 之后,只需要进行简单的配置修改,即可让您的客户端应用轻松兼容 CSP 服务。本文主要介绍不同开发平台的 S3 SDK 的适配步骤。在完成添加适配步骤后,您就可以使用 S3 SDK 的接口来访问 CSP 上的文件了。
准备工作
- 您已注册账号,并且从访问管理 > 云API密钥上获取了密钥 SecretID 与 SecretKey。
- 您已有一个集成了 S3 SDK,并能正常运行的客户端应用。
Java
下面以 AWS Java SDK 2.20.0 版本为例,介绍如何适配以便访问 CSP 服务。
1. 修改 AWS 配置和证书文件
说明:
下面以 Linux 为例,修改 AWS 配置和证书文件。
AWS SDK 的默认配置文件通常在用户目录下,可以参考 配置和证书文件。
在配置文件(文件位置是
~/.aws/config)中添加以下配置信息:[default] s3 = addressing_style = virtual在证书文件(文件位置是
~/.aws/credentials)中配置密钥:[default] aws_access_key_id = [CSP_SECRETID] aws_secret_access_key = [CSP_SECRETKEY]
2. 代码中设置 Endpoint
以存储桶所在地域是ap-region-jcctest-ops为例,代码示例如下:
S3Client s3 = S3Client.builder()
.endpointOverride(URI.create("http://cos.ap-region-jcctest-ops.csp.yfm13.fsphere.cn"))
.region(Region.of("ap-region-jcctest-ops"))
.build();
Python
下面以 AWS Python SDK 1.9.205 版本为例,介绍如何适配以便访问 COS 服务。
1. 修改 AWS 配置和证书文件
说明:
下面以 Linux 为例,修改 AWS 配置和证书文件。
AWS SDK 的默认配置文件通常在用户目录下,可以参考 配置和证书文件。
在证书文件(文件位置是
~/.aws/credentials)中配置密钥:[default] aws_access_key_id = [CSP_SECRETID] aws_secret_access_key = [CSP_SECRETKEY]
2. 代码中设置 Endpoint
以存储桶所在地域是ap-region-jcctest-ops为例:
s3 = boto3.client(
's3',
region_name='ap-region-jcctest-ops',
endpoint_url='http://cos.ap-region-jcctest-ops.csp.yfm13.fsphere.cn',
verify=True, # 是否验证证书 True/False/'/path/to/ca-bundle.crt'
use_ssl=False # 是否使用 SSL/TLS
)
Go
下面以 AWS Go SDK v1.55.6 版本为例,介绍如何适配以便访问 CSP 服务。
1. 修改 AWS 证书文件
在证书文件(文件位置是
~/.aws/credentials)中配置密钥:[default] aws_access_key_id = [CSP_SECRETID] aws_secret_access_key = [CSP_SECRETKEY]
2. 简单的实例
package main
import (
"fmt"
"log"
"os"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
)
func main() {
// 1. Create AWS session
// Credentials are loaded from environment variables or ~/.aws/credentials
region := "ap-region-jcctest-ops"
endpoint := "http://cos.ap-region-jcctest-ops.csp.yfm13.fsphere.cn"
sess, err := session.NewSession(&aws.Config{
Region: aws.String(region),
Endpoint: &endpoint,
})
if err != nil {
log.Fatal("Failed to create session:", err)
}
// 2. Create S3 service client
svc := s3.New(sess)
// 3. List all buckets
fmt.Println("Listing buckets:")
result, err := svc.ListBuckets(nil)
if err != nil {
log.Fatal("Failed to list buckets:", err)
}
for _, b := range result.Buckets {
fmt.Printf("* %s created at %s\n",
aws.StringValue(b.Name), aws.TimeValue(b.CreationDate))
}
// 4. Upload file to S3
bucketName := "test-1255000327" // Replace with your bucket name
fileName := "/tmp/test.txt" // Local file name
objectKey := "uploaded_test_by_aws_go_sdk.txt" // Object key in S3
file, err := os.Open(fileName)
if err != nil {
log.Fatal("Failed to open file:", err)
}
defer file.Close()
_, err = svc.PutObject(&s3.PutObjectInput{
Bucket: aws.String(bucketName),
Key: aws.String(objectKey),
Body: file,
})
if err != nil {
log.Fatal("Failed to upload file:", err)
}
fmt.Printf("Successfully uploaded file %s to %s/%s\n", fileName, bucketName, objectKey)
// 5. Download file from S3
downloadedFile := "downloaded_test.txt"
out, err := os.Create(downloadedFile)
if err != nil {
log.Fatal("Failed to create download file:", err)
}
defer out.Close()
result2, err := svc.GetObject(&s3.GetObjectInput{
Bucket: aws.String(bucketName),
Key: aws.String(objectKey),
})
if err != nil {
log.Fatal("Failed to download file:", err)
}
defer result2.Body.Close()
_, err = out.ReadFrom(result2.Body)
if err != nil {
log.Fatal("Failed to save downloaded file:", err)
}
fmt.Printf("Successfully downloaded file %s/%s to %s\n", bucketName, objectKey, downloadedFile)
}
C++
下面以 AWS C++ SDK 1.7.68 版本为例,介绍如何适配以便访问 CSP 服务。
1. 修改 AWS 配置和证书文件
说明:
下面以 Linux 为例,修改 AWS 配置和证书文件。
AWS SDK 的默认配置文件通常在用户目录下,可以参考 配置和证书文件。
在配置文件(文件位置是
~/.aws/config) 中添加以下配置:[default] s3 = addressing_style = virtual在证书文件(文件位置是
~/.aws/credentials)中配置密钥:[default] aws_access_key_id = [CSP_SECRETID] aws_secret_access_key = [CSP_SECRETKEY]
2. 代码中设置 Endpoint
以存储桶所在地域是ap-region-jcctest-ops为例,代码示例如下:
Aws::Client::ClientConfiguration awsCC;
awsCC.scheme = Aws::Http::Scheme::HTTP;
awsCC.region = "ap-region-jcctest-ops";
awsCC.endpointOverride = "cos.ap-region-jcctest-ops.csp.yfm13.fsphere.cn";
Aws::S3::S3Client s3_client(awsCC);