すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:ミラーリングベースのback-to-origin

最終更新日:Feb 29, 2024

サーバーからすべての既存のデータをObject Storage Service (OSS) バケットに移行した後、ミラーリングベースのback-to-originルールを設定して、サーバーで使用可能であるがバケットに移行されていないデータにリクエスタがアクセスできるようにします。 リクエスタがバケットに存在しないリソースを要求すると、OSSは、ミラーリングベースのback-to-originルールで指定されたオリジンサーバーからリソースを取得しようとします。 リクエストされたリソースがオリジンサーバーから取得された場合、OSSはリソースをバケットに保存し、リクエスト元にリソースを返します。

制限事項

  • リージョン

    次のリージョン: 中国 (杭州) 、中国 (上海) 、中国 (青島) 、中国 (北京) 、中国 (張家口) 、中国 (フフホト) 、中国 (ウランカブ) 、中国 (深セン) 、中国 (河源) 、中国 (広州) 、中国 (成都) 、中国 (香港) 、米国 (シリコンバレー) 、米国 (バージニア) 、日本 (東京) 、シンガポール、オーストラリア (シドニー) 、マレーシア (クアラルンプール) 、インドネシア (ジャカルタ) 、フィリピン (マニラ) 、インド (ムンバイ) 、ドイツ (フランクフルト) 、英国 (ロンドン) 、アラブ首長国連邦 (ドバイ)

  • back-to-originルールの数

    1つのバケットに最大20個のback-to-originルールを設定できます。 ルールは、RuleNumberの値に基づいてリクエストと順次照合されます。 back-to-originルールが一致した場合、後続のルールは無視されます。 OSSは、リクエストがルールで指定された条件を満たすかどうかに基づいて、リクエストがback-to-originルールに一致するかどうかを判断します。 OSSは、要求されたオブジェクトがオリジンから取得できるかどうかをチェックしません。

  • QPSとトラフィックの制限

    中国本土のリージョンでは、ミラーリングベースのback-to-originリクエストのデフォルトの最大クエリ /秒 (QPS) とAlibaba Cloudアカウントのデフォルトの最大帯域幅は2,000および2 Gbit/sです。 中国本土以外のリージョンでは、ミラーリングベースのback-to-originリクエストのデフォルトの最大QPSとAlibaba Cloudアカウントのデフォルトの最大帯域幅は1,000と1 Gbit/sです。

    ビジネスでより高いQPSまたは帯域幅が必要な場合は、テクニカルサポート

  • オリジンURL

    オリジンURLを内部ネットワーク上のURLにすることはできません。

  • デフォルトのタイムアウト期間

    デフォルトでは、ミラーリングベースのback-to-originリクエストのタイムアウト時間は10秒です。

シナリオ

ミラーリングベースのback-to-originを使用して、データをOSSにシームレスに移行します。 たとえば、ミラーリングベースのback-to-originを使用して、業務を中断することなく、自己管理オリジンまたは別のクラウドサービスからOSSにサービスを移行できます。 移行中に、ミラーリングベースのback-to-originを使用して、OSSに移行されていないデータを取得できます。 これにより、ビジネスの継続性が確保されます。 ユースケースの詳細については、「webベースのサービスプロバイダーのデータをOSSにシームレスに移行する」をご参照ください。

説明

ミラーリングベースのback-to-originに追加料金は発生しません。 ただし、ミラーリングベースのback-to-originリクエスト自体には、API操作呼び出しのリクエスト料金が発生します。 ミラーリングベースのback-to-originリクエストは、他のリクエストと同じ方法で課金されます。 詳細については、「API操作呼び出し料金」をご参照ください。

処理中

次の図は、ミラーリングベースのback-to-originの動作を示しています。

image

Back-to-Origin ルール

  • トリガー条件

    OSSは、GetObject操作でオブジェクトが返された場合にのみ、ミラーリングベースのback-to-originルールに基づいてオリジンから404を取得します。

  • ルールの命名

    OSSがオリジンからオブジェクトを取得するために使用するURLは、http(s):// MirrorURL/ObjectNameの形式です。 ObjectNameは、要求されたオブジェクトの名前を指定します。 たとえば、バケットに設定されたback-to-origin URLがhttps://aliyun.comで、リクエストされたexample.jpgという名前のオブジェクトがバケットに存在しない場合、OSSはhttps://aliyun.com/example.jpgからオブジェクトを取得し、そのオブジェクトをexample.jpgとしてOSSに保存します。

  • back-to-originリクエストの失敗

    要求されたオブジェクトがオリジンで見つからない場合、オリジンはHTTP 404ステータスコードをOSSに返します。 次に、OSSは同じHTTPステータスコードを要求者に返します。 オリジンが200と404以外のHTTPステータスコードを返した場合、ネットワークエラーなどの要因によりback-to-originリクエストは失敗します。 この場合、OSSは424 MirrorFailedを要求元に返します。

  • オリジンから取得したオブジェクトの更新

    OSSがミラーリングベースのback-to-originを使用してオブジェクトを取得した後、オリジンのオブジェクトが変更されても、取得したオブジェクトは更新されません。

  • オリジンから取得したオブジェクトのメタデータ

    OSSは、オリジンサーバーから返された次のHTTPヘッダーをOSSオブジェクトのメタデータとして保存します。

    コンテンツタイプ
    コンテンツエンコード
    コンテンツ処理
    キャッシュ制御
    期限切れ
    コンテンツ言語
    アクセス制御-許可-オリジン 
  • HTTPリクエスト

    • OSSに送信されるリクエストに含まれるヘッダーは、OSSからオリジンに送信されるリクエストには含まれません。 OSSは、設定されたback-to-originルールに基づいて、QueryString情報をオリジンに送信するかどうかを決定します。

    • オリジンがチャンクエンコードされたデータを返した場合、OSSはチャンクエンコードされたデータを返します。

手順

OSSコンソールの使用

OSSコンソールでバケットに複数のback-to-originルールを設定する場合、ルールはデフォルトでルール作成の時系列順に適用されます。 ルールの右側にある [上] または [下] をクリックすると、ルールの優先順位を変更できます。

3

リクエスタがバケットに存在しないオブジェクトを要求すると、OSSは、設定されたオリジンURLとback-to-origin条件に基づいて、オリジンサーバーからオブジェクトを取得しようとします。 たとえば、中国 (杭州) リージョンのexamplebucketバケットのルートディレクトリにexamplefolderサブディレクトリがあるとします。 要求されたオブジェクトがexamplefolderサブディレクトリに存在しない場合、OSSはhttps://www.example.com/examplefolderディレクトリを検索し、要求されたオブジェクトをリクエスタに返します。 この目標を達成するには、次の手順を実行してback-To-originルールを設定します。

  1. OSSコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、[データ管理] > [ミラーリングベースのBack-to-origin] を選択します。

  4. [ミラーリングベースのBack-to-origin] ページで、[ルールの作成] をクリックします。

  5. [ルールの作成] パネルで、次の表に示す必要なパラメーターを設定し、他のパラメーターのデフォルト設定を保持します。

    パラメーター

    説明

    メソッド

    [ミラーリング] を選択します。

    条件

    [オブジェクト名プレフィックス] を選択し、値をexamplefolder/ に設定します。

    説明

    バケットにミラーリングベースのback-to-originルールを1つだけ設定する場合は、Object Name PrefixパラメーターとFile Name Suffixパラメーターを空のままにすることができます。 バケットに複数のミラーリングベースのback-to-originルールを設定する場合は、back-to-originルールを区別するために、異なる名前のプレフィックスまたはサフィックスを設定する必要があります。

    オリジンURL

    最初のボックスでhttpsを選択し、2番目のボックスにwww.example.comを入力し、3番目のボックスを空のままにします。

  6. [OK] をクリックします。

    次の内容は、前のback-to-originルールが設定された後のアクセスプロセスを示しています。

    1. リクエスタは、初めてhttps://examplebucket.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txtを要求する。

    2. examplefolder/example.txtオブジェクトがexamplebucketに存在しない場合、OSSはhttps://www.example.com/examplefolder/example.txt時にオリジンサーバーにオブジェクトを要求します。

    3. オブジェクトがオリジンサーバーから取得された場合、OSSはexample.txtオブジェクトをexamplebucketのexamplefolderディレクトリに書き込み、リクエスト元に返します。 オブジェクトがオリジンサーバーから取得されない場合、HTTP 404ステータスコードがリクエスタに返されます。

上記の手順を使用して、基本的なビジネスシナリオのミラーリングベースのback-to-originを設定できます。 特定のシナリオでのミラーリングベースのバックオリジンの例の詳細については、「ミラーリングベースのバックツーオリジンの構成例」をご参照ください。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用して、ミラーリングベースのback-to-originルールを設定する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してミラーリングベースのback-to-originルールを設定する方法の詳細については、「概要」をご参照ください。

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.RoutingRuleをインポートします。com.aliyun.oss.mo del.SetBucketWebsiteRequestをインポートします。java.util.ArrayListをインポートします。java.util.HashMapをインポートします。java.util.Listをインポートします。java.util.Mapをインポートします。public classデモ {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            SetBucketWebsiteRequestリクエスト=新しいSetBucketWebsiteRequest(bucketName);
            // デフォルトのホームページが指定され、要求されたオブジェクトの名前がスラッシュ (/) で終わらず、オブジェクトが存在しない場合に実行する操作を指定します。 
            // request.setSubDirType(null);
            // サブディレクトリにアクセスしたときに、リクエスト元をサブディレクトリのデフォルトのホームページにリダイレクトするかどうかを指定します。 
            // request.setSupportSubDir(false);

            List<RoutingRule> routingRules = new ArrayList<RoutingRule>();

            RoutingRule rule = new RoutingRule();
            rule.setNumber(1);
            // オブジェクト名に含まれるプレフィックスを指定します。 指定されたプレフィックスを含む名前のオブジェクトのみがルールに一致します。 
            rule.getCondition().setKeyPrefixEquals("examplebucket");
            // HTTPステータスコードを指定します。 指定されたオブジェクトがアクセスされ、HTTPステータスコード404が返された場合にのみ、ルールが一致します。 
            rule.getCondition().setHttpErrorCodeReturnedEquals(404);
            // リダイレクションタイプを指定します。 
            rule.getRedirect().setRedirectType(RoutingRule.RedirectType.Mirror);
            // ミラーリングベースのback-to-originルールのオリジンのURLを指定します。 例: https://www.example.com/. 
            rule.getRedirect().setMirrorURL("<yourMirrorURL>");
            // rule.getRedirect().setMirrorRole("AliyunOSSMirrorDefaultRole");
            // リダイレクションルールまたはミラーリングベースのback-to-originルールの実行時にリクエストパラメーターを含めるかどうかを指定します。 
            rule.getRedirect().setPassQueryString(true);
            // このパラメーターは、PassQueryStringパラメーターと同じ方法で使用され、PassQueryStringパラメーターよりも高い優先度レベルが割り当てられます。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 
            rule.getRedirect().setMirrorPassQueryString(true);
            // リクエストがリダイレクトされたときのレスポンスでHTTPステータスコードを指定します。 このパラメーターは、RedirectTypeパラメーターをExternalまたはAliCDNに設定した場合にのみ有効になります。 
            // rule.getRedirect().setHttpRedirectCode(302);
            // リダイレクトに使用するドメイン名を指定します。 ドメイン名は、ドメイン名の命名規則に準拠している必要があります。 
            // rule.getRedirect().setHostName("oss.aliyuncs.com");
            // リダイレクトに使用するプロトコルを指定します。 このパラメーターは、RedirectTypeパラメーターをExternalまたはAliCDNに設定した場合にのみ有効になります。 
            // rule.getRedirect().setProtocol(RoutingRule.Protocol.Https);
            // リクエストがリダイレクトされたときにオブジェクト名を置き換えるために使用する文字列を指定します。 このパラメーターを変数に設定できます。 
            // rule.getRedirect().setReplaceKeyWith("${key }.jpg");
            // このパラメーターをtrueに設定すると、オブジェクト名のプレフィックスはReplaceKeyPrefixWithパラメーターで指定された値に置き換えられます。 
            rule.getRedirect().setEnableReplacePrefix(true);
            // リダイレクト時にオブジェクト名のプレフィックスを置き換えるために使用する文字列を指定します。 
            rule.getRedirect().setReplaceKeyPrefixWith("examplebucket");
            // オリジンから返されるレスポンス本文のMD5ハッシュをチェックするかどうかを指定します。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 
            rule.getRedirect().setMirrorCheckMd5(true);

            RoutingRule.MirrorHeaders mirrorHeaders = new RoutingRule.MirrorHeaders();
            // 次のヘッダーを除くすべてのリクエストヘッダーをオリジンに渡すかどうかを指定します。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 
            mirrorHeaders.setPassAll(false);
            リストパス=new ArrayList<String>();
            passes.add("cache-control");
            // オリジンに渡すヘッダーを指定します。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 
            mirrorHeaders.setPass (パス);
            リスト削除=new ArrayList<String>();
            removes.add("content-type");
            // オリジンに渡さないヘッダーを指定します。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 
            mirrorHeaders.setRemove (削除);
            リストセット=new ArrayList<Map<String, String>>();
            Map header1 = new HashMap<String, String>();
            header1.put("キー" 、"key1");
            header1.put("Value" 、"value1");
            Map header2 = new HashMap<String, String>();
            header2.put("キー" 、"key2");
            header2.put("Value" 、"value2");
            sets.add(header1);
            sets.add(header2);
            // オリジンに渡すヘッダーを指定します。 指定されたヘッダーは、ヘッダーがリクエストに含まれているかどうかに関係なく、オリジンに渡されます。 
            mirrorHeaders.setSet (セット);
            // リクエストされたオブジェクトがオリジンから取得されたときに、レスポンスに含めるヘッダーを指定します。 このパラメーターは、RedirectTypeパラメーターをMirrorに設定した場合にのみ有効になります。 
            rule.getRedirect().setMirrorHeaders(mirrorHeaders);

            routingRules.add (ルール);
            request.setRoutingRules(routingRules);
            ossClient.setBucketWebsite(request);
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 
#-*-コーディング: utf-8-*-
oss2のインポート
oss2.modelsからBucketWebsite、MirrorHeadersSet、RedirectMirrorHeaders、リダイレクト、RoutingRule、\をインポートします。
    REDIRECT_TYPE_MIRROR、条件
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート

# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
# バケットの名前を指定します。 例: examplebucket. 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')

# 静的Webサイトホスティングを有効にし、デフォルトのホームページをindex.htmlに設定してから、デフォルトの404ページをerror.htmlに設定します。 
index_file = 'index.html'
error_file = 'error.html'
# 一致条件を指定します。 
condition1=条件 (key_prefix_equals='examplefolder' 、
                       http_err_code_return_equals=404)

# ミラーリングベースのback-to-originを使用する場合に、リクエストに含めるヘッダーを指定します。 
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, condition1, redirect=redirect1)
website_set = BucketWebsite(index_file, error_file, [rule1])

# ミラーリングベースのback-to-originを設定します。 
bucket.put_bucket_website(website_set) 
パッケージメイン

import (import (import)
"fmt"
「github.com/aliyun/aliyun-oss-go-sdk/oss」
"os"
)

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インスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
	client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
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タイプをミラーリングベースのback-to-originに設定します。 
	ruleOk := oss.RoutingRule {
RuleNumber: 1、条件: oss.Condition {
KeyPrefixEquals: "" 、// back-to-origin条件をHTTPステータスコード404に設定します。 
			HTTPErrorCodeReturnedEquals: 404、},
リダイレクト: oss.Redirect {
RedirectType: "ミラー" 、// PassQueryString: &btrue、// ミラーリングベースのback-to-originルールのback-to-origin URLを指定します。 
			MirrorURL: "http://www.test.com/" 、// MirrorPassQueryString:&btrue、// MirrorFollowRedirect:&bfalse、// MirrorCheckMd5:&bfalse、MirrorHeaders: oss.MirrorHeaders {
// PassAll:&bfalse、// 特定のHTTPヘッダーを送信します。 
				パス: []string{"myheader-key1", "myheader-key2"},
// 特定のHTTPヘッダーの送信を禁止します。 
				削除: []string{"myheader-key3", "myheader-key4"},
セット: []oss.MirrorHeaderSet {
{
キー: "myheader-key5" 、値: "myheader-value5" 、},
},
},
},
}

// back-to-originタイプをリダイレクトベースのback-to-originに設定します。 
	ruleArrOk := []oss.RoutingRule {
{
RuleNumber: 2、条件: oss.Condition {
// back-to-origin条件をHTTPステータスコード404に設定し、オブジェクト名のプレフィックスをabc /に設定します。 
				KeyPrefixEquals: "abc/" 、HTTPErrorCodeReturnedEquals: 404、IncludeHeader: []oss.IncludeHeader {
{
キー: 「ホスト」、等しい: "test.oss-cn-beijing-internal.aliyuncs.com" 、},
},
},
リダイレクト: oss.Redirect {
RedirectType: "AliCDN" 、プロトコル: "http" 、ホスト名: "www.test.com" 、PassQueryString: &bfalse、ReplaceKeyWith: "prefix/${key}.suffix" 、HttpRedirectCode: 301、},
},
// back-to-originタイプをミラーリングベースのback-to-originに設定します。 
		{
RuleNumber: 3、条件: oss.Condition {
KeyPrefixEquals: "" 、HTTPErrorCodeReturnedEquals: 404、},
リダイレクト: oss.Redirect {
RedirectType: "ミラー" 、PassQueryString: &btrue、MirrorURL: "http://www.test.com/" 、MirrorPassQueryString: &btrue、MirrorFollowRedirect: &bfalse、MirrorCheckMd5: &bfalse、MirrorHeaders: oss.MirrorHeaders {
PassAll: &btrue、パス: []string{"myheader-key1", "myheader-key2"},
削除: []string{"myheader-key3", "myheader-key4"},
セット: []oss.MirrorHeaderSet {
{
キー: "myheader-key5" 、値: "myheader-value5" 、},
},
},
},
},
}

wxmlOne := oss.WebsiteXML {
IndexDocument: oss.IndexDocument {
接尾辞: indexWebsite、},
ErrorDocument: oss.ErrorDocument {
キー: 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)
}
}

     

ossutilの使用

ossutilを使用して、ミラーリングベースのback-to-originルールを設定できます。 詳細については、「Webサイト関連の設定の追加または変更」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketWebsite」をご参照ください。

参考資料

リアルタイムログクエリ機能を使用して、back-to-originを使用してバケットにアップロードされたオブジェクトをクエリできます。 詳細については、「リアルタイムログクエリ」をご参照ください。