バケットの静的Webサイトホスティングを有効にし、ミラーリングベースのback-to-originルールを設定できます。 バケットで静的Webサイトをホストした後、バケットにアクセスしてWebサイトにアクセスできます。 指定したインデックスページまたはエラーページに自動的にリダイレクトされます。 ミラーリングベースのback-to-originルールを設定して有効にすると、ミラーリングベースのback-to-originを使用して、データをObject Storage Service (OSS) にシームレスに移行できます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョン、エンドポイント、オープンポート」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
静的Webサイトホスティングまたはミラーリングベースのback-To-originを構成するには、
oss:PutBucketWebsite
権限が必要です。 静的Webサイトホスティング構成またはミラーリングベースのback-To-originルールを照会するには、oss:GetBucketWebsite
権限が必要です。 静的Webサイトホスティング設定またはミラーリングベースのback-To-originルールを削除するには、oss:DeleteBucketWebsite
権限が必要です。 詳細については、「RAMポリシーの一般的な例」をご参照ください。
静的 Web サイトホスティング
静的webサイトは、クライアントで実行できるJavaScriptコードなどのスクリプトを含む、すべてのwebページが静的コンテンツのみで構成されるwebサイトです。 静的Webサイトホスティング機能を使用して、静的WebサイトをOSSバケットでホストし、バケットのドメイン名を使用してWebサイトにアクセスできます。
静的 Web サイトホスティングの設定
次のサンプルコードは、静的Webサイトホスティングを構成する方法の例を示しています。
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" // Set the default homepage to index.html and the default 404 page to error.html for the static website. 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() { // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" // Query static website hosting configurations. 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() { // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" // Delete static website hosting configurations. err = client.DeleteBucketWebsite(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
ミラーリングベースのback-to-origin
ミラーリングベースのback-to-originを使用すると、データをOSSにシームレスに移行できます。 たとえば、サービスを中断することなく、自己管理オリジンまたは別のクラウドサービスからOSSにサービスを移行できます。 移行中にミラーリングベースのback-to-originルールを使用して、OSSに移行されていないデータを取得できます。 これにより、ビジネスの継続性が確保されます。
ミラーリングベースのback-to-originルールの設定
リクエスタが指定されたバケット内のオブジェクトにアクセスしようとしても、そのオブジェクトが存在しない場合は、オリジンおよびback-to-origin条件でオブジェクトのURLを指定して、リクエスタがオリジンからオブジェクトを取得できるようにすることができます。 たとえば、examplebucketという名前のバケットは、中国 (杭州) リージョンにあります。 リクエスタがバケットのルートディレクトリのexamplefolderディレクトリ内のオブジェクトにアクセスしようとしても、そのオブジェクトが存在しない場合、リクエスタは、オリジンのexamplefolderディレクトリに格納されているオブジェクトにアクセスするwww.example.comにリダイレクトされます。
次のサンプルコードは、前述のシナリオのミラーリングベースのback-to-originルールを設定する方法の例を示しています。
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" var indexWebsite = "myindex.html" var errorWebsite = "myerror.html" btrue := true bfalse := false // Set the back-to-origin type to mirroring-based back-to-origin. ruleOk := oss.RoutingRule{ RuleNumber: 1, Condition: oss.Condition{ KeyPrefixEquals: "", // Set the back-to-origin condition to HTTP status code 404. HTTPErrorCodeReturnedEquals: 404, }, Redirect: oss.Redirect{ RedirectType: "Mirror", // PassQueryString: &btrue, // Specify the back-to-origin URL for a mirroring-based back-to-origin rule. MirrorURL: "http://www.test.com/", // MirrorPassQueryString:&btrue, // MirrorFollowRedirect:&bfalse, // MirrorCheckMd5:&bfalse, MirrorHeaders: oss.MirrorHeaders{ // PassAll:&bfalse, // Transmit specific HTTP headers. Pass: []string{"myheader-key1", "myheader-key2"}, // Prohibit the transmission of specific HTTP headers. Remove: []string{"myheader-key3", "myheader-key4"}, Set: []oss.MirrorHeaderSet{ { Key: "myheader-key5", Value: "myheader-value5", }, }, }, }, } // Set the back-to-origin type to redirection-based back-to-origin. ruleArrOk := []oss.RoutingRule{ { RuleNumber: 2, Condition: oss.Condition{ // Set the back-to-origin condition to HTTP status code 404 and the prefix in object names to 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, }, }, // Set the back-to-origin type to mirroring-based back-to-origin. { 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) } }
ミラーリングベースのback-to-origin設定のクエリ
次のサンプルコードでは、ミラーリングベースのback-to-origin設定を照会する方法の例を示します。
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" // Query mirroring-based back-to-origin configurations. data,err := client.GetBucketWebsiteXml(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } fmt.Println(data) }
ミラーリングベースのback-to-origin設定の削除
次のサンプルコードは、ミラーリングベースのback-to-origin設定を削除する方法の例を示しています。
package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Create an OSSClient instance. // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region. clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // Specify the version of the signature algorithm. clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } // Specify the name of the bucket. Example: examplebucket. bucketName := "examplebucket" // Delete mirroring-based back-to-origin configurations. err = client.DeleteBucketWebsite(bucketName) if err != nil { fmt.Println("Error:", err) os.Exit(-1) } }
関連ドキュメント
静的Webサイトホスティングとミラーリングベースのback-to-originを管理するために使用される完全なサンプルコードについては、GitHubをご覧ください。
静的Webサイトホスティングまたはミラーリングベースのback-to-originを構成するために呼び出すことができるAPI操作の詳細については、「PutBucketWebsite」をご参照ください。
静的Webサイトホスティング構成またはミラーリングベースのback-to-originルールを照会するために呼び出すことができるAPI操作の詳細については、「GetBucketWebsite」をご参照ください。
静的Webサイトホスティング設定またはミラーリングベースのback-to-originルールを削除するために呼び出すことができるAPI操作の詳細については、「DeleteBucketWebsite」をご参照ください。