1. はじめに
2022年6月21日に、ICOSのレプリケーション機能が提供開始されました。
https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-replication-overview&locale=en
以下に主な特徴を記載します。
- bucket間の非同期レプリケーション。
- レプリケーション先は、同一ロケーションのbucketでもいいし、異なるロケーションのbucketでも良い。
- レプリケーション先は、異なるResiliencyでもよい(例:Cross Region ICOSからRegional ICOSへのレプリケーションなど)
- レプリケーション先は、異なるストレージポリシー(Smart Tier/Standard/Vault/Cold Vault)でも良い。
- レプリケーション先は、異なるアカウントでも良い。
- メタデータ(objectの作成日など)もレプリケーションの対象。
- 双方向のレプリケーションも可能。
- フィルター(prefixもしくはタグを利用)を設定して、特定の条件に適合したobjectだけをレプリケーション対象にすることも可能。
- レプリケーションに伴うAPI呼び出し(
PUT
,GET
,HEAD
)に対しては課金されるが、データ転送量については課金対象外。
実際に利用する上でハマりそうなのは以下の箇所です。その他条件はdocsを参照してください。
- bucket内では複数のreplication ruleを作成することが可能だが、1つのobjectに対して、条件に該当する最優先のruleしか利用されない。つまり、1つのobjectを複数のbucketにレプリケーションすることはできない。なお、bucketA -> bucketBとbucketB->bucketCというruleを作っても、bucketAに作成したobjectはbucketBにはレプリケーションされるが、bucketCにはレプリケーションされない。
- レプリケーションの設定をした後に作成されたobjectにしかレプリケーション対象にならない。ただし、既存のobjectに対しては自分自身にコピー(新しいバージョンを作成)する操作を実施して新たにバージョンを生成することで、レプリケーション対象にすることが可能。
- source/destinationの両方のbucketでversioningを有効にしておく必要がある。特に、retention policy(Immutable Objectの構成)を利用しているとversioningは利用できないことにも注意。retention policyは一度作成してしまうと削除することはできないので、そのbucketはレプリケーション対象にすることはできない。
- Legacy Firewallを利用してはいけない。Context-based restrictionでのFirewall利用は可能。
- アーカイブ状態のobjectはレプリケーションされない。
- 以下の権限が必要
- ユーザー権限: source bucketに対する
cloud-object-storage.bucket.put_replication
が含まれるロールの割り当てが必要。デフォルトで用意されているロールとしては、Writer
もしくはManager
であればこの権限が含まれている。別途カスタムロールを作っても良い。 - source bucketがdesitination bucketに書き込むことを許可する権限: CLI(source/destinationが同一アカウントのみサポート)やAPIからも構成できるが、
https://cloud.ibm.com/iam/authorizations
から設定もできる。以下は、自アカウントのインスタンス内のbucketから、同一インスタンスへのbucket書き込みを許可する構成の例。
- ユーザー権限: source bucketに対する
2. 設定方法
source bucket/destination bucketでのVersioning
設定や、権限の付与
はあらかじめ実施しておくものとする。
- Source bucketのConfiguration内にある、
Bucket replication rules
にて、Setup replication
を押下。
-
Replication source
を選択。
-
Destination bucket
を指定。
- 権限が正しく構成されているので、Permissionの警告なしに以下の画面に遷移する(もし権限が足りていない場合は、ここで権限を付与する旨の指示画面が表示される)。全データをコピーしたい場合は、Prefix Filterを構成する必要はない。もし何かしらのフィルターを設けてレプリケーションルールを構成したい場合はPrefix filterを構成する。Rule nameは設定することを推奨。
3. テスト
テスト1: レプリケーション設定直後の状態
-
mybucket106(jp-tok)
->mybucket102(jp-tok)
のレプリケーションを構成。 - source bucket/destination bucket共にデータは存在しているが、設定直後では同期されていない。
$ ibmcloud cos objects --bucket mybucket106
OK
Found 6 objects in bucket 'mybucket106':
Name Last Modified Object Size
Veeam/ Jun 20, 2020 at 07:00:17 0 B
Veeam/Archive/ Jun 20, 2020 at 07:00:18 0 B
Veeam/Archive/backup/ Jun 20, 2020 at 07:00:19 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874 Mar 25, 2020 at 07:15:03 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/_SUCCESS Mar 25, 2020 at 07:15:08 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/part-00000-7b2aff6b-68d3-404e-9588-549b0f964acd-c000-attempt_20200325071505_0005_m_000000_0.csv Mar 25, 2020 at 07:15:06 30.84 KiB
$ ibmcloud cos objects --bucket mybucket102
OK
Found 8 objects in bucket 'mybucket102':
Name Last Modified Object Size
404_not_found.png Apr 01, 2022 at 00:15:11 408.46 KiB
error.html Oct 28, 2020 at 04:32:32 195 B
favicon.ico Oct 28, 2020 at 04:21:36 63.71 KiB
index.html Mar 31, 2022 at 23:31:10 284 B
ninja.jpg Oct 28, 2020 at 04:16:09 23.67 KiB
ojigi_animal_neko.png Mar 31, 2022 at 06:23:49 348.42 KiB
sorry.html Apr 01, 2022 at 02:48:01 423 B
style.css Oct 28, 2020 at 04:16:12 110 B
テスト2: source側bucketに新規にデータを追加
- テスト1の状態から、source側にtestdata1.txt, testdata2.txt, testdata3.txtを追加。
- source側に新たに追加されたデータのみがレプリケーションされている。
$ ibmcloud cos objects --bucket mybucket106
OK
Found 9 objects in bucket 'mybucket106':
Name Last Modified Object Size
Veeam/ Jun 20, 2020 at 07:00:17 0 B
Veeam/Archive/ Jun 20, 2020 at 07:00:18 0 B
Veeam/Archive/backup/ Jun 20, 2020 at 07:00:19 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874 Mar 25, 2020 at 07:15:03 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/_SUCCESS Mar 25, 2020 at 07:15:08 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/part-00000-7b2aff6b-68d3-404e-9588-549b0f964acd-c000-attempt_20200325071505_0005_m_000000_0.csv Mar 25, 2020 at 07:15:06 30.84 KiB
testdata1.txt Jun 28, 2022 at 00:15:04 25.48 KiB
testdata2.txt Jun 28, 2022 at 00:15:04 25.48 KiB
testdata3.txt Jun 28, 2022 at 00:15:04 25.48 KiB
$ ibmcloud cos objects --bucket mybucket102
OK
Found 11 objects in bucket 'mybucket102':
Name Last Modified Object Size
404_not_found.png Apr 01, 2022 at 00:15:11 408.46 KiB
error.html Oct 28, 2020 at 04:32:32 195 B
favicon.ico Oct 28, 2020 at 04:21:36 63.71 KiB
index.html Mar 31, 2022 at 23:31:10 284 B
ninja.jpg Oct 28, 2020 at 04:16:09 23.67 KiB
ojigi_animal_neko.png Mar 31, 2022 at 06:23:49 348.42 KiB
sorry.html Apr 01, 2022 at 02:48:01 423 B
style.css Oct 28, 2020 at 04:16:12 110 B
testdata1.txt Jun 28, 2022 at 00:15:04 25.48 KiB
testdata2.txt Jun 28, 2022 at 00:15:04 25.48 KiB
testdata3.txt Jun 28, 2022 at 00:15:04 25.48 KiB
テスト3: source側bucketから追加したデータを削除
- テスト2の状態から、source側でtestdata2.txt, testdata3.txtを削除。
- ターゲット側からも削除されている。
$ ibmcloud cos objects --bucket mybucket106
OK
Found 7 objects in bucket 'mybucket106':
Name Last Modified Object Size
Veeam/ Jun 20, 2020 at 07:00:17 0 B
Veeam/Archive/ Jun 20, 2020 at 07:00:18 0 B
Veeam/Archive/backup/ Jun 20, 2020 at 07:00:19 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874 Mar 25, 2020 at 07:15:03 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/_SUCCESS Mar 25, 2020 at 07:15:08 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/part-00000-7b2aff6b-68d3-404e-9588-549b0f964acd-c000-attempt_20200325071505_0005_m_000000_0.csv Mar 25, 2020 at 07:15:06 30.84 KiB
testdata1.txt Jun 28, 2022 at 00:15:04 25.48 KiB
$ ibmcloud cos objects --bucket mybucket102
OK
Found 9 objects in bucket 'mybucket102':
Name Last Modified Object Size
404_not_found.png Apr 01, 2022 at 00:15:11 408.46 KiB
error.html Oct 28, 2020 at 04:32:32 195 B
favicon.ico Oct 28, 2020 at 04:21:36 63.71 KiB
index.html Mar 31, 2022 at 23:31:10 284 B
ninja.jpg Oct 28, 2020 at 04:16:09 23.67 KiB
ojigi_animal_neko.png Mar 31, 2022 at 06:23:49 348.42 KiB
sorry.html Apr 01, 2022 at 02:48:01 423 B
style.css Oct 28, 2020 at 04:16:12 110 B
testdata1.txt Jun 28, 2022 at 00:15:04 25.48 KiB
念の為、この状態でバージョン情報も表示してみると、(実はこのテスト前に事前にファイルを作ったり消したりとかしてしまっていたのだが、)そういう過去のバージョン情報も含めて同期されていることがわかる。
$ ibmcloud cos object-versions --bucket mybucket106 --prefix testdata
OK
Found 7 object versions in bucket 'mybucket106':
Name Version ID Last Modified Object Size Is Latest
testdata1.txt 00000181-a7a9-622f-e125-0c27fec420bf Jun 28, 2022 at 00:15:04 25.48 KiB true
testdata1.txt 00000181-a7a4-c9a4-fc5d-bf8c9d7bb5f8 Jun 28, 2022 at 00:10:03 25.48 KiB false
testdata1.txt 00000181-a7a3-862f-3e9c-f630c579b6e4 Jun 28, 2022 at 00:08:40 25.48 KiB false
testdata1.txt 00000181-a79b-439c-2324-e31d2dc1e122 Jun 27, 2022 at 23:59:39 25.48 KiB false
testdata2.txt 00000181-a7a9-6169-31e2-3093ff6e995e Jun 28, 2022 at 00:15:04 25.48 KiB false
testdata2.txt 00000181-a7a5-6023-5b68-8e698bb184b2 Jun 28, 2022 at 00:10:42 25.48 KiB false
testdata3.txt 00000181-a7a9-5f42-ad84-21e58622645a Jun 28, 2022 at 00:15:04 25.48 KiB false
Found 7 delete markers in bucket 'mybucket106':
Name Version ID Last Modified Is Latest
testdata1.txt 00000181-a7a5-ff35-0db3-52d42d20915f Jun 28, 2022 at 00:11:22 false
testdata1.txt 00000181-a7a4-73bd-9fd9-6879565c66a7 Jun 28, 2022 at 00:09:41 false
testdata1.txt 00000181-a79e-bd55-7a39-cf4efd178446 Jun 28, 2022 at 00:03:27 false
testdata1.txt 00000181-a79b-92bf-49d6-b7b6ab05588f Jun 27, 2022 at 23:59:59 false
testdata2.txt 00000181-a7aa-830f-d84c-89f08e681827 Jun 28, 2022 at 00:16:18 true
testdata2.txt 00000181-a7a5-9870-8025-7e13d5d05ce4 Jun 28, 2022 at 00:10:56 false
testdata3.txt 00000181-a7aa-7549-8615-68094ade4f68 Jun 28, 2022 at 00:16:15 true
$ ibmcloud cos object-versions --bucket mybucket102 --prefix testdata
OK
Found 7 object versions in bucket 'mybucket102':
Name Version ID Last Modified Object Size Is Latest
testdata1.txt 00000181-a7a9-622f-e125-0c27fec420bf Jun 28, 2022 at 00:15:04 25.48 KiB true
testdata1.txt 00000181-a7a4-c9a4-fc5d-bf8c9d7bb5f8 Jun 28, 2022 at 00:10:03 25.48 KiB false
testdata1.txt 00000181-a7a3-862f-3e9c-f630c579b6e4 Jun 28, 2022 at 00:08:40 25.48 KiB false
testdata1.txt 00000181-a79b-439c-2324-e31d2dc1e122 Jun 27, 2022 at 23:59:39 25.48 KiB false
testdata2.txt 00000181-a7a9-6169-31e2-3093ff6e995e Jun 28, 2022 at 00:15:04 25.48 KiB false
testdata2.txt 00000181-a7a5-6023-5b68-8e698bb184b2 Jun 28, 2022 at 00:10:42 25.48 KiB false
testdata3.txt 00000181-a7a9-5f42-ad84-21e58622645a Jun 28, 2022 at 00:15:04 25.48 KiB false
Found 8 delete markers in bucket 'mybucket102':
Name Version ID Last Modified Is Latest
testdata1.txt 00000181-a7a5-ff35-0db3-52d42d20915f Jun 28, 2022 at 00:11:22 false
testdata1.txt 00000181-a7a4-73bd-9fd9-6879565c66a7 Jun 28, 2022 at 00:09:41 false
testdata1.txt 00000181-a79e-bd55-7a39-cf4efd178446 Jun 28, 2022 at 00:03:27 false
testdata1.txt 00000181-a79b-cd0c-870d-e7adf33f7882 Jun 28, 2022 at 00:00:14 false
testdata1.txt 00000181-a79b-92bf-49d6-b7b6ab05588f Jun 27, 2022 at 23:59:59 false
testdata2.txt 00000181-a7aa-830f-d84c-89f08e681827 Jun 28, 2022 at 00:16:18 true
testdata2.txt 00000181-a7a5-9870-8025-7e13d5d05ce4 Jun 28, 2022 at 00:10:56 false
testdata3.txt 00000181-a7aa-7549-8615-68094ade4f68 Jun 28, 2022 at 00:16:15 true
テスト4: さらにreplication先のbucketを増やししてみた
- テスト3の状態から、
mybucket106(jp-tok)
->mybucket102(jp-tok)
のレプリケーションルールだけでなく、mybucket106(jp-tok)
->mybucket103(us-south)
のレプリケーションルールも追加した。
- この状態で、新たにtestdata4.txt, testdata5.txtというデータをsource側に追加したが、既存のdestinationには同期されず、新規に作成したdestinationにしかデータは同期されていない。これは、新規に追加したbucketへのレプリケーションの方が優先度が高いためである。IBM Cloud docsには以下のような記載がある。
The priority indicates which rule has precedence whenever two or more replication rules conflict. Object storage will attempt to replicate objects according to all replication rules. However, if there are two or more rules with the same destination bucket, then objects will be replicated according to the rule with the highest priority. The higher the number, the higher the priority.
$ ibmcloud cos objects --bucket mybucket106
OK
Found 9 objects in bucket 'mybucket106':
Name Last Modified Object Size
Veeam/ Jun 20, 2020 at 07:00:17 0 B
Veeam/Archive/ Jun 20, 2020 at 07:00:18 0 B
Veeam/Archive/backup/ Jun 20, 2020 at 07:00:19 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874 Mar 25, 2020 at 07:15:03 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/_SUCCESS Mar 25, 2020 at 07:15:08 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/part-00000-7b2aff6b-68d3-404e-9588-549b0f964acd-c000-attempt_20200325071505_0005_m_000000_0.csv Mar 25, 2020 at 07:15:06 30.84 KiB
testdata1.txt Jun 28, 2022 at 00:15:04 25.48 KiB
testdata4.txt Jun 28, 2022 at 00:31:58 25.48 KiB
testdata5.txt Jun 28, 2022 at 00:34:43 25.48 KiB
$ ibmcloud cos objects --bucket mybucket102
OK
Found 9 objects in bucket 'mybucket102':
Name Last Modified Object Size
404_not_found.png Apr 01, 2022 at 00:15:11 408.46 KiB
error.html Oct 28, 2020 at 04:32:32 195 B
favicon.ico Oct 28, 2020 at 04:21:36 63.71 KiB
index.html Mar 31, 2022 at 23:31:10 284 B
ninja.jpg Oct 28, 2020 at 04:16:09 23.67 KiB
ojigi_animal_neko.png Mar 31, 2022 at 06:23:49 348.42 KiB
sorry.html Apr 01, 2022 at 02:48:01 423 B
style.css Oct 28, 2020 at 04:16:12 110 B
testdata1.txt Jun 28, 2022 at 00:15:04 25.48 KiB
$ ibmcloud target -r us-south
$ ibmcloud cos objects --bucket mybucket103
OK
Found 2 objects in bucket 'mybucket103':
Name Last Modified Object Size
testdata4.txt Jun 28, 2022 at 00:31:58 25.48 KiB
testdata5.txt Jun 28, 2022 at 00:34:43 25.48 KiB
テスト5: 2つルールを作成し、一方にフィルターを作成した
- テスト4の状態で、priorityの高いruleに
backup
というprefix filterを持つフィルターを作成した。 - これにより、フィルタールールに適合するobjectは
priority=1
のbucketにレプリケーションされ、それ以外のobjectはpriority=0
のbucketにレプリケーションされるはずである。 - source側bucketにtestdata6.txtと、backup/testdata7.txtというファイルを追加したところ。testdata6.txtはフィルタールールに適合しないため
priority=0
にレプリケーションされ、backup/testdata7.txtはフィルタールールに適合してpriority=1
のbucketにレプリケーションされた。
$ ibmcloud cos objects --bucket mybucket106
OK
Found 11 objects in bucket 'mybucket106':
Name Last Modified Object Size
Veeam/ Jun 20, 2020 at 07:00:17 0 B
Veeam/Archive/ Jun 20, 2020 at 07:00:18 0 B
Veeam/Archive/backup/ Jun 20, 2020 at 07:00:19 0 B
backup/testdata7.txt Jul 04, 2022 at 02:54:40 25.48 KiB
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874 Mar 25, 2020 at 07:15:03 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/_SUCCESS Mar 25, 2020 at 07:15:08 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/part-00000-7b2aff6b-68d3-404e-9588-549b0f964acd-c000-attempt_20200325071505_0005_m_000000_0.csv Mar 25, 2020 at 07:15:06 30.84 KiB
testdata1.txt Jun 28, 2022 at 00:15:04 25.48 KiB
testdata4.txt Jun 28, 2022 at 00:31:58 25.48 KiB
testdata5.txt Jun 28, 2022 at 00:34:43 25.48 KiB
testdata6.txt Jul 04, 2022 at 02:50:39 25.48 KiB
$ ibmcloud cos objects --bucket mybucket102
OK
Found 10 objects in bucket 'mybucket102':
Name Last Modified Object Size
404_not_found.png Apr 01, 2022 at 00:15:11 408.46 KiB
error.html Oct 28, 2020 at 04:32:32 195 B
favicon.ico Oct 28, 2020 at 04:21:36 63.71 KiB
index.html Mar 31, 2022 at 23:31:10 284 B
ninja.jpg Oct 28, 2020 at 04:16:09 23.67 KiB
ojigi_animal_neko.png Mar 31, 2022 at 06:23:49 348.42 KiB
sorry.html Apr 01, 2022 at 02:48:01 423 B
style.css Oct 28, 2020 at 04:16:12 110 B
testdata1.txt Jun 28, 2022 at 00:15:04 25.48 KiB
testdata6.txt Jul 04, 2022 at 02:50:39 25.48 KiB
$ ibmcloud cos objects --bucket mybucket103
OK
Found 3 objects in bucket 'mybucket103':
Name Last Modified Object Size
backup/testdata7.txt Jul 04, 2022 at 02:54:40 25.48 KiB
testdata4.txt Jun 28, 2022 at 00:31:58 25.48 KiB
testdata5.txt Jun 28, 2022 at 00:34:43 25.48 KiB
テスト6: レプリケーションを数珠繋ぎにする。
既存の
- mybucket106(jp-tok) -> mybucket102(jp-tok)
- mybucket106(jp-tok) -> mybucket103(us-south)
に加えて、
- mybucket102(jp-tok) -> mybucket103(us-south)
のルールも追記して、mybucket106(jp-tok) -> mybucket102(jp-tok) -> mybucket103(us-south)という数珠繋ぎの構成にしてみた。
しかし、testdata8.txtというデータをsource側に追加したが、1つ目のbucket(mybucket102
)まではレプリケーションされたが、その後続のbucket(mybucket106
)にはレプリケーションされなかった(現時点ではそういう仕様とのこと)。
$ ibmcloud cos objects --bucket mybucket106
OK
Found 12 objects in bucket 'mybucket106':
Name Last Modified Object Size
Veeam/ Jun 20, 2020 at 07:00:17 0 B
Veeam/Archive/ Jun 20, 2020 at 07:00:18 0 B
Veeam/Archive/backup/ Jun 20, 2020 at 07:00:19 0 B
backup/testdata7.txt Jul 04, 2022 at 02:54:40 25.48 KiB
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874 Mar 25, 2020 at 07:15:03 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/_SUCCESS Mar 25, 2020 at 07:15:08 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/part-00000-7b2aff6b-68d3-404e-9588-549b0f964acd-c000-attempt_20200325071505_0005_m_000000_0.csv Mar 25, 2020 at 07:15:06 30.84 KiB
testdata1.txt Jun 28, 2022 at 00:15:04 25.48 KiB
testdata4.txt Jun 28, 2022 at 00:31:58 25.48 KiB
testdata5.txt Jun 28, 2022 at 00:34:43 25.48 KiB
testdata6.txt Jul 04, 2022 at 02:50:39 25.48 KiB
testdata8.txt Jul 04, 2022 at 03:04:29 25.48 KiB
$ ibmcloud cos objects --bucket mybucket102
OK
Found 11 objects in bucket 'mybucket102':
Name Last Modified Object Size
404_not_found.png Apr 01, 2022 at 00:15:11 408.46 KiB
error.html Oct 28, 2020 at 04:32:32 195 B
favicon.ico Oct 28, 2020 at 04:21:36 63.71 KiB
index.html Mar 31, 2022 at 23:31:10 284 B
ninja.jpg Oct 28, 2020 at 04:16:09 23.67 KiB
ojigi_animal_neko.png Mar 31, 2022 at 06:23:49 348.42 KiB
sorry.html Apr 01, 2022 at 02:48:01 423 B
style.css Oct 28, 2020 at 04:16:12 110 B
testdata1.txt Jun 28, 2022 at 00:15:04 25.48 KiB
testdata6.txt Jul 04, 2022 at 02:50:39 25.48 KiB
testdata8.txt Jul 04, 2022 at 03:04:29 25.48 KiB
$ ibmcloud target -r us-south
$ ibmcloud cos objects --bucket mybucket103
OK
Found 3 objects in bucket 'mybucket103':
Name Last Modified Object Size
backup/testdata7.txt Jul 04, 2022 at 02:54:40 25.48 KiB
testdata4.txt Jun 28, 2022 at 00:31:58 25.48 KiB
testdata5.txt Jun 28, 2022 at 00:34:43 25.48 KiB
テスト7: レプリケーションルール作成前から存在するデータを同期する。
今回はCentOS7のサーバーでCLIを実行したため、ここを参考にして、python3のvenvを構成する。
[root@syasudacentos7 ~]# source python368/bin/activate
(python368) [root@syasudacentos7 ~]# pip install --upgrade pip
(python368) [root@syasudacentos7 ~]# pip install ibm-cos-sdk
レプリケーションのためのサンプルコードは、IBM Cloud docsに存在する。
サンプルコードにミスがありました(修正依頼中)。docsのサンプルコードには、TaggingDirective='COPY'
の後ろに、,
が必要です。
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)
ICOSのinstance IDは、ibmcloud resource service-instances
で確認できます。
(python368) [root@syasudacentos7 ~]# export IBMCLOUD_API_KEY=xxxxxxx
(python368) [root@syasudacentos7 ~]# export SERVICE_INSTANCE_ID=xxxxxxx
(python368) [root@syasudacentos7 ~]# export US_GEO=https://s3.private.jp-tok.cloud-object-storage.appdomain.cloud
(python368) [root@syasudacentos7 ~]# export BUCKET=mybucket106
(python368) [root@syasudacentos7 ~]# python replicate-existing-objects.py
Priming existing objects in mybucket106 for replication...
* Copying Veeam/ in place...
Success!
* Copying Veeam/Archive/ in place...
Success!
* Copying Veeam/Archive/backup/ in place...
Success!
* Copying backup/testdata7.txt in place...
Success!
* Copying result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874 in place...
Success!
* Copying result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/_SUCCESS in place...
Success!
* Copying result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/part-00000-7b2aff6b-68d3-404e-9588-549b0f964acd-c000-attempt_20200325071505_0005_m_000000_0.csv in place...
Success!
* Copying testdata1.txt in place...
Success!
* Copying testdata4.txt in place...
Success!
* Copying testdata5.txt in place...
Success!
* Copying testdata6.txt in place...
Success!
* Copying testdata8.txt in place...
Success!
Existing objects in mybucket106 are now subject to replication rules.
(python368) [root@syasudacentos7 ~]# ibmcloud cos objects --bucket mybucket106
OK
Found 12 objects in bucket 'mybucket106':
Name Last Modified Object Size
Veeam/ Jul 19, 2022 at 23:17:28 0 B
Veeam/Archive/ Jul 19, 2022 at 23:17:28 0 B
Veeam/Archive/backup/ Jul 19, 2022 at 23:17:28 0 B
backup/testdata7.txt Jul 19, 2022 at 23:17:29 25.48 KiB
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874 Jul 19, 2022 at 23:17:29 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/_SUCCESS Jul 19, 2022 at 23:17:29 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/part-00000-7b2aff6b-68d3-404e-9588-549b0f964acd-c000-attempt_20200325071505_0005_m_000000_0.csv Jul 19, 2022 at 23:17:29 30.84 KiB
testdata1.txt Jul 19, 2022 at 23:17:29 25.48 KiB
testdata4.txt Jul 19, 2022 at 23:17:30 25.48 KiB
testdata5.txt Jul 19, 2022 at 23:17:30 25.48 KiB
testdata6.txt Jul 19, 2022 at 23:17:30 25.48 KiB
testdata8.txt
(python368) [root@syasudacentos7 ~]# ibmcloud cos objects --bucket mybucket102
OK
Found 20 objects in bucket 'mybucket102':
Name Last Modified Object Size
404_not_found.png Apr 01, 2022 at 00:15:11 408.46 KiB
Veeam/ Jul 19, 2022 at 23:17:28 0 B
Veeam/Archive/ Jul 19, 2022 at 23:17:28 0 B
Veeam/Archive/backup/ Jul 19, 2022 at 23:17:28 0 B
backup/testdata7.txt Jul 19, 2022 at 23:17:29 25.48 KiB
error.html Oct 28, 2020 at 04:32:32 195 B
favicon.ico Oct 28, 2020 at 04:21:36 63.71 KiB
index.html Mar 31, 2022 at 23:31:10 284 B
ninja.jpg Oct 28, 2020 at 04:16:09 23.67 KiB
ojigi_animal_neko.png Mar 31, 2022 at 06:23:49 348.42 KiB
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874 Jul 19, 2022 at 23:17:29 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/_SUCCESS Jul 19, 2022 at 23:17:29 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/part-00000-7b2aff6b-68d3-404e-9588-549b0f964acd-c000-attempt_20200325071505_0005_m_000000_0.csv Jul 19, 2022 at 23:17:29 30.84 KiB
sorry.html Apr 01, 2022 at 02:48:01 423 B
style.css Oct 28, 2020 at 04:16:12 110 B
testdata1.txt Jul 19, 2022 at 23:17:29 25.48 KiB
testdata4.txt Jul 19, 2022 at 23:17:30 25.48 KiB
testdata5.txt Jul 19, 2022 at 23:17:30 25.48 KiB
testdata6.txt Jul 19, 2022 at 23:17:30 25.48 KiB
testdata8.txt Jul 19, 2022 at 23:17:30 25.48 KiB
テスト8: 双方向レプリケーション
- テスト7の状態では、
mybucket106
->mybucket102
のレプリケーションルールが構成されているが、これに加えてmybucket102
->mybucket106
のレプリケーションルールも追加し、既存のobjectをテスト7と同様にして同期。 - 結果、全てのオブジェクトがどちらのbucketに対しても同期されたことが確認できた。
(python368) [root@syasudacentos7 ~]# ibmcloud cos objects --bucket mybucket106
OK
Found 20 objects in bucket 'mybucket106':
Name Last Modified Object Size
404_not_found.png Jul 21, 2022 at 00:02:51 408.46 KiB
Veeam/ Jul 21, 2022 at 00:02:51 0 B
Veeam/Archive/ Jul 21, 2022 at 00:02:52 0 B
Veeam/Archive/backup/ Jul 21, 2022 at 00:02:52 0 B
backup/testdata7.txt Jul 21, 2022 at 00:02:52 25.48 KiB
error.html Jul 21, 2022 at 00:02:53 195 B
favicon.ico Jul 21, 2022 at 00:02:53 63.71 KiB
index.html Jul 21, 2022 at 00:02:53 284 B
ninja.jpg Jul 21, 2022 at 00:02:53 23.67 KiB
ojigi_animal_neko.png Jul 21, 2022 at 00:02:54 348.42 KiB
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874 Jul 21, 2022 at 00:02:54 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/_SUCCESS Jul 21, 2022 at 00:02:54 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/part-00000-7b2aff6b-68d3-404e-9588-549b0f964acd-c000-attempt_20200325071505_0005_m_000000_0.csv Jul 21, 2022 at 00:02:54 30.84 KiB
sorry.html Jul 21, 2022 at 00:02:54 423 B
style.css Jul 21, 2022 at 00:02:54 110 B
testdata1.txt Jul 21, 2022 at 00:02:54 25.48 KiB
testdata4.txt Jul 21, 2022 at 00:02:55 25.48 KiB
testdata5.txt Jul 21, 2022 at 00:02:55 25.48 KiB
testdata6.txt Jul 21, 2022 at 00:02:55 25.48 KiB
testdata8.txt Jul 21, 2022 at 00:02:55 25.48 KiB
(python368) [root@syasudacentos7 ~]# ibmcloud cos objects --bucket mybucket102
OK
Found 20 objects in bucket 'mybucket102':
Name Last Modified Object Size
404_not_found.png Jul 21, 2022 at 00:02:51 408.46 KiB
Veeam/ Jul 21, 2022 at 00:02:51 0 B
Veeam/Archive/ Jul 21, 2022 at 00:02:52 0 B
Veeam/Archive/backup/ Jul 21, 2022 at 00:02:52 0 B
backup/testdata7.txt Jul 21, 2022 at 00:02:52 25.48 KiB
error.html Jul 21, 2022 at 00:02:53 195 B
favicon.ico Jul 21, 2022 at 00:02:53 63.71 KiB
index.html Jul 21, 2022 at 00:02:53 284 B
ninja.jpg Jul 21, 2022 at 00:02:53 23.67 KiB
ojigi_animal_neko.png Jul 21, 2022 at 00:02:54 348.42 KiB
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874 Jul 21, 2022 at 00:02:54 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/_SUCCESS Jul 21, 2022 at 00:02:54 0 B
result/jobid=ad8adbd5-bd6e-4c96-a954-efabfb0fa874/part-00000-7b2aff6b-68d3-404e-9588-549b0f964acd-c000-attempt_20200325071505_0005_m_000000_0.csv Jul 21, 2022 at 00:02:54 30.84 KiB
sorry.html Jul 21, 2022 at 00:02:54 423 B
style.css Jul 21, 2022 at 00:02:54 110 B
testdata1.txt Jul 21, 2022 at 00:02:54 25.48 KiB
testdata4.txt Jul 21, 2022 at 00:02:55 25.48 KiB
testdata5.txt Jul 21, 2022 at 00:02:55 25.48 KiB
testdata6.txt Jul 21, 2022 at 00:02:55 25.48 KiB
testdata8.txt Jul 21, 2022 at 00:02:55 25.48 KiB