オブジェクトをバケットにアップロードすると、Object Storage Service (OSS) はそのオブジェクトの URL を生成します。この URL はバケットのパブリックエンドポイントであり、オブジェクトへのアクセスに使用できます。これらのオブジェクトにカスタムドメイン名を使用してアクセスするには、カスタムドメイン名をバケットにマッピングする CNAME レコードを追加します。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「クライアントの設定 (Go SDK V1)」をご参照ください。
例
CNAME トークンの作成
次のコードは、CNAME トークンを作成する方法を示しています。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットのリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョン ID を使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// バケット名を指定します (例: examplebucket)。
bucketName := "examplebucket"
// カスタムドメイン名を指定します。
cname := "www.example.com"
// CNAME トークンを作成します。
cbResult, err := client.CreateBucketCnameToken(bucketName, cname)
if err != nil {
log.Fatalf("Failed to create CNAME token: %v", err)
}
// CNAME トークン情報を出力します。
log.Printf("Cname: %s", cbResult.Cname)
log.Printf("Token: %s", cbResult.Token)
log.Printf("ExpireTime: %s", cbResult.ExpireTime)
}
CNAME トークンの取得
次のコードは、CNAME トークンを取得する方法を示しています。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットのリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョン ID を使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// バケット名を指定します (例: examplebucket)。
bucketName := "examplebucket"
// カスタムドメイン名を指定します。
cname := "www.example.com"
// CNAME トークンを取得します。
cbResult, err := client.GetBucketCnameToken(bucketName, cname)
if err != nil {
log.Fatalf("Failed to get CNAME token: %v", err)
}
// CNAME トークン情報を出力します。
log.Printf("Cname: %s", cbResult.Cname)
log.Printf("Token: %s", cbResult.Token)
log.Printf("ExpireTime: %s", cbResult.ExpireTime)
}
CNAME レコードの追加
カスタムドメイン名のマッピング
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットのリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョン ID を使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// バケット名を指定します (例: examplebucket)。
bucketName := "examplebucket"
// カスタムドメイン名を指定します。
cname := "www.example.com"
// カスタムドメイン名をバケットにマッピングします。
err = client.PutBucketCname(bucketName, cname)
if err != nil {
log.Fatalf("Failed to put bucket CNAME: %v", err)
}
// 成功メッセージを出力します。
log.Println("Put Bucket Cname Success!")
}
カスタムドメイン名のマッピングと証明書の関連付け
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットのリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョン ID を使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// バケット名を指定します (例: examplebucket)。
bucketName := "examplebucket"
// CNAME レコードと証明書を設定します。
putCnameConfig := oss.PutBucketCname{
Cname: "www.example.com",
CertificateConfiguration: &oss.CertificateConfiguration{
CertId: "92******-cn-hangzhou",
Certificate: "-----BEGIN CERTIFICATE-----MIIGeDCCBOCgAwIBAgIRAPj4FWpW5XN6kwgU7*******-----END CERTIFICATE-----",
PrivateKey: "-----BEGIN CERTIFICATE-----MIIFBzCCA++gT2H2hT6Wb3nwxjpLIfXmSVcV*****-----END CERTIFICATE-----",
Force: true,
},
}
// カスタムドメイン名をマッピングし、証明書を関連付けます。
err = client.PutBucketCnameWithCertificate(bucketName, putCnameConfig)
if err != nil {
log.Fatalf("Failed to bind CNAME and certificate: %v", err)
}
// 成功メッセージを出力します。
log.Println("Bind Certificate Success!")
}
証明書の関連付け解除
ドメイン名で証明書を使用する必要がなくなった場合は、証明書の関連付けを解除できます。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットのリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョン ID を使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// バケット名を指定します (例: examplebucket)。
bucketName := "examplebucket"
// CNAME レコードを設定し、証明書を削除します。
putCnameConfig := oss.PutBucketCname{
Cname: "www.example.com",
CertificateConfiguration: &oss.CertificateConfiguration{
DeleteCertificate: true,
},
}
// カスタムドメイン名をマッピングし、証明書の関連付けを解除します。
err = client.PutBucketCnameWithCertificate(bucketName, putCnameConfig)
if err != nil {
log.Fatalf("Failed to unbind CNAME and delete certificate: %v", err)
}
// 成功メッセージを出力します。
log.Println("Unbind Certificate Success!")
}
CNAME レコードのクエリ
次のコードは、CNAME レコードをクエリする方法を示しています。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットのリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョン ID を使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Error: %v", err)
}
// バケット名を指定します (例: examplebucket)。
bucketName := "examplebucket"
// CNAME レコードをクエリします。
cnResult, err := client.ListBucketCname(bucketName)
if err != nil {
log.Fatalf("Error: %v", err)
}
var certificate oss.Certificate
log.Printf("Bucket: %s", cnResult.Bucket)
log.Printf("Owner: %s", cnResult.Owner)
if len(cnResult.Cname) > 0 {
for _, cnameInfo := range cnResult.Cname {
// カスタムドメイン名を出力します。
log.Printf("Domain: %s", cnameInfo.Domain)
// カスタムドメイン名がマッピングされた時間を出力します。
log.Printf("LastModified: %s", cnameInfo.LastModified)
// ドメイン名のステータスを出力します。
log.Printf("Status: %s", cnameInfo.Status)
if cnameInfo.Certificate != certificate {
// 証明書のソースを出力します。
log.Printf("Type: %s", cnameInfo.Certificate.Type)
// 証明書 ID を出力します。
log.Printf("CertId: %s", cnameInfo.Certificate.CertId)
// 証明書のステータスを出力します。
log.Printf("Status: %s", cnameInfo.Certificate.Status)
// 証明書が関連付けられた時間を出力します。
log.Printf("CreationDate: %s", cnameInfo.Certificate.CreationDate)
// 証明書の署名を出力します。
log.Printf("Fingerprint: %s", cnameInfo.Certificate.Fingerprint)
// 証明書の有効期間の開始時刻を出力します。
log.Printf("ValidStartDate: %s", cnameInfo.Certificate.ValidStartDate)
// 証明書の有効期間の終了時刻を出力します。
log.Printf("ValidEndDate: %s", cnameInfo.Certificate.ValidEndDate)
}
}
}
}
CNAME レコードの削除
次のコードは、CNAME レコードを削除する方法を示しています。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error: %v", err)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットのリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、実際のリージョン ID を使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Error: %v", err)
}
// バケット名を指定します (例: examplebucket)。
bucketName := "examplebucket"
// カスタムドメイン名を指定します。
cname := "www.example.com"
// CNAME レコードを削除します。
err = client.DeleteBucketCname(bucketName, cname)
if err != nil {
log.Fatalf("Error: %v", err)
}
// 成功メッセージを出力します。
log.Println("Delete Bucket Cname Success!")
}
関連ドキュメント
ドメイン所有権を検証するための CNAME トークンの作成の詳細については、「CreateBucketCnameToken」をご参照ください。
CNAME トークンの取得の詳細については、「GetBucketCnameToken」をご参照ください。
CNAME レコードの追加の詳細については、「PutBucketCname」をご参照ください。
CNAME レコードのクエリの詳細については、「ListBucketCname」をご参照ください。
CNAME レコードの削除の詳細については、「DeleteBucketCname」をご参照ください。