はじめに
今回はIBM CloudのストレージソリューションであるIBM Cloud Object Storage(ICOS)にアップロードしたデータの有効期限や自動削除機能を設定する流れをまとめました。
本検証にはIBM Cloudアカウントのほか、以下の前提条件が満たしていることが前提となります。
今回記事の前提条件
- IBM Cloud CLIおよびICOS CLIがインストールされている
- ライフサイクル・ポリシーを追加または変更するための、IAMの「Writer」役割が付与されている
- 今回の検証にはMacbook(MacOS)を利用しています
ICOSのライフサイクル管理機能について
IBM Cloud Object Storageは単なるオブジェクトデータを保存するストレージ機能だけでなく、コールドデータのアーカイブ(自動で低コストオプションへ移行)、Expiration(期限切れルールによる古いデータの削除機能)、およびS3互換のObject Lock(不変保管)、Immutable Object Storage(保持ポリシーと権限)、オブジェクトのバージョン管理(オブジェクトのアーカイブ状態からの復元、削除)といったライフサイクル管理機能を備えており、バケット単位でルールを定義して保管コストの最適化とコンプライアンス保護を同時に実現できます。
今回はその中の一つである、Expiration(期限切れルールによる古いデータの削除機能)を設定してみたので、その流れを記載しています。
検証の流れ
ICOSインスタンスとバケットの作成
ICOS画面にてインスタンスの作成
をクリックします。
インフラの選択やインスタンス名、リソースグループなどの設定を行ってインスタンスを作成します。
ICOSのインスタンスが作成されたら、次は「バケット」を作成します。
「バケット」とは、インタンス内で実際ログデータが保管される論理的区域であり、名前通りデータを入れておく箱のようなものとなります。
Quick Startテンプレートを含め、複数のテンプレートが用意されていますが、今回はカスタムテンプレートにて作成しました。
バケット名や可用性の設定、リージョン、Storage Tierなどを設定し、バケットを作成します。こちらの設定はバケット作成後には変更ができませんのでご注意ください。なお、添付とは異なりますが、今回はmonn-test-1
という名のバケットを東京リージョンに作成しています。
IBM Cloudにログイン
まずはターミナルにて、IBM Cloudにログインします。
IBM Cloud右上のプロフィールアイコンをクリックし、CLIとAPIにログイン
をクリックしますと、以下のログインCLIが表示されます。IBM Cloud CLIをコピーしターミナルにコマンド入力することで簡単にログインできます。
また、必要に応じてリージョンを選択しますが、今回はインスタンス作成通り、東京(jp-tok)を選択します。
moonsy@moon ~ % ibmcloud login -a https://cloud.ibm.com -u passcode -p xxxxxxxxxx
API エンドポイント: https://cloud.ibm.com
認証中です...
OK
ターゲットのアカウント itz-cp-jpn (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx
リージョンを選択します (または Enter キーを押してスキップします):
1. au-syd
2. in-che
3. jp-osa
4. jp-tok
5. eu-de
6. eu-es
7. eu-gb
8. ca-tor
9. us-south
10. us-south-test
11. us-east
12. br-sao
数値を入力してください> 4
ターゲットのリージョン jp-tok
API エンドポイント: https://cloud.ibm.com
Region: jp-tok
ユーザー: S.Moon@ibm.com
アカウント: itz-cp-jpn (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) <-> xxxxxxx
リソース・グループ: リソース・グループがターゲットになっていません。'ibmcloud target -g RESOURCE_GROUP' を使用してください
冒頭の前提条件の通りICOSのCLIが必要となります。もしインストールできていない場合、以下のコマンドにてCLIプラグインをダウンロードしてください。
ibmcloud plugin install cloud-object-storage
moonsy@moon ~ % ibmcloud plugin install cloud-object-storage
リポジトリー 'IBM Cloud' から 'cloud-object-storage' を検索しています...
プラグイン 'cloud-object-storage[cos] 1.10.0' がリポジトリー 'IBM Cloud' 内で見つかりました
バイナリー・ファイルをダウンロードしようとしています...
19.92 MiB / 19.92 MiB [===========================================================================================================] 100.00% 0s
20887330 バイトがダウンロードされました
バイナリーをインストールしています...
OK
プラグイン 'cloud-object-storage 1.10.0' は /Users/moonsungyun/.bluemix/plugins/cloud-object-storage に正常にインストールされました。 'ibmcloud plugin show cloud-object-storage' を使用して詳細を表示してください。
次は、作成したICOSの操作対象としてCRNで紐づける必要がありますが、そのCRNを確認します。
作成したICOSインスタンスに入り、詳細
にて確認、コピーします。
ターミナルに戻り、以下のコマンドを入力します。その後、コピーしたCRNを入力します。
moonsy@moon ~ % ibmcloud cos config crn
moonsy@moon ~ % ibmcloud cos config crn
サービス・インスタンス ID/CRN: ()> moonsy@moon ~ % ibmcloud cos config crn
サービス・インスタンス ID/CRN: ()> xxx:xx:bluemix:public:cloud-object-storage:xxxxxx:a/xxxxxxxxxxxxxxxxxxxxx:xxxxxx-xxx-xxx-beea-1xxxxxxxxx:bucket:moon)> crn:v1:bluemix:public:cloud-object-storage:global:a/xxxxxxxxxxxxxxxxxxxxx:xxxxxx-xxx-xxx-beea-1xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:bucket:moon-test-1
新しいサービス・インスタンス ID/CRN を保存しています...
OK
サービス・インスタンス ID/CRN を正常に保存しました。
CRN設定が完了したら、以下のコマンドを入力して適用を確認します。
ibmcloud cos config list
COS API Key: <your-api-key>
xxx:xx:bluemix:public:cloud-object-storage:xxxxxx:a/xxxxxxxxxxxxxxxxxxxxx:xxxxxx-xxx-xxx-beea-1xxxxxxxxx:bucket:moon)> crn:v1:bluemix:public:cloud-object-storage:global:a/xxxxxxxxxxxxxxxxxxxxx:xxxxxx-xxx-xxx-beea-1xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:bucket:moon-test-1
Region: jp-tok
CRNを指定する際にはバケットの固有CRNではなく、ICOSのインスタンスCRNを入力する必要があります。
ダミーファイルの作成
次はICOSにアップロードして設定により削除するためのダミーファイルを作成します。
以下のコマンドで簡単に作成することができます。今回はdummy-file.dat
というファイル名の10MBの小さいファイルを作成しました。
dd if=/dev/urandom of=dummy-file.dat bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes transferred in 0.016992 secs (617099812 bytes/sec)
作成したファイルは以下のコマンドでICOSのバケットにアップロードします。
ibmcloud cos object-put \
--bucket moon-test-1 \
--key dummy-file/dummy-file.dat \
--body ./dummy-file.dat \
--region jp-tok
OK
オブジェクト 'dummy-file/dummy-file.dat' がバケット 'moon-test-1' に正常にアップロードされました
コンソールで確認したら、しっかりファイルが入っていることがわかります。
ルールの設定
次は有効期限設定や削除ルールを設定します。
ルールは複数の内容で設定することができますが、今回は特定の時間に設定の対象となるファイルを削除する前提にしています。
ルールを適用するために、bucket-lifecycle-configuration-put
コマンドを使って設定を行います。
上記の通り、今回は2025年9月20日の00:00に接頭部にdummy-file
が入っているファイルを全て削除する指定をしました。
--bucket
には作成したバケット名を、--region
には作成したバケットのリージョンを、Filter
には削除する対象のキーワードとしてファイルの接頭部を、Expiration
には削除のバッチを与える日付を入力します。
moonsy@moon ~ % ibmcloud cos bucket-lifecycle-configuration-put \
--bucket moon-test-1 \
--region jp-tok \
--lifecycle-configuration '{
"Rules": [
{
"ID": "delete-on-a-date",
"Filter": { "Prefix": "dummy-file/" },
"Status": "Enabled",
"Expiration": { "Date": "2025-09-20T00:00:00.000Z" }
}
]
}'
OK
再度コンソールにてバケットを確認すると、ライフサイクル・ポリシー欄に削除ルールが適用されていることがわかります。
今回のように一定期間に削除したり、接頭部のフィルタリングにて削除するルールのほか、特定のタグキーが紐づいたデータのみ、一定容量以下のデータのみ、などのルール設定も可能ですので、必要に応じてIBM Cloud Docs各種ルールを適用してみてください。
結果確認
ルール適用後、約4日後にデータが削除されていたことがわかります。
繰り返しとなりますが、削除ルールは適用してから翌日のUTC00:00:00にバッチ処理が行われ、その後のタイミングで削除される仕様となっています。
IBM Cloud Docsにも有効期限ルールの変更が有効になるまでに最大 24 時間かかると想定しておいてください。
との記載がありますが、今回の検証には週末を挟んだためか、バッチ実行が予想よりは遅くなりました。
したがって、削除のタイミングは確約された基準ではないものとご理解ください。
また、今回の検証ではターミナルのコマンドにてルール設定していますが、以下のようにIBM Cloudコンソール上でも簡単に設定することができます。
もしスクリプト作成にて自動化を行うなどの使い方ではなく、単なるルール設定だけの場合にはコンソールでの設定が簡単かもしれないので、合わせて試してみてください。