すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:カスタムドメイン名のマッピング (Go SDK V2)

最終更新日:Apr 03, 2026

オブジェクトをバケットにアップロードすると、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(&region, "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(&region, "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(&region, "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(&region, "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(&region, "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(&region, "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(&region, "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」をご参照ください。