バケットに対して静的 Web サイトホスティングを有効にし、ミラーリングベースのバックツーオリジンルールを構成できます。バケットで静的 Web サイトをホストした後は、バケットにアクセスして Web サイトにアクセスできます。指定されたインデックスページまたはエラーページに自動的にリダイレクトされます。ミラーリングベースのバックツーオリジンルールが構成されて有効になると、ミラーリングベースのバックツーオリジンを使用して、Object Storage Service(OSS)にデータをシームレスに移行できます。
注意事項
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhouを使用しています。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。バケットが配置されているのと同じリージョン内の他の Alibaba Cloud サービスを使用してバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。 Object Storage Service (OSS) でサポートされているリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の構成方法の詳細については、「アクセス認証情報を構成する」をご参照ください。
oss:PutBucketWebsite権限は、静的 Web サイトホスティングまたはミラーリングベースのバックツーオリジン構成に必要です。oss:GetBucketWebsite権限は、静的 Web サイトホスティングまたはミラーリングベースのバックツーオリジン構成を照会するために必要です。oss:DeleteBucketWebsite権限は、静的 Web サイトホスティングまたはミラーリングベースのバックツーオリジン構成を削除するために必要です。 詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。
静的 Web サイトホスティング
静的 Web サイトとは、すべての Web ページが静的コンテンツのみで構成される Web サイトです。クライアントで実行できる JavaScript コードなどのスクリプトも含まれます。静的 Web サイトホスティング機能を使用して、静的 Web サイトを OSS バケットでホストし、バケットのドメイン名を使用して Web サイトにアクセスできます。
静的 Web サイトホスティングを構成する
次のコードは、静的 Web サイトホスティングを構成する方法の例を示しています。
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)
// バケットの静的 Web サイトホスティングを構成するリクエストを作成します。
request := &oss.PutBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
WebsiteConfiguration: &oss.WebsiteConfiguration{
IndexDocument: &oss.IndexDocument{
Suffix: oss.Ptr("index.html"), // バケットでホストされている静的 Web サイトのデフォルトホームページを index.html に設定します。
SupportSubDir: oss.Ptr(true), // サブディレクトリがサポートされていることを指定します。
Type: oss.Ptr(int64(0)), // タイプ(このパラメータを 0 に設定すると、静的 Web サイトホスティングが構成されます)。
},
ErrorDocument: &oss.ErrorDocument{
Key: oss.Ptr("error.html"), // エラーページを error.html に設定します。
HttpStatus: oss.Ptr(int64(404)), // HTTP ステータスコード。
},
},
}
// 静的 Web サイトホスティングを構成するリクエストを実行します。
result, err := client.PutBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("バケット Web サイトの設定に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケット Web サイトの設定結果:%#v\n", result)
}
静的 Web サイトホスティング構成を照会する
次のコードは、静的 Web サイトホスティング構成を照会する方法の例を示しています。
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)
// バケットの静的 Web サイトホスティング構成を照会するリクエストを作成します。
request := &oss.GetBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
}
// クエリ操作を実行し、結果を処理します。
result, err := client.GetBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("バケット Web サイトの取得に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケット Web サイトの取得結果:%#v\n", result)
}
静的 Web サイトホスティング構成を削除する
静的 Web サイトホスティング構成を削除するためのサンプルコードスニペットを以下に示します。
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)
// バケットの静的 Web サイトホスティング構成を削除するリクエストを作成します。
request := &oss.DeleteBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName),
}
// リクエストを実行し、結果を処理します。
result, err := client.DeleteBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("バケット Web サイトの削除に失敗しました %v", err)
}
// 削除の結果を表示します。
log.Printf("バケット Web サイトの削除結果:%#v\n", result)
}
ミラーリングベースのバックツーオリジン
ミラーリングベースのバックツーオリジンを使用すると、データを OSS にシームレスに移行できます。たとえば、サービスの中断を引き起こすことなく、セルフマネージドオリジンまたは別のクラウドサービスから OSS にサービスを移行できます。移行中にミラーリングベースのバックツーオリジンルールを使用して、OSS に移行されていないデータを取得できます。これにより、業務継続性が確保されます。
ミラーリングベースのバックツーオリジンを構成する
リクエスターが指定されたバケット内のオブジェクトにアクセスしようとしたが、オブジェクトが存在しない場合、オリジン内のオブジェクトの URL とバックツーオリジン条件を指定して、リクエスターがオリジンからオブジェクトを取得できるようにすることができます。たとえば、examplebucket という名前のバケットが中国 (杭州) リージョンにあるとします。リクエスターが中国 (杭州) リージョンにある examplebucket のルートディレクトリの examplefolder ディレクトリにあるオブジェクトにアクセスしようとしたが、オブジェクトが存在しない場合、リクエスターはオリジン www.example.com にリダイレクトされ、オリジンの examplefolder ディレクトリに保存されている必要なオブジェクトにアクセスします。
次のコードは、前述のシナリオでミラーリングベースのバックツーオリジンを構成する方法の例を示しています。
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)
// ミラーリングベースのバックツーオリジンルールを構成します。
ruleOk := oss.RoutingRule{
RuleNumber: oss.Ptr(int64(1)),
Condition: &oss.RoutingRuleCondition{
KeyPrefixEquals: oss.Ptr("myobject"), // 一致するオブジェクトのプレフィックスを指定します。
HttpErrorCodeReturnedEquals: oss.Ptr(int64(404)), // バックツーオリジン条件を HTTP ステータスコード 404 に設定します。
},
Redirect: &oss.RoutingRuleRedirect{
RedirectType: oss.Ptr("Mirror"), // バックツーオリジンタイプをミラーリングに設定します。
MirrorURL: oss.Ptr("http://www.test.com/"), // ミラーリングベースのバックツーオリジンルールのバックツーオリジン URL を指定します。
MirrorHeaders: &oss.MirrorHeaders{
//PassAll: oss.Ptr(true), // すべてのヘッダーが送信されることを指定します。
Passs: []string{"myheader-key1", "myheader-key2"}, // 特定の HTTP ヘッダーを送信します。
Removes: []string{"myheader-key3", "myheader-key4"}, // 特定の HTTP ヘッダーの送信を禁止します。
Sets: []oss.MirrorHeadersSet{
{
Key: oss.Ptr("myheader-key5"), // HTTP ヘッダーの名前を指定します。
Value: oss.Ptr("myheader-value"), // HTTP ヘッダーの値を指定します。
},
},
},
},
}
// ミラーリングベースのバックツーオリジンルールを構成するリクエストを作成します。
request := &oss.PutBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
WebsiteConfiguration: &oss.WebsiteConfiguration{
IndexDocument: &oss.IndexDocument{
Suffix: oss.Ptr("index.html"), // デフォルトホームページを index.html に設定します。
SupportSubDir: oss.Ptr(true),
Type: oss.Ptr(int64(0)),
},
ErrorDocument: &oss.ErrorDocument{
Key: oss.Ptr("error.html"), // エラーページを error.html に設定します。
HttpStatus: oss.Ptr(int64(404)),
},
RoutingRules: &oss.RoutingRules{
RoutingRules: []oss.RoutingRule{
ruleOk,
},
},
},
}
// リクエストを実行します。
result, err := client.PutBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("バケット Web サイトの設定に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケット Web サイトの設定結果:%#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.GetBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName), // バケットの名前。
}
// クエリ操作を実行します。
result, err := client.GetBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("バケット Web サイトの取得に失敗しました %v", err)
}
// 結果を表示します。
log.Printf("バケット Web サイトの取得結果:%#v\n", result.WebsiteConfiguration.RoutingRules)
}
ミラーリングベースのバックツーオリジン構成を削除する
次のコードは、バケットのミラーリングベースのバックツーオリジン構成を削除する方法の例を示しています。
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.DeleteBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName),
}
// リクエストを実行し、結果を処理します。
result, err := client.DeleteBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("バケット Web サイトの削除に失敗しました %v", err)
}
// 削除の結果を表示します。
log.Printf("バケット Web サイトの削除結果:%#v\n", result)
}
参考文献
静的 Web サイトホスティングとミラーリングベースのバックツーオリジンを構成するために使用される完全なサンプルコードについては、put_bucket_website.go、get_bucket_website.go、および delete_bucket_website.go にアクセスしてください。
静的 Web サイトホスティングまたはミラーリングベースのバックツーオリジンを構成するために呼び出すことができる API 操作の詳細については、「PutBucketWebsite」をご参照ください。
静的 Web サイトホスティング構成またはミラーリングベースのバックツーオリジンルールを照会するために呼び出すことができる API 操作の詳細については、「GetBucketWebsite」をご参照ください。
静的 Web サイトホスティング構成またはミラーリングベースのバックツーオリジンルールを削除するために呼び出すことができる API 操作の詳細については、「DeleteBucketWebsite」をご参照ください。