バケットに静的 Web サイトホスティングを設定し、ミラーリングベースのオリジンフェッチのためのリダイレクトルール (RoutingRule) を設定できます。静的 Web サイトホスティングを有効にすると、Web サイトへのリクエストはバケットへのリクエストと同等になります。また、指定したインデックスページやエラーページへの自動リダイレクトも設定できます。ミラーリングベースのオリジンフェッチのリダイレクトルールは、Object Storage Service (OSS) へのシームレスなデータ移行に役立ちます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用したアクセス認証情報の設定」をご参照ください。
このトピックでは、OSSClient インスタンスは OSS エンドポイントを使用して作成されます。カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチを設定するには、
oss:PutBucketWebsite権限が必要です。静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチの設定を取得するには、oss:GetBucketWebsite権限が必要です。静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチの設定を削除するには、oss:DeleteBucketWebsite権限が必要です。詳細については、「RAM ユーザーへのカスタムアクセスポリシーの付与」をご参照ください。
静的 Web サイトホスティング
静的 Web サイトホスティングの設定
次のサンプルコードは、静的 Web サイトホスティングを設定する方法の例を示しています。
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou。このパラメーターは、V4 署名アルゴリズムを使用する場合に必要です。 region = "cn-hangzhou" # examplebucket をバケット名に置き換えます。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 静的 Web サイトホスティングを有効にし、デフォルトのホームページを index.html に、デフォルトの 404 ページを error.html に設定します。 bucket.put_bucket_website(BucketWebsite('index.html', 'error.html'))静的 Web サイトホスティング設定のクエリ
次のサンプルコードは、静的 Web サイトホスティング設定をクエリする方法の例を示しています。
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou。このパラメーターは、V4 署名アルゴリズムを使用する場合に必要です。 region = "cn-hangzhou" # examplebucket をバケット名に置き換えます。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) try: # バケットで静的 Web サイトホスティングが有効になっていない場合、get_bucket_website を使用すると NoSuchWebsite 例外がスローされます。 website = bucket.get_bucket_website() print('Index file is {0}, error file is {1}'.format(website.index_file, website.error_file)) except oss2.exceptions.NoSuchWebsite as e: print('Website is not configured, request_id={0}'.format(e.request_id))静的 Web サイトホスティング設定の削除
次のサンプルコードは、静的 Web サイトホスティング設定を削除する方法の例を示しています。
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou。このパラメーターは、V4 署名アルゴリズムを使用する場合に必要です。 region = "cn-hangzhou" # examplebucket をバケット名に置き換えます。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 静的 Web サイトホスティング設定を削除します。 bucket.delete_bucket_website()
ミラーリングベースのオリジンフェッチ
ミラーリングベースのオリジンフェッチは、主に OSS へのシームレスなデータ移行に使用されます。たとえば、サービスが独自のオリジンサーバーまたは別のクラウドプロダクトで実行されているとします。ビジネスの発展のためにサービスを OSS に移行する場合、移行中もサービスが継続して実行されるようにする必要があります。移行中に、ミラーリングベースのオリジンフェッチルールを使用して、まだ OSS に移行されていないデータを取得できます。これにより、サービスが期待どおりに実行されることが保証されます。
ミラーリングベースのオリジンフェッチルールの設定
たとえば、リクエスタが宛先バケットに存在しないファイルにアクセスした場合、オリジンフェッチ条件とソース URL を指定して、オリジンサーバーからオブジェクトファイルを取得できます。たとえば、中国 (杭州) リージョンに examplebucket という名前のバケットがあるとします。リクエスタがバケットのルートディレクトリにある examplefolder ディレクトリに存在しないファイルにアクセスしようとした場合、リクエスタが https://www.example.com/ サイトの examplefolder ディレクトリからオブジェクトファイルを取得できるようにします。
次のサンプルコードは、上記のシナリオでミラーリングベースのオリジンフェッチルールを設定する方法の例を示しています。
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite, MirrorHeadersSet, RedirectMirrorHeaders, Redirect, RoutingRule, \ REDIRECT_TYPE_MIRROR, Condition from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou。このパラメーターは、V4 署名アルゴリズムを使用する場合に必要です。 region = "cn-hangzhou" # examplebucket をバケット名に置き換えます。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 静的 Web サイトホスティングを有効にし、デフォルトのホームページを index.html に、デフォルトの 404 ページを error.html に設定します。 index_file = 'index.html' error_file = 'error.html' # 一致する条件を指定します。 condition1 = Condition(key_prefix_equals='examplefolder', http_err_code_return_equals=404) # リクエストされたオブジェクトがオリジンから取得されたときにレスポンスに含めるヘッダーを指定します。 mirror_headers_set_1 = MirrorHeadersSet("myheader-key5", "myheader-value5") mirror_headers_set_2 = MirrorHeadersSet("myheader-key6", "myheader-value6") set_list = [mirror_headers_set_1, mirror_headers_set_2] pass_list = ['myheader-key1', 'myheader-key2'] remove_list = ['myheader-key3', 'myheader-key4'] mirror_header = RedirectMirrorHeaders(pass_all=True, pass_list=pass_list, remove_list=remove_list, set_list=set_list) # ルールが一致した場合に実行する操作を指定します。 redirect1 = Redirect(redirect_type=REDIRECT_TYPE_MIRROR, mirror_url='https://www.example.com/', mirror_pass_query_string=True, mirror_follow_redirect=True, mirror_check_md5=True, mirror_headers=mirror_header) rule1 = RoutingRule(rule_num=1, condition=condition1, redirect=redirect1) website_set = BucketWebsite(index_file, error_file, [rule1]) # ミラーリングベースのオリジンフェッチルールを設定します。 bucket.put_bucket_website(website_set)ミラーリングベースのオリジンフェッチ設定のクエリ
次のサンプルコードは、ミラーリングベースのオリジンフェッチ設定をクエリする方法の例を示しています。
#-*-coding:utf-8-*- import oss2 from oss2.models import BucketWebsite, MirrorHeadersSet, RedirectMirrorHeaders, Redirect, RoutingRule, \ REDIRECT_TYPE_MIRROR, Condition from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou。このパラメーターは、V4 署名アルゴリズムを使用する場合に必要です。 region = "cn-hangzhou" # examplebucket をバケット名に置き換えます。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) try: # バケットで静的 Web サイトホスティングが有効になっていない場合、get_bucket_website を使用すると NoSuchWebsite 例外がスローされます。 website_get = bucket.get_bucket_website() # デフォルトのホームページをクエリします。 print(website_get.index_file) # デフォルトの 404 ページをクエリします。 print(website_get.error_file) for rule in website_get.rules: print(rule.rule_num) # ルールマッチングに使用されるプレフィックスをクエリします。 print(rule.condition.key_prefix_equals) # HTTP ステータスコードをクエリします。 print(rule.condition.http_err_code_return_equals) # リダイレクトタイプをクエリします。 print(rule.redirect.redirect_type) # ミラーリングベースのオリジンフェッチのソース URL をクエリします。 print(rule.redirect.mirror_url) # リクエスト内のパラメーターをクエリします。 print(rule.redirect.pass_query_string) # リクエストがリダイレクトされるときにオブジェクト名を置き換えるために使用される文字列を指定します。このパラメーターの値は変数にすることができます。 # print(rule.redirect.replace_key_with) # リクエストがリダイレクトされるときにオブジェクト名のプレフィックスを置き換えるために使用される文字列を指定します。オブジェクト名のプレフィックスが空の場合、文字列はオブジェクト名の前に付きます。 # print(rule.redirect.replace_key_prefix_with) # リダイレクトに使用されるプロトコルをクエリします。 # print(rule.redirect.proto) # リクエストがリダイレクトされるドメイン名をクエリします。 # print(rule.redirect.host_name) # 応答の HTTP ステータスコードをクエリします。 # print(rule.redirect.http_redirect_code) except oss2.exceptions.NoSuchWebsite as e: print('Website is not configured, request_id={0}'.format(e.request_id))ミラーリングベースのオリジンフェッチ設定の削除
次のサンプルコードは、ミラーリングベースのオリジンフェッチ設定を削除する方法の例を示しています。
#-*-coding:utf-8-*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou。このパラメーターは、V4 署名アルゴリズムを使用する場合に必要です。 region = "cn-hangzhou" # examplebucket をバケット名に置き換えます。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # ミラーリングベースのオリジンフェッチ設定を削除します。 bucket.delete_bucket_website()
関連ドキュメント
静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチを設定するために呼び出すことができる API 操作の詳細については、「PutBucketWebsite」をご参照ください。
静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチ設定をクエリするために呼び出すことができる API 操作の詳細については、「GetBucketWebsite」をご参照ください。
静的 Web サイトホスティングまたはミラーリングベースのオリジンフェッチ設定を削除するために呼び出すことができる API 操作の詳細については、「DeleteBucketWebsite」をご参照ください。