自己管理のオリジンサーバーまたはサードパーティのクラウドストレージサービスから Alibaba Cloud Object Storage Service (OSS) にビジネスを移行する際に、不完全なデータ移行によるサービスの中断を防ぐために、ミラーリングベースのオリジンフェッチを設定できます。この機能が設定されている場合、ユーザーが OSS に存在しないオブジェクトをリクエストすると、OSS は指定されたオリジンサーバーからオブジェクトを自動的にフェッチします。その後、OSS はオブジェクトをユーザーに返し、バケットに保存します。この機能により、移行中のすべてのデータへの中断のないアクセスが保証され、シームレスなビジネス移行が提供されます。
仕組み
ミラーリングベースのオリジンフェッチ機能のコアはサーバーサイドプロキシです。クライアントが OSS に存在しないオブジェクトに対して GET リクエストを送信したとき、リクエストが一致するオブジェクトプレフィックスや HTTP 404 エラーなどの back-to-origin ルールをトリガーした場合、OSS サーバーは指定されたオリジンサーバーに HTTP リクエストを自動的に送信してオブジェクトをフェッチします。オリジンサーバーが 200 ステータスコードを返した場合、OSS はオブジェクトのコンテンツをクライアントに返し、オブジェクトを OSS バケットに保存します。オリジンサーバーが 404 または別のエラーステータスコードを返した場合、OSS は対応するエラーメッセージをクライアントに返します。このプロセスでは、OSS はプロキシとして機能し、オンデマンドの移行とオブジェクトの 1 回限りのキャッシュを可能にします。オブジェクトが OSS に保存された後、オリジンサーバー上のソースオブジェクトが更新されても、OSS は自動的に更新を同期しないことに注意してください。
指定されたウェブサイトから不足しているファイルをフェッチする
これは、ミラーリングベースのオリジンフェッチの最も基本的なシナリオです。ユーザーが OSS に存在しないオブジェクトをリクエストすると、システムは指定されたオリジンサーバーからオブジェクトを自動的にフェッチし、OSS に保存します。次の例は、この機能を設定して、指定されたウェブサイトから不足しているオブジェクトをフェッチする方法を示しています。examplebucket の examplefolder/ ディレクトリに存在しないオブジェクトにアクセスすると、OSS は https://example.com/ からオブジェクトを自動的にフェッチします。
ステップ 1: ミラーリングベースのオリジンフェッチルールを設定する
[バケット] ページに移動し、ターゲットバケットの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
[ミラーリングベースのオリジンフェッチ] ページで、[ルールの作成] をクリックします。
[ルールの作成] パネルで、パラメーターを設定します。言及されていないパラメーターについては、デフォルト値を保持します。
パラメーター
構成
オリジンフェッチタイプ
[ミラー] を選択します。
オリジンフェッチ条件
[ファイル名のプレフィックス] を選択し、「examplefolder/」と入力します。
ソース URL
最初の列 (プロトコル) で
httpsを選択します。2 番目の列 (ドメイン名) にexample.comと入力します。3 番目の列 (パスプレフィックス) は空のままにします。パスプレフィックスはドメイン名に追加され、ソース URL のパス部分を形成します。OK をクリックします。
ステップ 2: ルールを検証する
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txtにアクセスします。examplefolder/example.txtオブジェクトがexamplebucketに存在しない場合、OSS はオブジェクトを求めてhttps://example.com/examplefolder/example.txtにリクエストを送信します。オブジェクトをフェッチした後、OSS はそれを
examplefolder/example.txtに名前を変更し、examplebucketに保存して、リクエスタにオブジェクトを返します。
オリジンフェッチ中にディレクトリを置換し、ファイルの整合性を検証する
一部のシナリオでは、OSS のディレクトリ構造がオリジンサーバーのディレクトリ構造と異なります。また、オリジンサーバーからフェッチされたオブジェクトの整合性を確保する必要がある場合もあります。このシナリオでは、オリジンフェッチ中にディレクトリをマッピングし、MD5 検証を使用して信頼性の高いオブジェクト転送を確保する方法を示します。
リクエスタが中国 (杭州) リージョンの
bucket-01のexamplefolderディレクトリに存在しないオブジェクトにアクセスすると、オブジェクトはhttps://example.comサイトのdestfolderディレクトリからフェッチできます。フェッチされたオブジェクトの MD5 ハッシュを検証する必要があります。MD5 ハッシュが一致しないオブジェクトは
bucket-01に保存されません。
ステップ 1: ミラーリングベースのオリジンフェッチルールを設定する
[バケット] ページに移動し、ターゲットバケットの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
[ミラーリングベースのオリジンフェッチ] ページで、[ルールの作成] をクリックします。
[ルールの作成] パネルで、次の表で説明されているように必須パラメーターを設定します。他のパラメーターについては、デフォルトの構成を保持します。
パラメーター
構成
オリジンフェッチタイプ
[ミラー] を選択します。
オリジンフェッチ条件
[ファイル名のプレフィックス] を選択し、examplefolder/ に設定します。
プレフィックスの置換または切り捨て
[プレフィックスの置換または切り捨てを有効にする] を選択し、destfolder/ に設定します。
説明このオプションは、[オリジンフェッチ条件] セクションで [ファイル名のプレフィックス] を設定した後にのみ表示されます。
ソース URL
最初の列を https に、2 番目の列を example.com に設定し、3 番目の列は空のままにします。
MD5 の確認
[MD5 チェックを有効にする] を選択します。back-to-origin リクエストへの応答に Content-MD5 フィールドが含まれている場合、OSS はフェッチされたファイルの MD5 ハッシュが Content-MD5 フィールドの値と一致するかどうかを確認します。
一致: クライアントはファイルを取得し、OSS はフェッチされたファイルを保存します。
不一致: MD5 ハッシュの計算には完全なファイルデータが必要であり、ファイルはすでにクライアントにパススルーされているため、クライアントはファイルを取得できますが、OSS はそれを保存しません。
[OK] をクリックします。
ステップ 2: ルールを検証する
https://bucket-01.oss-cn-hangzhou.aliyuncs.com/examplefolder/example.txtにアクセスします。examplefolder/example.txtオブジェクトがbucket-01に存在しない場合、OSS はオブジェクトを求めてhttps://example.com/destfolder/example.txtにリクエストを送信します。オブジェクトをフェッチした後、OSS は次の操作を実行します。
back-to-origin 応答に Content-MD5 フィールドが含まれている場合、OSS はフェッチされたオブジェクトの MD5 ハッシュを計算し、Content-MD5 フィールドの値と比較します。MD5 ハッシュが一致する場合、OSS はオブジェクトの名前を
examplefolder/example.txtに変更し、bucket-01に保存して、リクエスタにオブジェクトを返します。MD5 ハッシュが一致しない場合、OSS はオブジェクトをユーザーに返しますが、bucket-01には保存しません。back-to-origin 応答に Content-MD5 フィールドが含まれていない場合、OSS はオブジェクトの名前を
examplefolder/example.txtに変更し、bucket-01に保存して、リクエスタにオブジェクトを返します。
異なるディレクトリに基づいて異なるサイトからフェッチする
ビジネスに複数のオリジンサーバーが含まれる場合、リクエストされたディレクトリパスに基づいて、リクエストを異なるオリジンサーバーにルーティングできます。このシナリオは、複数のオリジンサーバーまたは分散ストレージアーキテクチャからデータを移行する場合に適しています。たとえば、同じディレクトリ構造を持つ 2 つのオリジンサーバーがあるとします。オリジンサーバー A (https://example.com) とオリジンサーバー B (https://example.org) です。次のシナリオを実装する必要があります。
リクエスタが中国 (北京) リージョンの
bucket-02/dir1ディレクトリに存在しないオブジェクトにアクセスすると、オブジェクトはhttps://example.comサイトのexample1ディレクトリからフェッチされます。リクエスタが
bucket-02/dir2ディレクトリに存在しないオブジェクトにアクセスすると、オブジェクトはhttps://example.orgサイトのexample2ディレクトリからフェッチされます。オリジンサーバー A とオリジンサーバー B にリダイレクトポリシーが設定されているかどうかに応じて、OSS はリダイレクトで指定されたアドレスからオブジェクトをリクエストするかどうかを決定します。
ステップ 1: ミラーリングベースのオリジンフェッチルールを設定する
[バケット] ページに移動し、ターゲットバケットの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
[ミラーリングベースのオリジンフェッチ] ページで、[ルールの作成] をクリックします。
[ルールの作成] パネルで、以下に説明するように 2 つのミラーリングベースのオリジンフェッチルールを設定します。他のパラメーターについては、デフォルトの構成を保持します。
ルール 1
パラメーター
構成
オリジンフェッチタイプ
[ミラー] を選択します。
オリジンフェッチ条件
[ファイル名のプレフィックス] を選択し、dir1/ に設定します。
プレフィックスの置換または切り捨て
[プレフィックスの置換または切り捨てを有効にする] を選択し、example1/ に設定します。
説明このオプションは、[オリジンフェッチ条件] セクションで [ファイル名のプレフィックス] を設定した後にのみ表示されます。
ソース URL
最初の列を https に、2 番目の列を example.com に設定し、3 番目の列は空のままにします。
3xx 応答ポリシー
[オリジンサーバーのリダイレクトに従う] を選択します。
説明[オリジンサーバーのリダイレクトに従う] が選択されていない場合、OSS はオリジンサーバーのリダイレクトルールで指定されたアドレスをリクエスタに直接返します。
ルール 2
パラメーター
構成
オリジンフェッチタイプ
[ミラー] を選択します。
オリジンフェッチ条件
[ファイル名のプレフィックス] を選択し、dir2/ に設定します。
プレフィックスの置換または切り捨て
[プレフィックスの置換または切り捨てを有効にする] を選択し、example2/ に設定します。
説明このオプションは、[オリジンフェッチ条件] セクションで [ファイル名のプレフィックス] を設定した後にのみ表示されます。
ソース URL
最初の列を https に、2 番目の列を example.org に設定し、3 番目の列は空のままにします。
3xx 応答ポリシー
[オリジンサーバーのリダイレクトに従う] を選択します。
[OK] をクリックします。
ステップ 2: ルールを検証する
https://bucket-02.oss-cn-beijing.aliyuncs.com/dir1/example.txtにアクセスします。example.txtオブジェクトがdir1ディレクトリのbucket-02に存在しない場合、OSS はオブジェクトを求めてhttps://example.com/example1/example.txtにリクエストを送信します。オリジンサーバー A に
example1/example.txtのリダイレクトルールがある場合、OSS はリダイレクトルールで指定されたアドレスに新しいリクエストを送信します。オブジェクトをフェッチした後、OSS はそれをdir1/example1/example.txtに名前を変更し、bucket-02に保存して、リクエスタに返します。オリジンサーバー A に
example1/example.txtのリダイレクトルールがない場合、OSS はオブジェクトをフェッチし、それをdir1/example1/example.txtに名前を変更し、bucket-02に保存して、リクエスタに返します。
リクエスタが
https://bucket-02.oss-cn-beijing.aliyuncs.com/dir2/example.txtにアクセスした場合、ミラーリングベースのオリジンフェッチルールによってフェッチされたオブジェクトはbucket-02のdir2/example2ディレクトリに保存されます。
プライベートバケットからフェッチし、指定されたパラメーターをパススルーする
オリジンサーバーがプライベート OSS バケットである場合、必要なアクセス権限を設定する必要があります。また、クライアントリクエストからオリジンサーバーに特定のパラメーターを渡す必要がある場合もあります。このシナリオでは、プライベート OSS オリジンサーバーのミラーリングベースのオリジンフェッチを設定し、パラメーターをパススルーする方法を示します。たとえば、中国 (上海) リージョンに 2 つのバケットがあるとします。bucket-03 (公開読み取り) と bucket-04 (非公開) です。次のシナリオを実装する必要があります。
リクエスタが
bucket-03のルートディレクトリ内のexamplefolderディレクトリに存在しないオブジェクトにアクセスすると、オブジェクトはbucket-04のexamplefolderディレクトリからフェッチされます。リクエスト URL のクエリ文字列がオリジンサーバーに渡されます。
リクエスト URL の HTTP ヘッダー
header1、header2、およびheader3がオリジンサーバーに渡されます。
ステップ 1: ミラーリングベースのオリジンフェッチルールを設定する
[バケット] ページに移動し、ターゲットバケットの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
[ミラーリングベースのオリジンフェッチ] ページで、[ルールの作成] をクリックします。
[ルールの作成] パネルで、次の表で説明されているように必須パラメーターを設定します。他のパラメーターについては、デフォルトの構成を保持します。
パラメーター
構成
オリジンフェッチタイプ
[ミラー] を選択します。
オリジンフェッチ条件
[ファイル名のプレフィックス] を選択し、examplefolder/ に設定します。
オリジンサーバータイプ
[オリジンフェッチ用のプライベート OSS バケット] を選択し、[オリジンバケット] ドロップダウンリストから
bucket-04を選択します。このオプションを設定すると、ユーザーが存在しないオブジェクトにアクセスしたときに、OSS はデフォルトのロール
AliyunOSSMirrorDefaultRoleを使用して、指定されたプライベートオリジンバケットからデータをフェッチします。データ取得プロセスにはAliyunOSSReadOnlyAccess権限が必要です。この権限により、OSS は読み取り専用モードでのみオリジンサーバーデータにアクセスでき、データの変更や削除を防ぐことができます。Resource Access Management (RAM) ユーザーがプライベート OSS バケットのミラーリングベースのオリジンフェッチを設定する場合、RAM ユーザーは
ram:GetRole権限を持っている必要があります。この権限は、AliyunOSSMirrorDefaultRoleロールが存在するかどうかを確認するために使用されます。ロールが存在する場合は、直接使用されます。
ロールが存在しない場合は、RAM ユーザーに関連付けられている Alibaba Cloud アカウントが事前に
AliyunOSSMirrorDefaultRoleロールを作成し、このロールにAliyunOSSReadOnlyAccess権限を付与することをお勧めします。これにより、ロールの作成 (ram:CreateRole) やロールへの権限の付与 (ram:AttachPolicyToRole) などのリスクの高い権限を RAM ユーザーに付与することを回避できます。権限付与が完了すると、RAM ユーザーは作成されたロールを直接再利用できるため、権限設定のリスクが軽減されます。
ソース URL
最初の列を https に設定し、その他は空のままにします。
オリジンフェッチパラメーター
[クエリ文字列を渡す] を選択します。
OSS は URL リクエストからオリジンサーバーにクエリ文字列を渡します。
HTTP ヘッダーパススルールールを設定
[指定された HTTP ヘッダーパラメーターを渡す] を選択し、HTTP ヘッダー
header1、header2、およびheader3を追加します。back-to-origin ルールは、authorization、authorization2、range、content-length、dateなどの一部の標準 HTTP ヘッダー、またはx-oss-、oss-、またはx-drs-で始まる HTTP ヘッダーの受け渡しをサポートしていません。重要プライベートバケットからフェッチする場合、すべての HTTP ヘッダーパラメーターを渡すように選択しないでください。そうしないと、オリジンフェッチが失敗します。
[OK] をクリックします。
ステップ 2: ルールを検証する
https://bucket-03.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=ossにアクセスします。examplefolder/example.pngオブジェクトがbucket-03に存在しない場合、OSS はオブジェクトを求めてhttps://bucket-04.oss-cn-shanghai.aliyuncs.com/examplefolder/example.png?caller=lucas&production=ossにリクエストを送信します。bucket-04は、渡された?caller=lucas&production=ossパラメーターに基づいてexample.pngオブジェクトを OSS に返します。OSS はフェッチされたオブジェクトを
examplefolder/example.pngに名前を変更し、bucket-03に保存します。
リクエストに HTTP ヘッダー header1、header2、および header3 も含まれている場合、それらも bucket-04 に渡されます。
本番環境での使用
シームレスなデータ移行
この移行ソリューションの詳細については、「ミラーリングベースのオリジンフェッチを使用して Alibaba Cloud OSS にサービスをシームレスに移行する」をご参照ください。
オリジンサーバーからフェッチしたオブジェクトをリフレッシュする
ミラーリングベースのオリジンフェッチは 1 回限りのキャッシュ機構であるため、オリジンサーバー上のソースオブジェクトが更新されても、OSS はオブジェクトを自動的にリフレッシュしたり再フェッチしたりしません。すでに OSS に保存されているオブジェクトをリフレッシュするには、次の方法を使用できます。
手動削除: コンソールまたは API を使用して OSS 内のオブジェクトを削除します。次回オブジェクトにアクセスすると、back-to-origin ルールが再度トリガーされます。
ライフサイクルルール: オリジンサーバーからフェッチされたオブジェクトに有効期限ポリシーを設定して、一定期間後に自動的に削除されるようにします。これにより、定期的なリフレッシュが実現します。
ファイル名のバージョン管理: オリジンサーバー上のオブジェクトを更新するときは、
style.v2.cssのように新しい名前を使用します。これにより、キャッシュの問題が根本的に回避され、推奨される方法です。
リスク防止とフォールトトレランス
オリジンサーバーの負荷: オリジンサーバーに、back-to-origin リクエストを処理するのに十分な帯域幅と処理能力があることを確認してください。移行の初期段階では、back-to-origin リクエストの量が多くなる可能性があります。オリジンサーバーの負荷を監視し、オフピーク時にデータをプリフェッチすることをお勧めします。
コスト管理: 予期せぬ高コストを防ぐために、Alibaba Cloud 管理センターでコストアラートを設定して、back-to-origin リクエストの量を監視することをお勧めします。
セキュリティ構成: OSS がオリジンサーバーにアクセスできることを確認してください。ソース URL が HTTPS プロトコルを使用している場合は、オリジンサーバーの証明書が信頼できる認証局 (CA) によって発行されていること、ドメイン名が一致していること、および証明書の有効期限が切れていないことを確認してください。
ログクエリ: リアルタイムログクエリ機能を使用して、back-to-origin ログを表示できます。back-to-origin リクエストの User-Agent には、文字列
aliyun-oss-mirrorが含まれています。
クォータと制限
ルールの数と順序: 各バケットに最大 20 個の back-to-origin ルールを設定できます。ルールは、RuleNumber の昇順で照合されます。ルールが一致すると、そのルールが実行され、後続のルールは無視されます。ルールの右側にある [上に移動] または [下に移動] 操作を使用して、照合の優先順位を調整できます。
QPS とトラフィック:
中国本土のリージョン: デフォルトの合計 QPS は 2,000、合計帯域幅は 2 Gbit/s です。
中国本土以外のリージョン: デフォルトの合計 QPS は 1,000、合計帯域幅は 1 Gbit/s です。
この制限は、対応するリージョン内の単一の Alibaba Cloud アカウント下のすべてのバケットのミラーリングベースのオリジンフェッチ容量の合計です。制限を超えると、リクエストはスロットルされ、503 エラーが返されます。より高いクォータが必要な場合は、テクニカルサポートにお問い合わせください。
オリジンサーバーアドレス: アドレスは、インターネット経由でアクセスでき、RFC 3986 エンコーディング標準に準拠したドメイン名または IP アドレスである必要があります。内部ネットワークアドレスはサポートされていません。
タイムアウト期間: ミラーリングベースのオリジンフェッチのデフォルトのタイムアウト期間は 10 秒です。
よくある質問
オリジンサーバーからフェッチされたファイルのサイズがソースファイルのサイズと異なるのはなぜですか?
オリジンサーバーからフェッチされたオブジェクトのサイズがソースオブジェクトのサイズと異なる場合は、次のトラブルシューティング手順を実行してください。
フェッチされたオブジェクトとソースオブジェクトの
Last-Modifiedタイムスタンプを確認します。import oss2 import requests from datetime import datetime 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" # yourBucketName を、ミラーリングベースのオリジンフェッチルールを設定したバケットの名前に設定します。 bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region) # オブジェクトファイルの完全なパスを指定します。 object_key = 'yourObjectKey' # ソースファイルの完全なパスを指定します。 source_url = 'yourSourceUrl' # フェッチされたファイルの Last-Modified タイムスタンプを取得します。 oss_object_info = bucket.get_object_meta(object_key) oss_last_modified = oss_object_info.headers['last-modified'] print(f"OSS Last-Modified: {oss_last_modified}") # ソースファイルの Last-Modified タイムスタンプを取得します。 response = requests.head(source_url) source_last_modified = response.headers.get('last-modified') print(f"Source Last-Modified: {source_last_modified}") # 比較のためにタイムスタンプ文字列を datetime オブジェクトに変換します。 oss_time = datetime.strptime(oss_last_modified, '%a, %d %b %Y %H:%M:%S %Z') source_time = datetime.strptime(source_last_modified, '%a, %d %b %Y %H:%M:%S %Z') if oss_time < source_time: print("ソースファイルが更新されました。") elif oss_time > source_time: print("フェッチされたファイルの方が新しいです。") else: print("2 つのファイルのタイムスタンプは同じです。")ソースオブジェクトの
Last-Modifiedタイムスタンプが、フェッチされたオブジェクトのLast-Modifiedタイムスタンプより後の場合、オブジェクトがフェッチされた後にソースオブジェクトが更新された可能性があります。説明OSS がオリジンサーバーからオブジェクトをフェッチして宛先バケットに書き込むとき、ソースオブジェクトの
Last-Modifiedタイムスタンプ (ソースオブジェクトが最後に変更された時刻) は保持されません。代わりに、OSS は、フェッチされたオブジェクトのLast-Modifiedタイムスタンプを、ミラーリングベースのオリジンフェッチ機能を通じて OSS で作成または更新された時刻に設定します。ソースオブジェクトの
Last-Modifiedタイムスタンプが、フェッチされたオブジェクトのLast-Modifiedタイムスタンプより前または同じ場合、フェッチされたオブジェクトが生成されてからソースオブジェクトは更新されていません。次のステップに進み、MD5 または 64 ビット巡回冗長検査 (CRC-64) の値を確認します。
フェッチされたオブジェクトとソースオブジェクトの MD5 または CRC-64 の値を比較します。
# -*- coding: utf-8 -*- import oss2 import hashlib import requests # CRC-64 を比較するには、Python 標準ライブラリは CRC-64 をサポートしていないため、crcmod などのサードパーティライブラリを使用できます。 # crcmod をインストールします: pip install crcmod import crcmod 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" # yourBucketName を、ミラーリングベースのオリジンフェッチルールを設定したバケットの名前に設定します。 bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region) # オブジェクトファイルの完全なパスを指定します。 object_key = 'yourObjectKey' # ソースファイルの完全なパスを指定します。 source_url = 'yourSourceUrl' # フェッチされたファイルのメタデータを取得します。 oss_object_info = bucket.get_object_meta(object_key) oss_md5 = oss_object_info.headers.get('etag', '').strip('"') # ETag は通常 MD5 ハッシュです oss_crc64 = oss_object_info.headers.get('x-oss-hash-crc64ecma', '') print(f"OSS MD5: {oss_md5}") print(f"OSS CRC64: {oss_crc64}") # ソースファイルの内容を取得し、その MD5 と CRC-64 を計算します。 response = requests.get(source_url) if response.status_code == 200: source_content = response.content source_md5 = hashlib.md5(source_content).hexdigest() print(f"Source MD5: {source_md5}") crc64_func = crcmod.predefined.mkCrcFun('crc-64') source_crc64 = hex(crc64_func(source_content))[2:].upper().zfill(16) # 16 進文字列に変換してフォーマットします print(f"Source CRC64: {source_crc64}") # MD5 値を比較します。 if oss_md5 == source_md5: print("MD5 値が一致します。") else: print("MD5 値が一致しません。") # CRC-64 値を比較します。 if oss_crc64.upper() == source_crc64: print("CRC-64 値が一致します。") else: print("CRC-64 値が一致しません。") else: print(f"ソースファイルのフェッチに失敗しました。HTTP ステータスコード: {response.status_code}")MD5 または CRC-64 の値が一致する場合、2 つのオブジェクトの内容は同じです。この場合、2 つのオブジェクトのサイズは同じである必要があります。
MD5 または CRC-64 の値が一致しない場合、2 つのオブジェクトの内容は異なります。次のステップに進み、特別なリクエストヘッダーを確認します。
特別なリクエストヘッダーを確認します。

ミラーリングベースのオリジンフェッチリクエストに
Accept-Encoding: gzip, deflate, brなどの特別な HTTP リクエストヘッダーが含まれているかどうかを確認します。このヘッダーは、クライアントが圧縮データ形式を受け入れることができることを示します。ミラーリングベースのオリジンフェッチリクエストが HTTP 圧縮ロジックを使用し、リクエストされたオブジェクトが圧縮条件を満たしている場合、2 つのオブジェクトのサイズも異なります。
Accept-Encodingヘッダーが存在する場合は、その受け渡しを禁止する必要があります。すべての HTTP ヘッダーを渡すようにルールを設定した場合、禁止された HTTP ヘッダーのリストに `accept-encoding` を追加する必要があります。

指定された HTTP ヘッダーを渡すようにルールを設定した場合、`accept-encoding` が指定されたヘッダーのリストに含まれていないことを確認してください。

オリジンフェッチの失敗をトラブルシューティングするにはどうすればよいですか?
オリジンフェッチが失敗し、424 MirrorFailed などのエラーが返された場合は、次のトラブルシューティング手順を実行してください。
オリジンサーバーの到達可能性を確認します。
# URL を実際のオリジンサーバーアドレスとファイルパスに置き換えます curl -I "https://www.example.com/images/test.jpg"DNS 解決を確認します。
# ドメイン名を実際のオリジンサーバードメイン名に置き換えます nslookup www.example.comHTTPS 証明書を確認します (オリジンサーバーが HTTPS を使用している場合)。
# ドメイン名を実際のオリジンサーバードメイン名に置き換えます openssl s_client -connect www.example.com:443 -servername www.example.comOSS リアルタイムログクエリ機能を使用して問題を分析します。
ミラーリングベースのオリジンフェッチでファイルが生成されないのはなぜですか?
クライアントは HEAD リクエストを送信して、実際のオブジェクトコンテンツをダウンロードせずに、サイズやタイプなどのオブジェクトメタデータを取得します。HEAD リクエストはミラーリングベースのオリジンフェッチルールをトリガーしません。したがって、オブジェクトはオリジンサーバーからフェッチされたり、宛先の OSS バケットに書き込まれたりしません。
ミラーリングベースのオリジンフェッチリクエストが予期しないステータスコードを返すのはなぜですか?
back-to-origin リクエストがトリガーされ、オリジンサーバーが 404、200、または 206 以外のステータスコードを返した場合、オリジンサーバーの応答を分析する必要があります。
オリジンサーバーが OSS の場合: 次の構成項目を確認します。
指定された HTTP ヘッダーの受け渡しを禁止する: `host` ヘッダーの受け渡しを禁止します。これにより、オリジンサーバー情報の公開が防止され、back-to-origin リクエストが期待どおりに処理されることが保証されます。`host` ヘッダーが渡されると、back-to-origin リクエストは宛先バケットの `host` 値をオリジンサーバーに送信します。各バケットの `host` 値は一意です。リクエストされた `host` がオリジンサーバーの実際の `host` と一致しない場合、オリジンサーバーは 403 エラーを返します。その後、OSS はクライアントに 424 エラーを返します。これは、オリジンサーバーがリクエストを処理できなかったために操作が失敗したことを示します。

オリジンフェッチ用のプライベート OSS バケット: 権限が設定されていない場合は、宛先バケットとそのオブジェクトの ACL が公開読み取りに設定されているかどうかを確認します。権限が設定されている場合は、ミラーリングベースのオリジンフェッチに使用されるロールの権限付与ポリシーが変更され、権限が不十分になった可能性があるかどうかを確認します。ミラーリングベースのオリジンフェッチに使用されるデフォルトのロールは
AliyunOSSMirrorDefaultRoleで、そのデフォルトのシステムポリシーはAliyunOSSReadOnlyAccessです。
オリジンサーバーが OSS ではない場合: サーバー側のログと、サーバー名表示 (SNI)、back-to-origin パラメーター、ヘッダーパススルーなどの構成を確認して、オリジンサーバーの例外の具体的な原因を分析します。オリジンサーバーは、401 (Unauthorized)、403 (Forbidden)、または 5xx (Server Internal Error) などのステータスコードを返す場合があります。
オリジンフェッチルールの照合順序は何ですか?
ルールは、ルール番号 (RuleNumber) の昇順で照合されます。最初に一致するルールが見つかると、そのルールが実行され、照合プロセスは停止します。
VPC 内のサービスまたは内部 IP アドレスからフェッチできますか?
いいえ。オリジンサーバーには、公にアクセス可能なアドレスが必要です。VPC 内のサービスにアクセスするには、NAT Gateway またはインターネット向け SLB インスタンスを使用して、インターネットに公開できます。
ソースファイルが更新された後、OSS のファイルが更新されないのはなぜですか?
ミラーリングベースのオリジンフェッチは 1 回限りのプルメカニズムであり、オリジンサーバーからの更新を自動的に同期しません。OSS でフェッチされたオブジェクトを手動で削除するか、ファイル名のバージョン管理戦略を使用して新しいオブジェクトを取得する必要があります。