オブジェクトをバケットにアップロードすると、Object Storage Service (OSS) はそのオブジェクトの URL を自動的に生成します。この URL にはバケットのパブリックエンドポイントが含まれており、この URL を使用してオブジェクトにアクセスできます。カスタムドメイン名を使用してオブジェクトにアクセスするには、CNAME レコードを追加してカスタムドメイン名をバケットにマッピングします。
注意事項
サンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhouを使用しています。デフォルトでは、パブリックエンドポイントが使用されます。バケットと同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS がサポートするリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。このトピックの例では、環境変数からアクセス認証情報を読み取ります。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定 (Go SDK V1)」をご参照ください。
サンプルコード
CNAME トークンの作成
次のコードを使用して CNAME トークンを作成します。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// init 関数は、コマンドラインフラグを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// コマンドラインフラグを解析します。
flag.Parse()
// バケット名が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// CNAME トークンを作成します。
request := &oss.CreateCnameTokenRequest{
Bucket: oss.Ptr(bucketName),
BucketCnameConfiguration: &oss.BucketCnameConfiguration{
Cname: &oss.Cname{
Domain: oss.Ptr("www.example.com"), // カスタムドメイン名を指定します。
},
},
}
// リクエストを実行して CNAME トークンを作成します。
result, err := client.CreateCnameToken(context.TODO(), request)
if err != nil {
log.Fatalf("failed to create bucket cname token %v", err)
}
// CNAME トークンの情報を出力します。
log.Printf("Cname: %s", *result.CnameToken.Cname)
log.Printf("Token: %s", *result.CnameToken.Token)
log.Printf("ExpireTime: %s", *result.CnameToken.ExpireTime)
}
CNAME トークンの取得
次のコードを使用して CNAME トークンを取得します。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// init 関数は、コマンドラインフラグを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// コマンドラインフラグを解析します。
flag.Parse()
// バケット名が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットの CNAME トークンを取得するリクエストを作成します。
request := &oss.GetCnameTokenRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
Cname: oss.Ptr("www.example.com"), // カスタムドメイン名を指定します。
}
// リクエストを実行して CNAME トークンを取得します。
result, err := client.GetCnameToken(context.TODO(), request)
if err != nil {
log.Fatalf("failed to get bucket cname token %v", err)
}
// CNAME トークンの情報を出力します。
log.Printf("Cname: %s", result.CnameToken.Cname)
log.Printf("Token: %s", result.CnameToken.Token)
log.Printf("ExpireTime: %s", result.CnameToken.ExpireTime)
}
CNAME レコードの追加
カスタムドメイン名のマッピング
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// init 関数は、コマンドラインフラグを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// コマンドラインフラグを解析します。
flag.Parse()
// バケット名が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットに CNAME レコードを追加するリクエストを作成します。
request := &oss.PutCnameRequest{
Bucket: oss.Ptr(bucketName),
BucketCnameConfiguration: &oss.BucketCnameConfiguration{
Cname: &oss.Cname{
Domain: oss.Ptr("www.example.com"), // カスタムドメイン名を指定します。
},
},
}
// リクエストを実行して CNAME レコードを追加します。
result, err := client.PutCname(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put bucket cname %v", err)
}
// 結果を出力します。
log.Printf("put bucket cname result:%#v\n", result)
}
ドメインと証明書のマッピング
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// init 関数は、コマンドラインフラグを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// コマンドラインフラグを解析します。
flag.Parse()
// バケット名が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// カスタムドメイン名をマッピングし、証明書を関連付けるリクエストを作成します。
request := &oss.PutCnameRequest{
Bucket: oss.Ptr(bucketName),
BucketCnameConfiguration: &oss.BucketCnameConfiguration{
Cname: &oss.Cname{
Domain: oss.Ptr("www.example.com"), // カスタムドメイン名を指定します。
CertificateConfiguration: &oss.CertificateConfiguration{
CertId: oss.Ptr("92******-cn-hangzhou"),
Certificate: oss.Ptr("-----BEGIN CERTIFICATE-----MIIFBzCCA++gT2H2hT6Wb3nwxjpLIfXmSVcV*****-----END CERT"),
PrivateKey: oss.Ptr("-----BEGIN CERTIFICATE-----MIIFBzCCA++gT2H2hT6Wb3nwxjpLIfXmSVcV*****-----END CERTIFICATE-----"),
Force: oss.Ptr(true),
},
},
},
}
// リクエストを実行します。
result, err := client.PutCname(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put bucket cname %v", err)
}
// 結果を出力します。
log.Printf("put bucket cname result:%#v\n", result)
}
証明書の関連付け解除
ドメイン名に証明書が不要になった場合は、関連付けを解除できます。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// init 関数は、コマンドラインフラグを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// コマンドラインフラグを解析します。
flag.Parse()
// バケット名が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// 証明書の関連付けを解除するリクエストを作成します。
request := &oss.PutCnameRequest{
Bucket: oss.Ptr(bucketName),
BucketCnameConfiguration: &oss.BucketCnameConfiguration{
Cname: &oss.Cname{
Domain: oss.Ptr("www.example.com"), // カスタムドメイン名を指定します。
CertificateConfiguration: &oss.CertificateConfiguration{
DeleteCertificate: oss.Ptr(true), // 証明書の関連付けを解除します。
},
},
},
}
// リクエストを実行して証明書の関連付けを解除します。
result, err := client.PutCname(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put bucket cname %v", err)
}
// 結果を出力します。
log.Printf("put bucket cname result:%#v\n", result)
}
CNAME レコードのリスト表示
次のコードを使用して、バケットの CNAME レコードをリスト表示します。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// init 関数は、コマンドラインフラグを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// コマンドラインフラグを解析します。
flag.Parse()
// バケット名が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットの CNAME レコードをリスト表示するリクエストを作成します。
request := &oss.ListCnameRequest{
Bucket: oss.Ptr(bucketName),
}
// リクエストを実行して CNAME レコードをリスト表示します。
result, err := client.ListCname(context.TODO(), request)
if err != nil {
log.Fatalf("failed to list bucket cname %v", err)
}
log.Printf("Bucket: %s", result.Bucket)
log.Printf("Owner: %s", result.Owner)
if len(result.Cnames) > 0 {
for _, cnameInfo := range result.Cnames {
// カスタムドメイン名を出力します。
log.Printf("Domain: %s", cnameInfo.Domain)
// 最終更新時刻を出力します。
log.Printf("LastModified: %s", cnameInfo.LastModified)
// ドメイン名のステータスを出力します。
log.Printf("Status: %s", cnameInfo.Status)
}
}
}
CNAME レコードの削除
次のコードを使用して CNAME レコードを削除します。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケットの名前。
)
// init 関数は、コマンドラインフラグを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// コマンドラインフラグを解析します。
flag.Parse()
// バケット名が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルトの設定をロードし、認証情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットの CNAME レコードを削除するリクエストを作成します。
request := &oss.DeleteCnameRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
BucketCnameConfiguration: &oss.BucketCnameConfiguration{
Cname: &oss.Cname{
Domain: oss.Ptr("www.example.com"), // カスタムドメイン名を指定します。
},
},
}
// リクエストを実行して CNAME レコードを削除します。
result, err := client.DeleteCname(context.TODO(), request)
if err != nil {
log.Fatalf("failed to delete bucket cname %v", err)
}
// 結果を出力します。
log.Printf("delete bucket cname result:%#v\n", result)
}
参照
ドメインの所有権の検証のために CNAME トークンを作成する API オペレーションについては、「CreateCnameToken」をご参照ください。
CNAME トークンを取得する API オペレーションについては、「GetCnameToken」をご参照ください。
CNAME レコードを追加する API オペレーションについては、「PutCname」をご参照ください。
CNAME レコードをリスト表示する API オペレーションについては、「ListCname」をご参照ください。
CNAME レコードを削除する API オペレーションについては、「DeleteCname」をご参照ください。