IBM Cloud Object Storage (ICOS) の Smart Tier バケットにオブジェクトを移行する


# 概要
ICOS の新しいストレージクラス「Smart Tier」のバケットを作成し、他バケットから既存オブジェクトを移行します。

# Smart Tier とは

ひとことで言えば、「[Amazon S3 Intelligent-Tiering](https://aws.amazon.com/jp/s3/storage-classes/#Unknown_or_changing_access)」のようなものです。

ただし、ICOS の Smart Tier では以下のようなオートティアリングに関する管理コストはないので、料金体系もシンプルで使いやすくなっています。
>[Amazon S3 Simple Storage Service Pricing - Amazon Web Services](https://aws.amazon.com/s3/pricing/)
>
| S3 Intelligent - Tiering - Automatic cost savings for data with unknown or changing access patterns     |       Storage pricing|  
|:-----------------|------------------:|
| Monitoring and Automation, All Storage / Month |$0.0025 per 1,000 objects |

参考まとめ

>[IBM Cloud Object Storage の新しい料金プラン「Smart Tier」 | IBM ソリューション ブログ](https://www.ibm.com/blogs/solutions/jp-ja/icos-smart-tier/)
「Smart Tier（スマートティア）」は、データのアクセス・パターンが変更された際に、自動的にコストを最適化してくれる新しいストレージ・オプションです
コストを最適化するために自動的に３つの料金レートから最適なレートを適用する機能を備えた、シンプルな料金プランを提供します。Smart Tierを使用すると、ストレージのアクティビティーをモニターすることなく、ストレージ・クラス間でデータを移動することもなく、毎月のアクティビティーに基づいて最適なストレージ・コストが適用されます。

> **Smart Tierのハイライト**
>
>  - データ取得料金（Retrieval charges）:   無料
> - 追加料金:   無し   *コスト最適化の自動機能に追加料金はかかりません
> - 最小利用オブジェクトサイズ:   制限無し
> - 最小利用ストレージ期間:   制限無し
> - セキュリティー、耐久性、および可用性:   IBM Cloudは、最高レベルのセキュリティー、可用性、および耐久性を維持するために Smart Tier を設計しました。
> - UI、 API、 SDK、および CLI:   IBM Cloud UI、 API、 SDK、または CLI を使用して、Smart Tierにアクセスすることができます。
> - ロケーション:   Smart Tier は現在、すべての IBM Cloud Object Storage リージョンで使用可能です。引き続き、クロス・リージョンおよび単一のサイトでも利用可能となります。


# CLI プラグインインストール

```shell

ibmcloud plugin install cloud-object-storage
ibmcloud plugin show cloud-object-storage
```

# CLI 設定
インスタンス名から IAM 認証の設定をおこないます。

```shell

export INSTANCE_NAME="khayama-cos"
CRN=`ibmcloud resource service-instance $INSTANCE_NAME --output json | jq -r '.[] | .guid'`
ibmcloud cos config auth --method IAM
ibmcloud cos config crn --crn $CRN --force
```

# 変数設定
ターゲットとソースのバケット名を設定します。

```shell

export TARGET_REGION="jp-tok"
export SOURCE_REGION="us-south"

export TARGET_BUCKET="khayama-smart"
export SOURCE_BUCKET="khayama-standard"
```

# Smart Tier バケット作成
東京リージョンにリージョナルバケットを作成します。

```shell

ibmcloud cos create-bucket --bucket $TARGET_BUCKET --region $TARGET_REGION --class smart
# ibmcloud cos list-buckets
```

# オブジェクトコピー
ターゲットからソースのバケットに全てのオブジェクトをコピーします。
このコピーオブジェクト操作は、クラウドサーバーサイドでおこなわれ、 ICOS では
データ転送による課金などはありません。

>[Object operations - Copy an object | IBM Cloud](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-object-operations#object-operations-copy)
Note: Copying objects (even across locations) does not incur the public outbound bandwidth charges. All data remains inside the COS internal network.

```shell

KEYS=$(ibmcloud cos list-objects --bucket $SOURCE_BUCKET --region $SOURCE_REGION --json | jq -r '.Contents[] | .Key')

LEN=$(echo $KEYS | grep -c '')

ibmcloud cos config region --region $SOURCE_REGION

for LINE in `echo $KEYS`
do
  ibmcloud cos copy-object --bucket $TARGET_BUCKET --region $TARGET_REGION --key ${LINE} --copy-source $SOURCE_BUCKET/${LINE}
done
```

参考

 - Amazon S3 の場合は、データ転送による課金があるようです。

>[Copying Objects - Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectsExamples.html)
>Copying objects across locations incurs bandwidth charges

# オブジェクト削除
ソースのバケットから全てのオブジェクトを削除します。

```shell

KEYS=$(ibmcloud cos list-objects --bucket $SOURCE_BUCKET --region $SOURCE_REGION --json | jq -r '.Contents[] | .Key')

LEN=$(echo $KEYS | grep -c '')

for LINE in `echo $KEYS`
do
  ibmcloud cos delete-object --bucket $SOURCE_BUCKET --region $SOURCE_REGION --key ${LINE} --force 
done
```

# バケット削除
ソースのバケットを削除します。

```shell

ibmcloud cos delete-bucket --bucket $SOURCE_BUCKET --region $SOURCE_REGION --force
```

# 参考

- [Smart Tier pricing details](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-billing#smart-tier-pricing-details)
- [IBM Cloud Object Storage CLI](https://cloud.ibm.com/docs/cloud-object-storage-cli-plugin?topic=cloud-object-storage-cli-plugin-ic-cos-cli#)