IBM Cloud Object Storage(ICOS)にCLI(ibmcloudコマンド)を用いてファイルアップロードする

ibmcloudコマンドでIBM Cloud Object Storage(ICOS)にファイルをアップロードする方法です。
ibmcloudコマンドの概要、セットアップについては下記を参照下さい。
参考リソース：[これからIBM Cloud CLIをインストールする方へ](https://qiita.com/ayatokura/items/013bdc614a1fa30a0cc0)

# 使用した環境
* macOS Mojave 10.14.6
* ibmcloud CLI

```
$ ibmcloud --version
ibmcloud version 0.22.1+66bb68d-2020-02-28T07:50:09+00:00
```

# ログイン（ワンタイムパスワード）
セットアップの参照リソース内でログイン方法までレクチャーされているかと思いますが、ここではおまけでワンタイムパスワードでのログイン方法をお伝えしておきます。

[IBM Cloud コンソール（Web）](https://cloud.ibm.com/)にログインして、右上にあるユーザー情報のアイコンをクリックしてみて下さい。
下記のように表示されるはずです。
![user_account.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187099/a7608f11-e3e1-eb76-fd1d-344a004230a2.png)

「CLIとAPIにログイン」というリンクがあるかと思いますので、それをクリックすると、
![one_time_passcode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187099/60d7baf6-84d6-cbc0-e9f8-ef78a38e8d9a.png)
という画面が出てきますので「IBM Cloud CLI」の部分をコピーして頂いて、お使いのターミナルソフトの入力欄に貼り付けて、Enterキーを押下します。

```
$ ibmcloud login -a https://cloud.ibm.com -u passcode -p one-time-pass
API エンドポイント: https://cloud.ibm.com
認証中です...
OK

ターゲットのアカウント TAKANOBU KAWAGUCHI's Account (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)

地域を選択します (または Enter キーを押してスキップします):
1. au-syd
2. in-che
3. jp-osa
4. jp-tok
5. kr-seo
6. eu-de
7. eu-gb
8. us-south
9. us-south-test
10. us-east
数値を入力してください> 4
ターゲットの地域 jp-tok

                            
API エンドポイント:      https://cloud.ibm.com   
地域:                    jp-tok   
ユーザー:                your@userid.org   
アカウント:              TAKANOBU KAWAGUCHI's Account (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)   
リソース・グループ:      リソース・グループがターゲットになっていません。'ibmcloud target -g RESOURCE_GROUP' を使用してください   
CF API エンドポイント:      
組織:                       
スペース:                   

ヒント: Cloud Foundry アプリケーションおよびサービスを管理している場合
- 'ibmcloud target --cf' を使用して Cloud Foundry 組織/スペースを対話式にターゲットにするか、'ibmcloud target --cf-api ENDPOINT -o ORG -s SPACE' を使用して組織/スペースをターゲットにします。
- 現行の IBM Cloud CLI コンテキストを使用して Cloud Foundry CLI を実行する場合は、'ibmcloud cf' を使用します。
```

# ICOSの情報確認
IBM Cloud コンソール（Web）にログインしてICOSのサービス資格情報を確認します。
サービス資格情報はICOSに作成したバケットの資格情報の中にあります。
![service_info.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187099/e851c63d-46c2-e70c-1e11-cbddda4a7f13.png)

```
// バケットのリストを取得
// 例：ibmcloud cos list-buckets --ibm-service-instance-id <resource_instance_id>
$ ibmcloud cos list-buckets --ibm-service-instance-id xxxxxxxxxxxxxxx
OK
4 アカウントにバケットが見つかりました:

名前                                       作成日   
test-development                           Jan 14, 2020 at 03:53:38   
test-transfer                              Jan 23, 2020 at 04:13:16   
test-archive                               Jan 22, 2020 at 02:23:31   
test-bucket                                Feb 06, 2020 at 05:37:37   

$
// バケットの中身を確認
// 例：ibmcloud cos list-objects --bucket <bucket-name>
$ ibmcloud cos list-objects --bucket test-bucket
OK
見つかりました バケットに 1 個のオブジェクトがあります 'test-bucket':

名前       最終変更日時               オブジェクト・サイズ
test.txt   Feb 28, 2020 at 02:27:12   14 B 
```

# ICOSにファイルをアップロード
以下のコマンドで対象のバケットにファイルをアップロードします。

```
// バケットにファイルをアップロード
// 例：ibmcloud cos put-object --bucket <bucket-name> --key <filename> --body <filefullpath>
$ ibmcloud cos put-object --bucket test-bucket --key test2.txt --body /tmp/test2.txt
OK
オブジェクト 'test2.txt' がバケット 'test-bucket' に正常にアップロードされました。
```

アップロードが正常に終わりましたので、念のために確認します。

```
// 正常にアップロードされたことを確認
$ ibmcloud cos list-objects --bucket test-bucket
OK
見つかりました 2 バケットにオブジェクトがあります 'test-bucket':

名前        最終変更日時               オブジェクト・サイズ
test.txt    Feb 28, 2020 at 02:27:12   14 B
test2.txt   Mar 01, 2020 at 21:21:20   17 B
```

test2.txtが正常にアップロードされていました。

# ICOSのファイルを削除
次にファイルの削除です。コマンドは以下の通りです。

```
// バケットの状況を確認
$ ibmcloud cos list-objects --bucket test-bucket
OK
見つかりました 2 バケットにオブジェクトがあります 'test-bucket':

名前        最終変更日時               オブジェクト・サイズ
test.txt    Feb 28, 2020 at 02:27:12   14 B
test2.txt   Mar 01, 2020 at 21:21:20   17 B


// ファイル：test2.txtの削除を実施
// 例：ibmcloud cos delete-object --bucket <bucket-name> --key <filename>
$ ibmcloud cos delete-object --bucket test-bucket --key test2.txt
警告: これによりオブジェクト 'test2.txt' がバケット 'test-bucket' から完全に削除されます。
続行してよろしいですか? [y/N]> y
OK
'test2.txt' のバケット 'test-bucket' からの削除が正常に実行されました。


// 削除された状況を確認
$ ibmcloud cos list-objects --bucket test-bucket
OK
見つかりました バケットに 1 個のオブジェクトがあります 'test-bucket':

名前       最終変更日時               オブジェクト・サイズ
test.txt   Feb 28, 2020 at 02:27:12   14 B
```

簡単にはなりますが、ibmcloudコマンドを使用したICOSの操作は以上です。
他のコマンドについては以下を参照下さい。
参考リソース：[Cloud Object Storage - IBM Cloud CLIの利用](https://cloud.ibm.com/docs/services/cloud-object-storage?topic=cloud-object-storage-ic-use-the-ibm-cli&locale=ja)

# 参考リンク
- [curlコマンドでIBM Cloud Object Storage(ICOS)にファイルをアップロードして公開する](https://qiita.com/y_tama/items/6e31922eb9504502d568)
- [IBM Cloud Object Storage(ICOS)に付属しているAsperaにSDK(Python版)を用いてファイルアップロードする](https://qiita.com/takanobu_kawaguchi/items/f174e393d36c2940db18)
- [IBM Cloud Object Storage(ICOS)に付属しているAsperaにSDK(Java版)を用いてファイルアップロードする](https://qiita.com/takanobu_kawaguchi/items/d95d9ca0fd1ab654ac00)