バケットに静的 Web サイトホスティングを設定し、ミラーリングベースのオリジンフェッチのためのルーティングルールを設定できます。静的 Web サイトホスティングを有効にすると、リクエストはバケットから直接処理され、指定されたインデックスページとエラーページに自動的にリダイレクトされます。
注意事項
このトピックのコード例では、リージョン ID として
cn-hangzhouを使用しています。これは中国 (杭州) リージョンに対応します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS がサポートするリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。このトピックの例では、環境変数からアクセス認証情報を取得します。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチを設定するには、
oss:PutBucketWebsite権限が必要です。静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチの設定をクエリするには、oss:GetBucketWebsite権限が必要です。静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチの設定を削除するには、oss:DeleteBucketWebsite権限が必要です。詳細については、「RAM ユーザーへのポリシーのアタッチ」をご参照ください。
静的 Web サイトホスティング
静的 Web サイトは、Web ページや JavaScript などのクライアントサイドスクリプトといった静的コンテンツで構成されます。
設定
次のコードは、静的 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", "", "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)
// バケットの静的 Web サイトホスティングを設定するリクエストを作成します。
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)), // タイプ (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("failed to put bucket website %v", err)
}
// 結果を出力します。
log.Printf("put bucket website result:%#v\n", result)
}
クエリ
次のコードは、静的 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", "", "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)
// 静的 Web サイトホスティングの設定をクエリするリクエストを作成します。
request := &oss.GetBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName), // バケット名。
}
// リクエストを送信し、応答を処理します。
result, err := client.GetBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("failed to get bucket website %v", err)
}
// クエリ結果を出力します。
log.Printf("get bucket website result:%#v\n", result)
}
削除
次のコードは、静的 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", "", "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)
// 静的 Web サイトホスティングの設定を削除するリクエストを作成します。
request := &oss.DeleteBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName),
}
// リクエストを送信し、応答を処理します。
result, err := client.DeleteBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("failed to delete bucket website %v", err)
}
// 結果を出力します。
log.Printf("delete bucket website result:%#v\n", result)
}
ミラーリングベースのオリジンフェッチ
ミラーリングベースのオリジンフェッチは、主に OSS へのシームレスなデータ移行に使用されます。たとえば、サービスが自己管理オリジンまたは別のクラウドプロダクトで実行されている場合、サービスを中断することなく OSS に移行できます。移行中に、ミラーリングベースのオリジンフェッチのルーティングルールを使用して、まだ OSS に移行されていないデータを取得し、業務継続性を確保できます。
設定
クライアントがバケットに存在しないオブジェクトをリクエストした場合、オリジンフェッチ条件とオリジンフェッチ URL を指定して、オリジンからオブジェクトをフェッチできます。たとえば、中国 (杭州) リージョンのバケットで、クライアントがキーが myobject で始まる存在しないオブジェクトをリクエストした場合、ルーティングルールを設定してそのオブジェクトを http://www.test.com/ からフェッチできます。
次のコードは、このシナリオでミラーリングベースのオリジンフェッチのルーティングルールを設定する方法を示しています。
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)
// ルーティングルールを設定します。
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"), // リダイレクトタイプを Mirror に設定します。
MirrorURL: oss.Ptr("http://www.test.com/"), // オリジンフェッチ URL を指定します。
MirrorHeaders: &oss.MirrorHeaders{
//PassAll: oss.Ptr(true), // すべてのヘッダーを渡します。
Passes: []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("failed to put bucket website %v", err)
}
// 結果を出力します。
log.Printf("put bucket website 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.GetBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName), // バケット名。
}
// リクエストを送信し、応答を処理します。
result, err := client.GetBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("failed to get bucket website %v", err)
}
// 結果からルーティングルールを出力します。
log.Printf("get bucket website result:%#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", "", "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.DeleteBucketWebsiteRequest{
Bucket: oss.Ptr(bucketName),
}
// リクエストを送信し、応答を処理します。
result, err := client.DeleteBucketWebsite(context.TODO(), request)
if err != nil {
log.Fatalf("failed to delete bucket website %v", err)
}
// 結果を出力します。
log.Printf("delete bucket website result:%#v\n", result)
}
参考資料
静的 Web サイトホスティングとミラーリングベースのオリジンフェッチの完全なサンプルコードについては、「put_bucket_website.go」、「get_bucket_website.go」、および「delete_bucket_website.go」をご参照ください。
静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチを設定するための API リファレンスについては、「PutBucketWebsite」をご参照ください。
これらの設定をクエリするための API リファレンスについては、「GetBucketWebsite」をご参照ください。
これらの設定を削除するための API リファレンスについては、「DeleteBucketWebsite」をご参照ください。