オブジェクトをバケットにアップロードすると、Object Storage Service (OSS) は、アップロードされたオブジェクトのバケットのパブリックエンドポイントを含む URL を自動的に生成します。これらの URL を使用してオブジェクトにアクセスできます。カスタムドメイン名を使用してオブジェクトにアクセスする場合は、オブジェクトが格納されているバケットにカスタムドメイン名をマッピングする CNAME レコードを追加する必要があります。
注記
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhouを使用しています。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。バケットが配置されているのと同じリージョン内の他の Alibaba Cloud サービスを使用してバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。 Object Storage Service (OSS) でサポートされているリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報を構成する方法の詳細については、「アクセス認証情報を構成する」をご参照ください。
サンプルコード
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", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// CNAME トークンを作成します。
request := &oss.CreateCnameTokenRequest{
Bucket: oss.Ptr(bucketName),
BucketCnameConfiguration: &oss.BucketCnameConfiguration{
Domain: oss.Ptr("www.example.com"), // カスタムドメイン名を指定します。
},
}
// CNAME トークンを作成する操作を実行します。
result, err := client.CreateCnameToken(context.TODO(), request)
if err != nil {
log.Fatalf("バケット CNAME トークンの作成に失敗しました %v", err)
}
// CNAME トークンに関する情報を表示します。
log.Printf("CNAME: %s", *result.CnameToken.Cname)
log.Printf("トークン: %s", *result.CnameToken.Token)
log.Printf("有効期限: %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", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
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"), // カスタムドメイン名を指定します。
}
// クエリ操作を実行します。
result, err := client.GetCnameToken(context.TODO(), request)
if err != nil {
log.Fatalf("バケット CNAME トークンの取得に失敗しました %v", err)
}
// CNAME トークンに関する情報を表示します。
log.Printf("CNAME: %s", result.CnameToken.Cname)
log.Printf("トークン: %s", result.CnameToken.Token)
log.Printf("有効期限: %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", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// CNAME レコードを追加するリクエストを作成します。
request := &oss.PutCnameRequest{
Bucket: oss.Ptr(bucketName),
BucketCnameConfiguration: &oss.BucketCnameConfiguration{
Domain: oss.Ptr("www.example.com"), // カスタムドメイン名を指定します。
},
}
// リクエストを実行します。
result, err := client.PutCname(context.TODO(), request)
if err != nil {
log.Fatalf("バケット CNAME の設定に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケット CNAME の設定結果: %#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", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// カスタムドメイン名をマッピングし、証明書をドメイン名に関連付けるリクエストを作成します。
request := &oss.PutCnameRequest{
Bucket: oss.Ptr(bucketName),
BucketCnameConfiguration: &oss.BucketCnameConfiguration{
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("バケット CNAME の設定に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケット CNAME の設定結果: %#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", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// 証明書の関連付けを解除するリクエストを作成します。
request := &oss.PutCnameRequest{
Bucket: oss.Ptr(bucketName),
BucketCnameConfiguration: &oss.BucketCnameConfiguration{
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("バケット CNAME の設定に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケット CNAME の設定結果: %#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", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
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("バケット CNAME の一覧表示に失敗しました %v", err)
}
log.Printf("バケット: %s", result.Bucket)
log.Printf("所有者: %s", result.Owner)
if len(result.Cnames) > 0 {
for _, cnameInfo := range result.Cnames {
// カスタムドメイン名を表示します。
log.Printf("ドメイン: %s", cnameInfo.Domain)
// カスタムドメイン名がバケットにマッピングされた時点を表示します。
log.Printf("最終更新日時: %s", cnameInfo.LastModified)
// ドメイン名のステータスを表示します。
log.Printf("ステータス: %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", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
}
func main() {
// コマンドラインパラメータを解析します。
flag.Parse()
// バケットの名前が指定されているかどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。バケット名が必要です。")
}
// リージョンが指定されているかどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメータです。リージョンが必要です。")
}
// デフォルトの構成を読み込み、認証情報プロバイダーとリージョンを指定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットにマッピングされている CNAME レコードを削除するリクエストを作成します。
request := &oss.DeleteCnameRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
BucketCnameConfiguration: &oss.BucketCnameConfiguration{
Domain: oss.Ptr("www.example.com"), // カスタムドメイン名を指定します。
},
}
// CNAME レコードを削除する操作を実行します。
result, err := client.DeleteCname(context.TODO(), request)
if err != nil {
log.Fatalf("バケット CNAME の削除に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケット CNAME の削除結果: %#v\n", result)
}
関連情報
ドメイン名の所有権を確認するために呼び出すことができる API 操作の詳細については、「CreateCnameToken」をご参照ください。
CNAME トークンをクエリするために呼び出すことができる API 操作の詳細については、「GetCnameToken」をご参照ください。
バケットに CNAME レコードを追加するために呼び出すことができる API 操作の詳細については、「PutCname」をご参照ください。
バケットにマッピングされている CNAME レコードをクエリするために呼び出すことができる API 操作の詳細については、「ListCname」をご参照ください。
バケットにマッピングされている CNAME レコードを削除するために呼び出すことができる API 操作の詳細については、「DeleteCname」をご参照ください。