IBM Cloud Docs
複製イベントの追跡

複製イベントの追跡

複製を使用すると、ソース・バケットから 同じアカウント 内のターゲット・バケットにオブジェクトを非同期で自動的にコピーするためのルールを定義できます。 また、オブジェクトをバケットから 異なるアカウント の別のバケットにコピーすることもできます。

複製とは?

複製では、新しく作成されたオブジェクトとオブジェクト更新がソース・バケットからターゲット・バケットにコピーされます。

  • ターゲット・バケットにコピーされるのは、(複製ルールがバケットに追加された後に作成された) 新規オブジェクトまたは既存オブジェクトの新規バージョンのみです。 既存のオブジェクトは、 それらを自身にコピーすることによって 複製できます。これにより、複製される新しいバージョンが作成されます。
  • ソース・オブジェクトのメタデータが複製対象オブジェクトに適用されます。
  • 2 つのバケット間の双方向レプリケーションでは、両方のバケットでルールがアクティブになっている必要があります。
  • フィルター (接頭部またはタグ、あるいはその両方で構成される) を使用して、オブジェクトのサブセットのみに適用されるように複製規則のスコープを設定できます。 単一のポリシーで複数のルールを定義でき、これらのルールで異なる宛先を指定できます。 このようにして、同じバケット内の異なるオブジェクトを異なる宛先に複製することができます。

複製を使用する理由

  • バケット内のデータのコピーを別の地理的位置に保持します。
  • 許容されるロケーション内にのみレプリカを保管する複製ルールを定義することにより、データ主権のコンプライアンス規制に対応します。
  • 複製では、最終変更時刻やバージョン ID などのオブジェクト・メタデータが保持されるため、実稼働データとテスト・データの同期を維持します。
  • ターゲット・バケットに対して異なるストレージ・クラスまたはライフサイクル・ルール (あるいはその両方) を定義することにより、ソースから独立して複製対象オブジェクトのストレージ・クラスおよびライフサイクル・ポリシーを管理します。 同様に、別のサービス・インスタンスまたは IBM Cloud アカウントのバケットにレプリカを保管したり、レプリカへのアクセスを独立して制御したりすることもできます。

レプリケーションの開始

開始するには、以下の前提条件を満たす必要があります。

  • ソース・バケットに対する Writer または Manager のプラットフォーム役割、または適切な複製アクション ( cloud-object-storage.bucket.put_replication など) が割り当てられたカスタム役割を設定します。
  • ターゲット・バケットにアクセスする必要はありませんが、ソース・バケットがターゲット・バケットに書き込むことを許可する 新規 IAM ポリシー を作成するための十分なプラットフォーム役割を持っている必要があります。
  • ターゲット・バケットでは、レガシー・バケット・ファイアウォールを有効にしてはなりませんが、 コンテキスト・ベースの制限 を使用できます。
  • 管理対象暗号化(SSE-KMS)(Key Protect など) は複製と完全に互換性がありますが、暗号化された SSE-C の使用 オブジェクトは複製できません。
  • アーカイブ済み状態のオブジェクトは複製できません。
  • ソース・バケットとターゲット・バケットが異なる IBM アカウントにある場合は、必ず各アカウントにバケットを作成してください。
  • ソース・バケットとターゲット・バケットの両方で 「バージョン管理」 を有効にします。

バージョン管理は複製の要件であるため、 Immutable Object Storage ポリシー で構成されたバケット内のオブジェクトを複製することはできません。

1 つの IBM アカウントの使用

同じ IBM アカウント内のバケット間でオブジェクトを複製するには、以下のようにします。

  1. 選択したソース・バケットにナビゲートした後、 「構成」 タブをクリックします。
  2. 「バケットの複製 (Bucket replication)」 を探し、 「複製のセットアップ (Setup replication)」 ボタンをクリックします。
  3. 「レプリケーション・ソース」 を選択し、 「次へ」 をクリックします。
  4. ドロップダウン・メニューからインスタンスとバケットを選択します。 あるいは、ラジオ・ボタンを 「いいえ」 に切り替えて、ターゲット・バケットの CRN に貼り付けます。
  5. 「権限の確認」 ボタンをクリックします。

次に、ターゲット・バケットに対するソース・バケットの Writer 権限を付与する必要があります。 これを行うにはいくつかの方法がありますが、最も簡単な方法は、 IBM Cloud Shell と IBM Cloud CLI を使用することです。

  1. 新しいウィンドウまたはタブで IBM Cloud Shell を開きます。
  2. オブジェクト・ストレージ・コンソールに表示されている IBM Cloud CLI コマンドをコピーして、新しいシェルに貼り付けます。
  3. バケット構成ウィンドウまたはタブに戻り、 「許可の確認」 ボタンを再度クリックします。

次に、複製規則を作成します。

  1. 「ルールの状況」ラジオ・ボタンが 「有効」 に設定されていることを確認します。
  2. 規則に名前と優先順位、および複製規則の対象となるオブジェクトを制限する接頭部フィルターまたはタグ・フィルターを指定します。
  3. 「完了 (Done)」 をクリックします。

異なる IBM アカウントの使用

異なる IBM アカウントのバケット間でオブジェクトを複製するには、以下のようにします。

  1. 宛先の IBM アカウントで IAM ポリシーをセットアップします。 IAM ポリシーの作成については、 IAM ポリシーとそのポリシーを割り当てることができるユーザー を参照してください。
  2. 「バケット構成」ページで、CRN 形式のアカウント ID とサービス・インスタンス ID を見つけます。
  3. 宛先アカウントの IBM Cloud UI を使用して、 「管理」>「アクセス (IAM)」 をクリックします。
  4. 左側のパネルで 「認証」 をクリックします。
  5. 「作成」 をクリックして、新規 IAM ポリシーを作成します。
  6. サービス許可ページ構成を付与します。 これは、新しい IAM ポリシーを作成した後に着陸するページです。
  7. 「別のアカウント」 を選択し、ソース・アカウントのアカウント ID を指定します。
  8. Cloud Object Storage としてサービス・アクセスを提供します。
  9. 「アクセスの有効範囲」で、 「特定のリソース」 を選択します。
  10. 「ソース・サービス・インスタンス」 を選択し、ソース・バケットのサービス・インスタンス ID を入力します。
  11. 「ターゲット」の下で、ソース・バケット・アクセスに Cloud Object Storage を選択します。
  12. 「ターゲット・スコープ」で、 「特定のリソース」> *「サービス・インスタンス」を選択します。
  13. ドロップダウン・メニューから、宛先アカウントのサービス・インスタンス ID を選択します。
  14. 必要に応じて、役割 「オブジェクト・ライター」 または 「ライター」 を選択します。

複製を有効にするには、 「オブジェクト・ライター」 役割で十分です。

用語

ソース・バケット: 複製ポリシーが構成されているバケット。 これは、複製対象オブジェクトのソースです。

ターゲット・バケット: ソース・バケット複製ポリシーで宛先として定義されているバケット。 これは、複製対象オブジェクトのターゲットです。 「宛先」バケットとも呼ばれます。

レプリカ: ソース・バケットに対する要求のためにターゲット・バケットに作成された新規オブジェクト。

複製されるもの

CopyObjectPutObject、または CompleteMultipartUpload を使用して作成された新規オブジェクトは、ソース・バケットからターゲット・バケットに複製されます。 複製されたオブジェクトは、ソース・オブジェクトからメタデータ・フィールド EtagLast Modified TimeVersion IDuser-attributes、および Tags を継承します。

削除マーカーは、複製ポリシーによって構成されている場合は複製されます。

バージョンのタグに対する更新は、ソース・バケットからターゲット・バケットに複製されます。

以下は複製されません。

  • ライフサイクル・イベントによって開始されるアクション
  • アーカイブに直接書き込まれるオブジェクト
  • アーカイブ層から復元されたオブジェクト
  • SSE-C によって暗号化されたオブジェクト
  • オブジェクト ACL
  • オブジェクト-ロック状態

事業継続性と災害復旧のための複製の使用

レプリケーションを使用して、障害が発生した場合にサービスの継続性を提供することができます。

  • ソース・バケットとターゲット・バケットが異なる場所にあることを確認してください。
  • 最新バージョンのオブジェクトが両方のバケット間で同期していることを確認します。 Rclone ( rclone check コマンド) などのツールは、コマンド・ラインから同期性を確認するのに役立ちます。
  • 障害が発生した場合、アプリケーションのトラフィックをターゲット・バケットにリダイレクトできます。

整合性とデータ保全性

IBM Cloud Object Storage は、すべてのデータ入出力操作に強力な整合性を提供しますが、バケット構成は最終的に整合性があります。 バケットで初めて複製規則を有効にした後、構成がシステム全体に伝搬され、新規オブジェクトの複製が開始されるまでに少し時間がかかる場合があります。

IAM アクション

複製に関連付けられた新しい IAM アクションがあります。

IAM アクション 役割
cloud-object-storage.bucket.get_replication 管理者、ライター、リーダー
cloud-object-storage.bucket.put_replication 管理者、ライター
cloud-object-storage.bucket.delete_replication 管理者、ライター

Activity Tracker イベント

複製によって追加イベントが生成されます。

  • cloud-object-storage.bucket-replication.create
  • cloud-object-storage.bucket-replication.read
  • cloud-object-storage.bucket-replication.delete
  • cloud-object-storage.object-replication.sync (ソースで生成)
  • cloud-object-storage.object-replication.create (ターゲットで生成)

cloud-object-storage.bucket-replication.create イベントの場合、以下のフィールドに追加情報が示されます。

フィールド 説明
requestData.replication.num_sync_remote_buckets バケット複製ルールで指定されたターゲット・バケットの数。
requestData.replication.failed_remote_sync 複製チェックに不合格になったバケットの CRN。

複製がアクティブな場合、オブジェクトに対する操作により、以下の追加情報が生成されることがあります。

フィールド 説明
requestData.replication.replication_throttled スロットル・メカニズムが原因で、ソース上でオブジェクトの複製が遅延したかどうかを示します。
requestData.replication.destination_bucket_id ターゲット・バケットの CRN。
requestData.replication.sync_type 同期操作のタイプ。 content sync は、オブジェクト・データ および メタデータがターゲットに書き込まれたことを示し、 metadata sync は、メタデータのみがターゲットに書き込まれたことを示し、 delete sync は、削除マーカーのみがターゲットに書き込まれたことを示します。
responseData.replication.source_bucket_id ソース・バケットの CRN。
responseData.replication.result 値は、 successfailure (サーバー・エラーを示す)、 user (ユーザー・エラーを示す) のいずれかです。
responseData.replication.message HTTP 応答メッセージ (例えば、 OK)。

オブジェクトがソースに書き込まれてからターゲットに書き込まれるまで、オブジェクトをトレースすることができます。 オブジェクト書き込みに関連付けられた要求 ID を検索すると、以下の 3 つのイベントが表示されます。

  • 元の PUT
  • ソースからの同期要求。
  • ターゲット上の PUT 要求。

これら 3 つのいずれかが欠落している場合は、障害を示します。

使用量とアカウンティング

すべてのレプリカはオブジェクト自体であり、他のデータと同様に 使用法を提供 します。 複製が成功すると、複製プロセスで消費された帯域幅は請求されませんが、 PUTGET、および HEAD の各要求が請求可能になります。

複製により、 IBM Cloud Monitoringで使用する追加のメトリックが生成されます。

  • ibm_cos_bucket_replication_sync_requests_issued
  • ibm_cos_bucket_replication_sync_requests_received

インタラクション

バージョン管理

複製を有効にするには、バージョン管理が必須です。 ソース・バケットとターゲット・バケットの両方で バージョン管理を有効に し、ソース・バケットで複製を構成すると、以下の問題が発生する場合があります。

  • ソース・バケットのバージョン管理を無効にしようとすると、 Object Storage からエラーが返されます。 ソース・バケットのバージョン管理を無効にするには、複製構成を削除する必要があります。
  • ターゲット・バケットのバージョン管理を無効にすると、複製は失敗します。

Key Protect 暗号化

ソース・オブジェクトは、ソース・バケットの ルート・キーを使用して暗号化 され、レプリカはターゲット・バケットのルート・キーを使用して暗号化されます。

ライフサイクル構成

ターゲット・バケットで ライフサイクル・ポリシー が有効になっている場合、ライフサイクル・アクションは、ターゲット・バケットでレプリカが使用可能になる時刻ではなく、ソースでのオブジェクトの元の作成時刻に基づきます。

Immutable Object Storage

バージョン管理が有効になっている バケットでは保存ポリシーを使用できません。バージョン管理は複製の要件であるため、Immutable Object Storage が有効になっているバケットとの間でオブジェクトを複製することはできません。

レガシー・バケット・ファイアウォール

IP アドレスに基づいてアクセスを制限するためにレガシー・ファイアウォールを使用するバケット は、複製を使用できません。オブジェクトを複製するバックグラウンド・サービスには固定 IP アドレスがなく、ファイアウォールを渡すことができないためです。

ネットワーク情報に基づいてアクセスを制御する場合は、代わりに コンテキストベースの制限を使用する ことをお勧めします。

Cloud Functions および Code Engine

複製を構成しても、現時点では Cloud Functions のトリガー イベントも Code Engine イベントも提供されませんが、オブジェクトの書き込みと削除により、ソースとターゲットの両方のバケットに対して Object:Write 通知と Object:Delete 通知が作成されます。 これらのイベントには、イベントが同期をトリガーしたか、同期によってトリガーされたかを示す notifications.replication_type フィールドの注釈が付けられます。

既存のオブジェクトの複製

複製ルールは、ルールが構成されてバケットに適用された に書き込まれたオブジェクトに対してのみ動作できます。 複製する必要がある既存のオブジェクトがバケット内にある場合は、オブジェクトの存在を複製プロセスに認識させる必要があります。 これは、 PUT copy 操作を使用してオブジェクトをそれ自体にコピーすることによって簡単に行うことができます。

このプロセスにより、作成タイム・スタンプを含む一部のオブジェクト・メタデータがリセットされます。 これは、ライフサイクル・ポリシー、および作成タイム・スタンプまたは変更タイム・スタンプを使用するその他のサービス (コンテンツ配信ネットワークなど) に影響します。 オブジェクト・メタデータのリセットによって生じる可能性のある中断が適切に処理されていることを確認してください。

このプロセスには以下が含まれます

  1. 複製ルールの対象となるバケット内のすべてのオブジェクトのリストを作成する
  2. そのリストを反復処理し、ソースが要求のターゲットと同一である各オブジェクトに対して PUT copy 操作を実行します。

この例では、 PUT copy 要求によって作成されたオブジェクトの新規バージョンのみを複製します。 オブジェクトのすべてのバージョンを複製するには、個々のバージョンもコピーする必要があります。

以下の例は Pythonで作成されていますが、アルゴリズムは任意のプログラミング言語またはコンテキストで適用できます。

import os
import sys
import ibm_boto3
from ibm_botocore.config import Config

# Create client connection
cos = ibm_boto3.client("s3",
                       ibm_api_key_id=os.environ.get('IBMCLOUD_API_KEY'),
                       ibm_service_instance_id=os.environ['SERVICE_INSTANCE_ID'],
                       config=Config(signature_version="oauth"),
                       endpoint_url=os.environ['US_GEO']
                       )

# Define the bucket with existing objects for replication
bucket = os.environ['BUCKET']

def copy_in_place(BUCKET_NAME):
    print("Priming existing objects in " + bucket + " for replication...")

    paginator = cos.get_paginator('list_objects_v2')
    pages = paginator.paginate(Bucket=bucket)

    for page in pages:
        for obj in page['Contents']:
            key = obj['Key']
            print("  * Copying " + key + " in place...")
            try:
                headers = cos.head_object(
                    Bucket=bucket,
                    Key=key
                    )
                md = headers["Metadata"]
                cos.copy_object(
                    CopySource={
                        'Bucket': bucket,
                        'Key': key
                        },
                    Bucket=bucket,
                    Key=key,
                    TaggingDirective='COPY',
                    MetadataDirective='REPLACE',
                    Metadata=md
                    )
                print("    Success!")
            except Exception as e:
                print("    Unable to copy object: {0}".format(e))
    print("Existing objects in " + bucket + " are now subject to replication rules.")

copy_in_place(bucket)

REST API の例

以下の例では、使いやすさのために cURL を使用しています。 環境変数は、 $BUCKET$TOKEN、および $REGION などのユーザー固有のエレメントを表すために使用されます。 $REGION にはネットワーク・タイプの指定も含まれるため、プライベート・ネットワークを使用して us-south のバケットに要求を送信するには、この変数を private.us-south に設定する必要があることに注意してください。

バケットでの複製の有効化

複製構成は、要求の本体で XML として提供されます。 新規要求により、バケットに存在する既存の複製規則が上書きされます。

複製構成には少なくとも 1 つの規則を含める必要があり、最大 1,000 個を含めることができます。 各ルールは、ソース・バケット内のオブジェクトをフィルタリングすることによって、複製するオブジェクトのサブセットを識別します。 複製するオブジェクトの追加サブセットを選択するには、サブセットごとにルールを追加します。

複製規則を適用するソース・バケット内のオブジェクトのサブセットを指定するには、 Rule エレメントの子として Filter エレメントを追加します。 オブジェクト・キー接頭部、1 つ以上のオブジェクト・タグ、またはその両方に基づいてオブジェクトをフィルターに掛けることができます。 構成に Filter エレメントを追加する場合は、 DeleteMarkerReplicationStatus、および Priority エレメントも追加する必要があります。

ヘッダー タイプ 説明
Content-MD5 ストリング 必須: base64 でエンコードされた、ペイロードの 128 ビット MD5 ハッシュ。ペイロードが転送中に変更されなかったことを確認するための保全性検査として使用されます。

要求の本体には、以下のスキーマの XML ブロックが含まれている必要があります。

エレメント タイプ 上位 制約
ReplicationConfiguration コンテナー Rule なし 限度 1。
Rule コンテナー ID, Status, Filter, DeleteMarkerReplication, Destination, Priority ReplicationConfiguration 限度 1000。
ID ストリング なし Rule (a-z,A-Z0-9) と以下の記号で構成されている必要があります。 ! _ . * ' ( ) -
Destination コンテナー Bucket Rule 限度 1。
Bucket ストリング なし Destination ターゲット・バケットの CRN。
Priority 整数 なし Rule 優先順位は各ルールに関連付けられます。 アップロードされるオブジェクトに複数のルールが適用される場合があります。 このような場合、オブジェクト・ストレージは、そのオブジェクトを複製するときに、より高い優先順位を持つ適用可能なルールを適用します。 したがって、オブジェクトに一致する複製ポリシー内の規則の数に関係なく、どのオブジェクトにも適用できる複製規則は 1 つだけです。 数値が大きいほど、優先順位が高いことに注意してください。
Status ストリング なし Rule ルールが有効かどうかを指定します。 有効な値は Enabled または Disabledです。
DeleteMarkerReplication コンテナー Status Rule 限度 1。
Status ストリング なし DeleteMarkerReplication オブジェクト・ストレージが削除マーカーを複製するかどうかを指定します。 有効な値は Enabled または Disabledです。
Filter ストリング Prefix, Tag, AND Rule 複製規則が適用されるオブジェクトのサブセットを識別するフィルター。 Filter は、厳密に 1 つの PrefixTag、または And 子エレメントを指定する必要があります。
Prefix ストリング なし Filter 規則が適用されるオブジェクトのサブセットを識別するオブジェクト・キー名の接頭部。
Tag ストリング なし Filter タグのキーと値を指定するためのコンテナー。 この規則は、タグ・セット内にタグがあるオブジェクトにのみ適用されます。
And ストリング なし Filter ルール・フィルターを指定するためのコンテナー。 フィルターは、規則が適用されるオブジェクトのサブセットを決定します。 このエレメントは、複数のフィルターを指定する場合にのみ必要です。
Key ストリング なし Tag タグ・キー。
Value ストリング なし Tag タグの値。

この例では、すべての新規オブジェクトを複製しますが、削除マーカーは複製しません。

curl -X "PUT" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?replication" \
     -H 'Authorization: bearer $TOKEN' \
     -H 'Content-MD5: exuBoz2kFBykNwqu64JZuA==' \
     -H 'Content-Type: text/plain; charset=utf-8' \
     -d $'<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
            <Rule>
              <ID>SimpleReplication</ID>
              <Priority>1</Priority>
              <Status>Enabled</Status>
              <DeleteMarkerReplication>
                <Status>Disabled</Status>
              </DeleteMarkerReplication>
              <Filter/>
              <Destination>
                <Bucket>$DESTINATION_CRN</Bucket>
              </Destination>
          	</Rule>
          </ReplicationConfiguration>'

この例では、 project_a/ で始まるキー (名前) を持つすべてのオブジェクトを $DESTINATION_CRN_A で識別されるバケットに複製し、 project_b/ で始まるキー (名前) を持つすべてのオブジェクトを $DESTINATION_CRN_B で識別されるバケットに複製し、キー Client と値 ACME を持つすべてのオブジェクトを $DESTINATION_CRN_C で識別される 3 番目のバケットに複製します。すべてのケースで削除マーカーを複製します。

以下の 4 つのオブジェクトがソース・バケットに追加されるとします。 以下で説明するように、ターゲット・バケットに複製されます。

  1. project_a/foo.mp4
  2. project_a/bar.mp4
  3. project_b/baz.pdf
  4. project_b/acme.pdf この 4 番目のオブジェクトには、キー Client と値 ACME を持つオブジェクト・タグもあります。

以下の規則により、オブジェクト 1 および 2 は $DESTINATION_CRN_A に複製されます。 オブジェクト 3 は $DESTINATION_CRN_B に複製されます。 オブジェクト 4 は $DESTINATION_CRN_C にのみ複製されます。これは、ID AcmeCorp のルールの優先順位の値が ID ProjectB のルールの優先順位の値より高く、両方のルールの要件を満たしている場合にのみ、前者のルールに従うためです。

curl -X "PUT" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?replication" \
     -H 'Authorization: bearer $TOKEN' \
     -H 'Content-MD5: exuBoz2kFBykNwqu64JZuA==' \
     -H 'Content-Type: text/plain; charset=utf-8' \
     -d $'<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
            <Rule>
              <ID>ProjectA</ID>
              <Priority>10</Priority>
              <Status>Enabled</Status>
              <DeleteMarkerReplication>
                <Status>Enabled</Status>
              </DeleteMarkerReplication>
              <Filter>
                <Prefix>project_a/</prefix>
              </Filter>
              <Destination>
                <Bucket>$DESTINATION_CRN_A</Bucket>
              </Destination>
          	</Rule>
            <Rule>
              <ID>ProjectB</ID>
              <Priority>5</Priority>
              <Status>Enabled</Status>
              <DeleteMarkerReplication>
                <Status>Enabled</Status>
              </DeleteMarkerReplication>
              <Filter>
                <Prefix>project_b/</prefix>
              </Filter>
              <Destination>
                <Bucket>$DESTINATION_CRN_B</Bucket>
              </Destination>
          	</Rule>
            <Rule>
              <ID>AcmeCorp</ID>
              <Priority>20</Priority>
              <Status>Enabled</Status>
              <DeleteMarkerReplication>
                <Status>Enabled</Status>
              </DeleteMarkerReplication>
              <Filter>
                <Tag>
                  <Key>Client</Key>
                  <Value>ACME</Value>
                </Tag>
              </Filter>
              <Destination>
                <Bucket>$DESTINATION_CRN_C</Bucket>
              </Destination>
          	</Rule>
          </ReplicationConfiguration>'

要求が成功すると、 200 応答が返されます。

バケットの複製構成の表示

curl -X "GET" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?replication" \
     -H 'Authorization: bearer $TOKEN'

これにより、適切なスキーマを持つ XML 応答本体が返されます。

<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Rule>
    <ID>SimpleReplication</ID>
    <Status>ENABLED</Status>
    <DeleteMarkerReplication>
      <Status>DISABLED</Status>
    </DeleteMarkerReplication>
    <Destination>
      <Bucket>crn:v1:bluemix:public:cloud-object-storage:global:a/9978e07eXXXXXXXX66c89c428028654:ef1c725e-XXXX-4967-bcc1-734c03a2b846:bucket:replication-destination</Bucket>
    </Destination>
    <Priority>1</Priority>
    <Filter/>
  </Rule>
</ReplicationConfiguration>

バケットの複製構成の削除

curl -X "DELETE" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?replication" \
     -H 'Authorization: bearer $TOKEN'

要求が成功すると、 204 応答が返されます。

SDK の例

以下の例では、 IBM COS SDK for Python および Node.jsを使用していますが、オブジェクト・バージョン管理の実装は、カスタム・エンドポイントの設定を可能にする S3-compatible ライブラリーまたはツールと完全に互換性がなければなりません。 サード・パーティー・ツールを使用するには、 AWS V4 署名を計算するための HMAC 資格情報が必要です。 HMAC 資格情報について詳しくは、 資料を参照してください

Python

IBM COS SDK for Python を使用したバージョン管理は、 低レベル・クライアント 構文を使用して行うことができます。

クライアントの使用:

#!/usr/bin/env python3

import ibm_boto3
from ibm_botocore.config import Config
from ibm_botocore.exceptions import ClientError

# Define constants
API_KEY = os.environ.get('IBMCLOUD_API_KEY')
SERVICE_INSTANCE = os.environ.get('SERVICE_INSTANCE_ID')
ENDPOINT = os.environ.get('ENDPOINT')

BUCKET = "my-replication-bucket" # The bucket that will enable replication.

# Create resource client with configuration info pulled from environment variables.
cosClient = ibm_boto3.client("s3",
                         ibm_api_key_id=API_KEY,
                         ibm_service_instance_id=SERVICE_INSTANCE,
                         config=Config(signature_version="oauth"),
                         endpoint_url=ENDPOINT
                         )

response = cosClient.put_bucket_versioning(
    Bucket=BUCKET,
    ReplicationConfiguration={
        'Rules': [
            {
                'ID': 'string',
                'Priority': 123,
                'Filter': {
                    'Prefix': 'string',
                    'Tag': {
                        'Key': 'string',
                        'Value': 'string'
                    },
                    'And': {
                        'Prefix': 'string',
                        'Tags': [
                            {
                                'Key': 'string',
                                'Value': 'string'
                            },
                        ]
                    }
                },
                'Status': 'Enabled'|'Disabled',
                'Destination': {
                    'Bucket': 'string',
                },
                'DeleteMarkerReplication': {
                    'Status': 'Enabled'|'Disabled'
                }
            },
        ]
    }
)

同じクライアントを使用するオブジェクトのバージョンをリストします。

resp = cosClient.list_object_versions(Prefix='some-prefix', Bucket=BUCKET)

Python API は非常に柔軟であり、同じタスクを実行するためのさまざまな方法があることに注意してください。

Node.js

IBM COS SDK for Node.js を使用したバージョン管理の有効化:

const IBM = require('ibm-cos-sdk');

var config = {
    endpoint: '<endpoint>',
    apiKeyId: '<api-key>',
    serviceInstanceId: '<resource-instance-id>',
};

var cos = new IBM.S3(config);

var params = {
  Bucket: 'STRING_VALUE', /* required */
  ReplicationConfiguration: { /* required */
    Role: 'STRING_VALUE', /* required */
    Rules: [ /* required */
      {
        Destination: { /* required */
          Bucket: 'STRING_VALUE', /* required */
        },
        Status: Enabled | Disabled, /* required */
        Filter: {
          And: {
            Prefix: 'STRING_VALUE',
            Tags: [
              {
                Key: 'STRING_VALUE', /* required */
                Value: 'STRING_VALUE' /* required */
              },
              /* more items */
            ]
          },
          Prefix: 'STRING_VALUE',
          Tag: {
            Key: 'STRING_VALUE', /* required */
            Value: 'STRING_VALUE' /* required */
          }
        },
        ID: 'STRING_VALUE',
        Prefix: 'STRING_VALUE',
        Priority: 'NUMBER_VALUE',
        }
      }
    ]
  },
  ContentMD5: 'STRING_VALUE',
};
cos.putBucketReplication(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});