IBM Cloud Object Storage(ICOS)のアーカイブ機能について

# はじめに
IBM Cloudには安価で様々な種類のファイルを保存できるストレージとしてIBM Cloud Object Storage(ICOS)が利用できます。ICOSはデータの取り出しの頻度に応じてSmart・Standard・Vault・Cold Vaultの４つのプランを選択可能です。

![スクリーンショット 2024-01-22 9.11.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/8ecc9dca-5396-f9aa-f1b2-4928c78a8ee6.png)


さらに、セキュリティ要件などで保管しなければならないが、ほとんど利用することがないようなデータに対してはデータのアーカイブ化を実施することでさらに安価にストレージを利用することが可能です。金額感としては、1TBのデータ1ヶ月を200円程度、1PBなら20万円程度で利用可能です。
また、アーカイブ機能を利用する場合はアーカイブしたデータは別のオフラインストレージに移動するため、再度データを読み込みたい場合はデータをリトリーブする必要があります。

![スクリーンショット 2024-01-22 9.39.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/825bcdb8-f8b5-01f5-6543-ea3746d3a4a1.png)



本記事ではICOSでデータのアーカイブする方法とアーカイブしたデータを取り出す方法について記載します。
アーカイブ方法の手順は[Docs:コールド・データのアーカイブとアクセス](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-archive&locale=ja)を参考にしています。

# ICOSのアーカイブ機能について
ICOS内に保存しているデータは事前にアーカイブ設定で日数を指定することでオフラインの安価(最も安いCold Vaultプランの1/5程度)なストレージへとアーカイブすることができます。
アーカイブでは保管と復元で課金が発生します。詳細な価格設定は以下を参照ください。
https://cloud.ibm.com/objectstorage/create#pricing

アーカイブは通常のアーカイブと高速アーカイブの２種類が存在し、通常のアーカイブはデータの復元に最長で12時間かかりますが、高速アーカイブを使用すると2時間以内に復元が可能です。
復元を実施する場合はアーカイブ先のオフラインストレージからアーカイブ元のストレージにアーカイブデータのコピーが一時的に作成されます。指定日数後、アーカイブデータのコピーは削除されます。（アーカイブデータはそのまま残ります)

また、アーカイブ機能は機能設定後に新しく保存したデータにのみ適用されるため、アーカイブ設定前に保管されているファイルについてはアーカイブ適用外となります。適用させたい場合はアーカイブ設定をしたバケットにデータを移行する必要があります。


# 実装手順
事前にICOSは作成しておきます。ICOSの作成は[Docs : プランの選択とインスタンスの作成](https://cloud.ibm.com/docs/cloud-object-storage/basics?topic=cloud-object-storage-provision)を参考にしてください。
実施する作業は以下の通りです。
1. アーカイブルールの作成
1. アーカイブの実施
1. データの復元

![スクリーンショット_2024-01-22_9_37_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/6d09ad3b-d806-6c6a-84da-874ce454e348.png)



## 1. アーカイブルールの作成
事前に作成したICOSにバケットを作成します。
ICOSのインスタンスから**バケットの作成**を選択します。
![スクリーンショット_2024-01-18_13_35_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/35e87c78-4917-f0b2-bfc0-33b53fce0f5a.png)

バケットは**Create a Custom Bucket**を選択します。
![スクリーンショット_2024-01-18_13_35_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/c92acd7f-7933-859e-b738-271613552e5d.png)

バケットに任意の名前をつけ拡張機能の**アーカイブ・ルール**の追加を選択します。
![スクリーンショット_2024-01-18_13_36_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/8b3fb7d7-312d-29ab-6398-5d41bb721f5b.png)

アーカイブルールではバケットに保存したデータがどの期間でアーカイブ化するかの日数設定が可能です。0日と指定することで保存したデータの即時アーカイブも可能です。本記事では0日で指定して進みます。
![スクリーンショット_2024-01-18_13_39_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/19d1d8c2-33ac-0120-bcfa-a09834d35838.png)

アーカイブの設定ができたら下の**バケットの作成**ボタンを押してバケットを作成が完了です。
![スクリーンショット_2024-01-19_13_26_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/2aa72fc6-03db-d4a7-7258-5bba5686d5b1.png)



## 2. アーカイブの実施
アーカイブルールを作成したバケットに実際にデータを書き込み、アーカイブ化されることを確認します。
先ほど作成したバケットを開き、右上の**アップロード**を選択します。
![スクリーンショット_2024-01-19_13_21_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/2bae3e70-c025-d039-5bf6-bfe1fe86e76a.png)

**ファイルのアップロード**を選択し、適当なファイルをアップロードし、**アップロード**をクリックするとファイルが転送されてアップロードが完了します。
![スクリーンショット_2024-01-19_13_21_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/f90fde5c-df20-b49d-2654-e0fc0faa2662.png)

今回はアーカイブルールを0日としたため、アップロードしたファイルを確認するとアーカイブされていることが確認できます。
![スクリーンショット 2024-01-19 13.21.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/761c1a25-90f9-9d9e-cb2a-80a950bc3d6a.png)

## 3. データの復元
最後にアーカイブしたデータの復元を実施します。
アーカイブしたデータを選択すると、データの概要が表示されるので、右上の**ライフサイクル**→**オブジェクトの復元**を選択すると復元後のオブジェクト保存期間を入力できるので、任意の日数を入力し**保存**を選択します。
![スクリーンショット_2024-01-19_13_32_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/cf632f00-973d-714e-34a5-0df9a6d63a9b.png)

![スクリーンショット_2024-01-19_13_36_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/22d99a6f-a6d3-c6d7-470c-0c7ae93a5109.png)

保存後もう一度確認するとアーカイブルールの状態が**アーカイブ済み**から**復元中**に変化しており、復元の欄がオブジェクト復元処理中に変化していることが確認できます。この復元処理は最大で12時間で完了します。
![スクリーンショット 2024-01-19 13.38.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/2916fa5c-1029-2297-c052-0a3d53ca8b24.png)

復元完了後は以下のように状態が**復元済み**に変化しており、画面上部に**オブジェクトのダウンロード**ボタンが出現していることが確認できます。
![スクリーンショット 2024-01-19 13.41.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/43b5cc51-2345-612e-3ed2-dc0e6a50734f.png)

この復元したアーカイブのコピーデータは先ほど指定した1日間はバケット上に存在し、1日後に自動で削除されます。(アーカイブデータは残ります)

# アーカイブされたデータのAPIについて
ICOSではs3と互換性のあるAPIが使用できます。
実際にAPIでデータを取得した例を紹介します。事前準備として以下を参考にIAMからapikeyの作成とICOSバケットのリージョンのendpointを確認しておいてください。

https://qiita.com/nishikyon/items/fa8b951267efbe911fe7

[Docs : エンドポイントおよびストレージ・ロケーション](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-endpoints&locale=ja)

対象のICOSバケット内に以下のデータが入っているバケット内のリストを実施します。
- test1:アーカイブしていないデータ
- test2:高速アーカイブ済みデータ
- test3:高速アーカイブ復元中データ
まずはAPIアクセスのためのBearer tokenを取得します。apikeyの項目は自身で作成したapikeyを入力してください。
```:Bearer tokenを取得するコマンド
$ curl -k -X POST --header "Content-Type: application/x-www-form-urlencoded" --header "Accept: application/json" --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" --data-urlencode "apikey=(自分で作成したapikey)" "https://iam.cloud.ibm.com/identity/token"
{"access_token":"(bearer token)","refresh_token":"not_supported","ims_user_id":9985776,"token_type":"Bearer","expires_in":3600,"expiration":1706075059,"scope":"ibm openid"}
```
access_tokenを使用してバケット内のデータをリスト化します。endpoint、bucket-name、tokenは適切なものを代入してください。
```:バケット内のデータのリスト
$ curl "https://(endpoint)/(bucket-name)"
 -H "Authorization: bearer (token)"
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Name>(bucket-name)
 ...
<Contents><Key>test1.png</Key><LastModified>2024-01-24T05:08:22.881Z</LastModified>...<StorageClass>STANDARD</StorageClass></Contents>
<Contents><Key>test2.png</Key><LastModified>2024-01-24T05:10:20.423Z</LastModified>...<StorageClass>ACCELERATED</StorageClass></Contents>
<Contents><Key>test3.png</Key><LastModified>2024-01-24T05:10:44.672Z</LastModified>...<StorageClass>ACCELERATED</StorageClass></Contents></ListBucketResult>%
```
APIヘッダーの```StorageClass```を確認するとアーカイブしていないデータは```STANDARD```となっているのに対し、アーカイブ済み・復元中データは```ACCELERATED```となっていることが確認できます。
より詳細なICOSのAPIについては[Docs : cURL の使用](https://cloud.ibm.com/docs/cloud-object-storage/cli?topic=cloud-object-storage-curl)をご確認ください。