バケットに静的 Web サイトホスティングを設定し、ミラーリングベースのオリジンフェッチのためのリダイレクトルール (RoutingRule) を設定できます。静的 Web サイトホスティングを有効にすると、Web サイトへのリクエストはバケットへのリクエストと同等になります。指定したインデックスページとエラーページへの自動リダイレクトも設定できます。ミラーリングベースのオリジンフェッチのリダイレクトルールは、Object Storage Service (OSS) へのシームレスなデータ移行に役立ちます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
このトピックでは、OSSClient インスタンスは OSS エンドポイントを使用して作成されます。カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する場合は、「クライアントの設定 (Go SDK V1)」をご参照ください。
静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチを設定するには、
oss:PutBucketWebsite権限が必要です。静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチの構成を取得するには、oss:GetBucketWebsite権限が必要です。静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチの構成を削除するには、oss:DeleteBucketWebsite権限が必要です。詳細については、「RAM ユーザーへのカスタムアクセスポリシーの付与」をご参照ください。
静的 Web サイトホスティング
静的 Web サイトは、JavaScript などのクライアントサイドスクリプトを含む静的コンテンツを持つ Web ページで構成されます。静的 Web サイトホスティング機能を使用して、静的 Web サイトをバケットでホストし、バケットのエンドポイントを使用して Web サイトにアクセスできます。
静的 Web サイトホスティングの設定
次のコードは、静的 Web サイトホスティングを設定する方法を示しています。
package main import ( "fmt" "os" "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 { fmt.Println("Error:", err) os.Exit(-1) } // OSSClient インスタンスを作成します。 // yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。 // yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、必要に応じてリージョンを設定します。 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 { fmt.Println("Error:", err) os.Exit(-1) } // バケット名を指定します。例:examplebucket。 bucketName := "examplebucket" // 静的 Web サイトホスティングを設定して、index.html をデフォルトのホームページとして、error.html をデフォルトの 404 ページとして使用します。 err = client.SetBucketWebsite(bucketName, "index.html", "error.html") if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }静的 Web サイトホスティング構成の表示
次のコードは、静的 Web サイトホスティング構成を表示する方法を示しています。
package main import ( "fmt" "os" "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 { fmt.Println("Error:", err) os.Exit(-1) } // OSSClient インスタンスを作成します。 // yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。 // yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、必要に応じてリージョンを設定します。 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 { fmt.Println("Error:", err) os.Exit(-1) } // バケット名を指定します。例:examplebucket。 bucketName := "examplebucket" // 静的 Web サイトホスティング構成を表示します。 wsRes, err := client.GetBucketWebsite(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } fmt.Println("indexWebsite: ", wsRes.IndexDocument.Suffix) fmt.Println("errorWebsite: ", wsRes.ErrorDocument.Key) }静的 Web サイトホスティング構成の削除
次のコードは、静的 Web サイトホスティング構成を削除する方法を示しています。
package main import ( "fmt" "os" "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 { fmt.Println("Error:", err) os.Exit(-1) } // OSSClient インスタンスを作成します。 // yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。 // yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、必要に応じてリージョンを設定します。 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 { fmt.Println("Error:", err) os.Exit(-1) } // バケット名を指定します。例:examplebucket。 bucketName := "examplebucket" // 静的 Web サイトホスティング構成を削除します。 err = client.DeleteBucketWebsite(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
ミラーリングベースのオリジンフェッチ
ミラーリングベースのオリジンフェッチは、主に OSS へのシームレスなデータ移行に使用されます。たとえば、ご利用のサービスが独自のオリジンサーバーまたは別のクラウドプロダクトで実行されている場合があります。ビジネスの発展のためにサービスを OSS に移行する場合、移行中にサービスが継続して実行されるようにする必要があります。移行中に、ミラーリングベースのオリジンフェッチルールを使用して、まだ OSS に移行されていないデータを取得できます。これにより、サービスが期待どおりに実行されることが保証されます。
ミラーリングベースのオリジンフェッチの設定
たとえば、リクエスターが宛先バケットに存在しないオブジェクトにアクセスしようとした場合、back-to-origin 条件とソース URL を指定して、オリジンからオブジェクトをフェッチできます。中国 (杭州) リージョンに examplebucket という名前のバケットがあるとします。リクエスターがバケットのルートディレクトリにある `examplefolder/` ディレクトリ内の存在しないファイルにアクセスしようとした場合、OSS を設定して www.example.com サイトの `examplefolder/` ディレクトリからファイルをフェッチできます。
次のコードは、上記のシナリオでミラーリングベースのオリジンフェッチルールを設定する方法を示しています。
package main import ( "fmt" "os" "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 { fmt.Println("Error:", err) os.Exit(-1) } // OSSClient インスタンスを作成します。 // yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。 // yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、必要に応じてリージョンを設定します。 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 { fmt.Println("Error:", err) os.Exit(-1) } // バケット名を指定します。例:examplebucket。 bucketName := "examplebucket" var indexWebsite = "myindex.html" var errorWebsite = "myerror.html" btrue := true bfalse := false // back-to-origin タイプを Mirror に設定します。 ruleOk := oss.RoutingRule{ RuleNumber: 1, Condition: oss.Condition{ KeyPrefixEquals: "", // back-to-origin 条件を HTTP ステータスコード 404 に設定します。 HTTPErrorCodeReturnedEquals: 404, }, Redirect: oss.Redirect{ RedirectType: "Mirror", // PassQueryString: &btrue, // ソース URL を指定します。 MirrorURL: "http://www.test.com/", // MirrorPassQueryString:&btrue, // MirrorFollowRedirect:&bfalse, // MirrorCheckMd5:&bfalse, MirrorHeaders: oss.MirrorHeaders{ // PassAll:&bfalse, // 指定された HTTP ヘッダーパラメーターの通過を許可します。 Pass: []string{"myheader-key1", "myheader-key2"}, // 指定された HTTP ヘッダーパラメーターの通過を禁止します。 Remove: []string{"myheader-key3", "myheader-key4"}, Set: []oss.MirrorHeaderSet{ { Key: "myheader-key5", Value: "myheader-value5", }, }, }, }, } // back-to-origin タイプを Redirection に設定します。 ruleArrOk := []oss.RoutingRule{ { RuleNumber: 2, Condition: oss.Condition{ // back-to-origin 条件を HTTP ステータスコード 404 とオブジェクトプレフィックス abc/ に設定します。 KeyPrefixEquals: "abc/", HTTPErrorCodeReturnedEquals: 404, IncludeHeader: []oss.IncludeHeader{ { Key: "host", Equals: "test.oss-cn-beijing-internal.aliyuncs.com", }, }, }, Redirect: oss.Redirect{ RedirectType: "AliCDN", Protocol: "http", HostName: "www.test.com", PassQueryString: &bfalse, ReplaceKeyWith: "prefix/${key}.suffix", HttpRedirectCode: 301, }, }, // back-to-origin タイプを Mirror に設定します。 { RuleNumber: 3, Condition: oss.Condition{ KeyPrefixEquals: "", HTTPErrorCodeReturnedEquals: 404, }, Redirect: oss.Redirect{ RedirectType: "Mirror", PassQueryString: &btrue, MirrorURL: "http://www.test.com/", MirrorPassQueryString: &btrue, MirrorFollowRedirect: &bfalse, MirrorCheckMd5: &bfalse, MirrorHeaders: oss.MirrorHeaders{ PassAll: &btrue, Pass: []string{"myheader-key1", "myheader-key2"}, Remove: []string{"myheader-key3", "myheader-key4"}, Set: []oss.MirrorHeaderSet{ { Key: "myheader-key5", Value: "myheader-value5", }, }, }, }, }, } wxmlOne := oss.WebsiteXML{ IndexDocument: oss.IndexDocument{ Suffix: indexWebsite, }, ErrorDocument: oss.ErrorDocument{ Key: errorWebsite, }, } wxmlOne.RoutingRules = append(wxmlOne.RoutingRules, ruleOk) wxmlOne.RoutingRules = append(wxmlOne.RoutingRules, ruleArrOk...) err = client.SetBucketWebsiteDetail(bucketName, wxmlOne) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }ミラーリングベースのオリジンフェッチ構成の取得
次のコードは、ミラーリングベースのオリジンフェッチ構成を取得する方法を示しています。
package main import ( "fmt" "os" "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 { fmt.Println("Error:", err) os.Exit(-1) } // OSSClient インスタンスを作成します。 // yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。 // yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、必要に応じてリージョンを設定します。 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 { fmt.Println("Error:", err) os.Exit(-1) } // バケット名を指定します。例:examplebucket。 bucketName := "examplebucket" // ミラーリングベースのオリジンフェッチ構成を取得します。 data, err := client.GetBucketWebsiteXml(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } fmt.Println(data) }ミラーリングベースのオリジンフェッチ構成の削除
次のコードは、ミラーリングベースのオリジンフェッチ構成を削除する方法を示しています。
package main import ( "fmt" "os" "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 { fmt.Println("Error:", err) os.Exit(-1) } // OSSClient インスタンスを作成します。 // yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、必要に応じてエンドポイントを設定します。 // yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。他のリージョンについては、必要に応じてリージョンを設定します。 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 { fmt.Println("Error:", err) os.Exit(-1) } // バケット名を指定します。例:examplebucket。 bucketName := "examplebucket" // ミラーリングベースのオリジンフェッチ構成を削除します。 err = client.DeleteBucketWebsite(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
関連ドキュメント
静的 Web サイトホスティングとミラーリングベースのオリジンフェッチの完全なサンプルコードについては、「GitHub サンプル」をご参照ください。
静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチを設定するために使用される API 操作の詳細については、「PutBucketWebsite」をご参照ください。
静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチの構成を取得するために使用される API 操作の詳細については、「GetBucketWebsite」をご参照ください。
静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチの構成を削除するために使用される API 操作の詳細については、「DeleteBucketWebsite」をご参照ください。