tencent cloud

Cloud Object Storage

AWS S3 SDKを使用したCOSアクセス

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-01-24 13:09:34

概要

Cloud Object Storage(COS)はAWS S3と互換性のあるAPIを提供しているため、データをS3からCOSに移行した後、簡単な設定変更を行うだけで、クライアントアプリケーションに簡単にCOSサービスとの互換性を持たせることができます。ここでは主に、各開発プラットフォームにおけるS3 SDKの適用の手順についてご説明します。適用手順の追加が完了すると、S3 SDKのインターフェースを使用してCOS上のファイルにアクセスできるようになります。

準備作業

Tencent Cloudアカウントの登録 が完了しており、なおかつ CAMコンソール 上でTencent CloudキーのSecretIDとSecretKeyを取得済みであることとします。
S3 SDKを統合済みで、正常に実行可能なクライアントアプリケーションがすでにあることとします。

Android

以下ではAWS Android SDK 2.14.2バージョンを例に、COSサービスにアクセスできるように適用する方法についてご説明します。端末からCOSへのアクセスについては、パーマネントキーをクライアントコード内に埋め込むと、開示されるリスクが極めて大きいため、STSサービスにアクセスして一時キーを取得することをお勧めします。詳細については、一時キーの生成および使用ガイド をご参照ください。

初期化

インスタンスを初期化する際、一時キープロバイダおよびEndpointを設定する必要があります。バケットの所在リージョンがap-guangzhouの場合を例にとります。
AmazonS3Client s3 = new AmazonS3Client(new AWSCredentialsProvider() {
@Override
public AWSCredentials getCredentials() {
// ここではバックエンドがSTSにリクエストし、一時キー情報を取得します
return new BasicSessionCredentials(
"<TempSecretID>", "<TempSecretKey>", "<STSSessionToken>"
);
}

@Override
public void refresh() {
//
}
});

s3.setEndpoint("cos.ap-guangzhou.myqcloud.com");

iOS

AWS iOS SDK 2.10.2バージョンを例に、COSサービスにアクセスできるように適用する方法についてご説明します。端末からCOSへのアクセスについては、パーマネントキーをクライアントコード内に埋め込むと、開示されるリスクが極めて大きいため、STSサービスにアクセスして一時キーを取得することをお勧めします。詳細については、一時キーの生成および使用ガイド をご参照ください。

1. AWSCredentialsProviderプロトコルの実装

-(AWSTask<AWSCredentials *> *)credentials{
// ここではバックエンドがSTSにリクエストし、一時キー情報を取得します
AWSCredentials *credential = [[AWSCredentials alloc]initWithAccessKey:@"<TempSecretID>" secretKey:@"<TempSecretKey>" sessionKey:@"<STSSessionToken>" expiration:[NSDate dateWithTimeIntervalSince1970:1565770577]];

return [AWSTask taskWithResult:credential];

}

- (void)invalidateCachedTemporaryCredentials{

}

2. 一時キープロバイダおよびEndpointの提供

バケットの所在リージョンがap-guangzhouの場合を例にとります。
NSURL* bucketURL = [NSURL URLWithString:@"http://cos.ap-guangzhou.myqcloud.com"];

AWSEndpoint* endpoint = [[AWSEndpoint alloc] initWithRegion:AWSRegionUnknown service:AWSServiceS3 URL:bucketURL];
AWSServiceConfiguration* configuration = [[AWSServiceConfiguration alloc]
initWithRegion:AWSRegionUSEast2 endpoint:endpoint
credentialsProvider:[MyCredentialProvider new]]; // MyCredentialProviderがAWSCredentialsProviderプロトコルを実装しました

[[AWSServiceManager defaultServiceManager] setDefaultServiceConfiguration:configuration];

Node.js

以下ではAWS JS SDK 2.509.0バージョンを例に、COSサービスにアクセスできるように適用する方法についてご説明します。

初期化

インスタンスを初期化する際にTencent CloudキーおよびEndpointを設定します。バケットの所在リージョンがap-guangzhouの場合のコードの例は次のようになります。
var AWS = require('aws-sdk');

AWS.config.update({
accessKeyId: "COS_SECRETID",
secretAccessKey: "COS_SECRETKEY",
region: "ap-guangzhou",
endpoint: 'https://cos.ap-guangzhou.myqcloud.com',
});

s3 = new AWS.S3({apiVersion: '2006-03-01'});

Java

以下ではAWS Java SDK 1.11.609バージョンを例に、COSサービスにアクセスできるように適用する方法についてご説明します。

1. AWSの設定および証明書ファイルを変更する

説明:
以下ではLinuxを例に、AWSの設定および証明書ファイルの変更を行います。
AWS SDKのデフォルトの設定ファイルは通常、ユーザーディレクトリ下にあります。設定および証明書ファイル をご参照ください。
設定ファイル(ファイルの位置は~/.aws/config)に次の設定情報を追加します。
[default]
s3 =
addressing_style = virtual
証明書ファイル(ファイルの位置は~/.aws/credentials)にTencent Cloudのキーを設定します。
[default]
aws_access_key_id = [COS_SECRETID]
aws_secret_access_key = [COS_SECRETKEY]

2. コードにEndpointを設定する

バケットの所在リージョンがap-guangzhouの場合のコードの例は次のようになります。
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(
"http://cos.ap-guangzhou.myqcloud.com",
"ap-guangzhou"))
.build();
V2バージョンのAWS Java SDKを使用している場合、コード例は以下の通りです:
S3Client s3Client = S3Client.builder()
.endpointOverride(URI.create("http://cos.ap-guangzhou.myqcloud.com"))
.region(Region.of("ap-guangzhou"))
.build();

Python

以下ではAWS Python SDK 1.9.205バージョンを例に、COSサービスにアクセスできるように適用する方法についてご説明します。

1. AWSの設定および証明書ファイルを変更する

説明:
以下ではLinuxを例に、AWSの設定および証明書ファイルの変更を行います。
AWS SDKのデフォルトの設定ファイルは通常、ユーザーディレクトリ下にあります。設定および証明書ファイル をご参照ください。
設定ファイル(ファイルの位置は~/.aws/config)に次の設定を追加します。
[default]
s3 =
signature_version = s3
addressing_style = virtual
証明書ファイル(ファイルの位置は~/.aws/credentials)にTencent Cloudのキーを設定します。
[default]
aws_access_key_id = [COS_SECRETID]
aws_secret_access_key = [COS_SECRETKEY]

2. コードにEndpointを設定する

バケットの所在リージョンがap-guangzhouの場合を例にとります。
client = boto3.client('s3', endpoint_url='https://cos.ap-guangzhou.myqcloud.com')

PHP

以下ではAWS PHP SDK 3.109.3バージョンを例に、COSサービスにアクセスできるように適用する方法についてご説明します。

1. AWSの設定および証明書ファイルを変更する

説明:
以下ではLinuxを例に、AWSの設定および証明書ファイルの変更を行います。
AWS SDKのデフォルトの設定ファイルは通常、ユーザーディレクトリ下にあります。設定および証明書ファイル をご参照ください。
設定ファイル(ファイルの位置は~/.aws/config)に次の設定を追加します。
[default]
s3 =
addressing_style = virtual
証明書ファイル(ファイルの位置は~/.aws/credentials)にTencent Cloudのキーを設定します。
[default]
aws_access_key_id = [COS_SECRETID]
aws_secret_access_key = [COS_SECRETKEY]

2. コードにEndpointを設定する

バケットの所在リージョンがap-guangzhouの場合を例にとります。
$S3Client = new S3Client([
'region' => 'ap-guangzhou',
'version' => '2006-03-01',
'endpoint' => 'https://cos.ap-guangzhou.myqcloud.com'
]);


.NET

以下ではAWS .NET SDK 3.3.104.12バージョンを例に、COSサービスにアクセスできるように適用する方法についてご説明します。

初期化

インスタンスを初期化する際にTencent CloudキーおよびEndpointを設定します。バケットの所在リージョンがap-guangzhouの場合を例にとります。
string sAccessKeyId = "COS_SECRETID";
string sAccessKeySecret = "COS_SECRETKEY";
string region = "ap-guangzhou";

var config = new AmazonS3Config() { ServiceURL = "https://cos." + region + ".myqcloud.com" };
var client = new AmazonS3Client(sAccessKeyId, sAccessKeySecret, config);


Go

aws-sdk-go

以下ではAWS Go SDK 1.21.9バージョンを例に、COSサービスにアクセスできるように適用する方法についてご説明します。

1. キーによってsessionを作成する

バケットの所在リージョンがap-guangzhouの場合を例にとります。
func newSession() (*session.Session, error) {
creds := credentials.NewStaticCredentials("COS_SECRETID", "COS_SECRETKEY", "")
region := "ap-guangzhou"
endpoint := "http://cos.ap-guangzhou.myqcloud.com"
config := &aws.Config{
Region: aws.String(region),
Endpoint: &endpoint,
S3ForcePathStyle: aws.Bool(true),
Credentials: creds,
// DisableSSL: &disableSSL,
}
return session.NewSession(config)
}

2. sessionによってserverを作成し、リクエストを送信する

sess, _ := newSession()
service := s3.New(sess)

// ファイルのアップロードの例
fp, _ := os.Open("yourLocalFilePath")
defer fp.Close()

ctx, cancel := context.WithTimeout(context.Background(), time.Duration(30)*time.Second)
defer cancel()

service.PutObjectWithContext(ctx, &s3.PutObjectInput{
Bucket: aws.String("examplebucket-1250000000"),
Key: aws.String("exampleobject"),
Body: fp,
})

aws-sdk-go-v2

以下に、aws-sdk-go-v2バージョンのオブジェクトアップロードを例に、COSサービスにアクセスする方法を紹介します。
package main

import (
"context"
"fmt"
"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"
"os"
"strings"
)

func main() {
// 環境変数SECRETIDとSECRETKEYからキーを取得する
creds := credentials.NewStaticCredentialsProvider(os.Getenv("SECRETID"), os.Getenv("SECRETKEY"), "") //キー
customResolver := aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {
return aws.Endpoint{
PartitionID: "aws",
URL: "http://cos.ap-guangzhou.myqcloud.com",
SigningRegion: "ap-guangzhou",
}, nil

})

cfg, _ := config.LoadDefaultConfig(
context.TODO(),

config.WithCredentialsProvider(creds),
config.WithEndpointResolverWithOptions(customResolver))

s3Client := s3.NewFromConfig(cfg, func(o *s3.Options) {
o.UsePathStyle = false // virtual-host方式でアクセスする
})

input := &s3.PutObjectInput{
Body: strings.NewReader("xxxxxxx"),
Bucket: aws.String("test-1250000000"), //ストレージバケット名
Key: aws.String("test"), //オブジェクトキー
StorageClass: "STANDARD",
}

result, err := s3Client.PutObject(context.Background(), input)
if err != nil {
panic(err)
}
fmt.Println(result)



C++

以下ではAWS C++ SDK 1.7.68バージョンを例に、COSサービスにアクセスできるように適用する方法についてご説明します。

1. AWSの設定および証明書ファイルを変更する

説明:
以下ではLinuxを例に、AWSの設定および証明書ファイルの変更を行います。
AWS SDKのデフォルトの設定ファイルは通常、ユーザーディレクトリ下にあります。設定および証明書ファイル をご参照ください。
設定ファイル(ファイルの位置は~/.aws/config)に次の設定を追加します。
[default]
s3 =
addressing_style = virtual
証明書ファイル(ファイルの位置は~/.aws/credentials)にTencent Cloudのキーを設定します。
[default]
aws_access_key_id = [COS_SECRETID]
aws_secret_access_key = [COS_SECRETKEY]

2. コードにEndpointを設定する

バケットの所在リージョンがap-guangzhouの場合のコードの例は次のようになります。
Aws::Client::ClientConfiguration awsCC;
awsCC.scheme = Aws::Http::Scheme::HTTP;
awsCC.region = "ap-guangzhou";
awsCC.endpointOverride = "cos.ap-guangzhou.myqcloud.com";
Aws::S3::S3Client s3_client(awsCC);


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック