IBM Cloud ShellでAWS CLIを使ってIBM Cloud Object Storageをアクセスしてみる

# 概要
IBM Cloud Shell上で、AWS CLIを使ってIBM Cloud Object Storageにアクセスする手順を記載します。

# 前提
IBM Cloud Object Storageのサービスインスタンスが作成されていること

# 手順概要
1. IBM Cloud Shellを起動
2. IBM Cloud Object Storageのバケットを作成
3. AWS CLIをIBM Cloud Shellにインストール
4. サービスキーの作成
5. AWS CLIからIBM Cloud Object Storageをアクセス

## 1. IBM Cloudシェルを起動
IBM Cloudのコンソールの右上にあるIBM Cloud Shellのアイコンをクリックして起動します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103795/fc730621-376a-dfb5-d526-ec0dff4e9ed4.png)

## 2. IBM Cloud Object Storageのバケットを作成
IBM Cloud CLIを使ってバケットを作成します。

```bash:サービスインスタンスをリストします
TSOTA@cloudshell:~$ ibmcloud resource service-instances
Retrieving instances with type service_instance in all resource groups in all locations under account ...
OK
Name                              Location   State    Type   
・・・  
Cloud Object Storage-lo           global     active   service_instance   
・・・
```
```bash:サービスインスタンスの詳細を確認します（CRNを確認）
TSOTA@cloudshell:~$ ibmcloud resource service-instance "Cloud Object Storage-lo"
Retrieving service instance Cloud Object Storage-lo in all resource groups under account ...
OK
                          
Name:                  Cloud Object Storage-lo   
ID:                    crn:v1:bluemix:public:cloud-object-storage:global:a/xxx:xxx::   
GUID:                  xxxxx   
Location:              global   
Service Name:          cloud-object-storage   
Service Plan Name:     lite   
Resource Group Name:   Default   
State:                 active   
Type:                  service_instance   
Sub Type:                 
Created at:            2020-10-13T07:08:17Z   
Created by:            xxxxxxx   
Updated at:            2020-10-13T07:08:17Z   
Last Operation:                        
                       Status    create succeeded      
                       Message   Completed create instance operation      
```
```bash:CRNを設定                          
TSOTA@cloudshell:~$ ibmcloud cos config crn
Resource Instance ID CRN:  ()> crn:v1:bluemix:public:cloud-object-storage:global:a/xxx:xxx:: 
Saving new Service Instance ID...
OK
Successfully stored your service instance ID.
```
```bash:バケットを作成（CrossRegionのバケットを作成します）
TSOTA@cloudshell:~$ ibmcloud cos bucket-create --bucket tsota-bucket --region ap
OK
Details about bucket tsota-bucket:
Region: ap
Class: Standard
TSOTA@cloudshell:~$ ibmcloud cos buckets-extended
OK
Found 7 buckets:

Name                                              Location Constraint   Creation Date   
tsota-bucket                                      ap-standard           Dec 08, 2020 at 15:44:36   
```

## 3. AWS CLIをIBM Cloud Shellにインストール

参考：Linux で AWS CLI バージョン 2 をインストールする
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-linux.html#cliv2-linux-install


```bash:AWS_CLIをインストール（sudoを実行できないのでホームディレクトリの下に導入します）
TSOTA@cloudshell:~$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
TSOTA@cloudshell:~$ unzip awscliv2.zip
TSOTA@cloudshell:~$ ./aws/install -i ~/aws-cli -b ~/bin
You can now run: /home/TSOTA/bin/aws --version
TSOTA@cloudshell:~$ /home/TSOTA/bin/aws --version
aws-cli/2.1.7 Python/3.7.3 Linux/5.9.8 exe/x86_64.ubuntu.18 prompt/off
```

## 4. サービスキーの作成
AWS CLIからアクセスするためのサービスキーを作成します。
HMAC資格情報を付けて作成します。
参考： https://cloud.ibm.com/docs/cloud-object-storage/hmac?topic=cloud-object-storage-hmac

```bash:サービスキーを作成します
TSOTA@cloudshell:~$ ibmcloud resource service-key-create tsota-test-key Manager --instance-name "Cloud Object Storage-lo" --parameters '{"HMAC":true}'
Creating service key of service instance Cloud Object Storage-lo under account ...
OK
Service key crn:v1:bluemix:public:cloud-object-storage:global:a/xxx:xxx:resource-key:xxx was created.
                  
Name:          tsota-test-key   
ID:            crn:v1:bluemix:public:cloud-object-storage:global:a/xxx:xxx:resource-key:xxx   
Created At:    Tue Dec  8 16:13:52 UTC 2020   
State:         active   
Credentials:                                   
               apikey:                   xxx     
               cos_hmac_keys:                                          
                                         access_key_id:       xxx        
                                         secret_access_key:   xxx         
                                               
               endpoints:                https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints      
               iam_apikey_description:   Auto-generated for key xxx      
               iam_apikey_name:          tsota-test-key      
               iam_role_crn:             crn:v1:bluemix:public:iam::::serviceRole:Manager      
               iam_serviceid_crn:        crn:v1:bluemix:public:iam-identity::a/xxx::serviceid:ServiceId-xxx      
               resource_instance_id:     crn:v1:bluemix:public:cloud-object-storage:global:a/xxx:xxx::      
```

## 5. AWS CLIからIBM Cloud Object Storageをアクセス
前ステップで作成したアクセスキーをセットします。

```bash:アクセスキーを設定
TSOTA@cloudshell:~$ bin/aws configure
AWS Access Key ID [None]: xxx
AWS Secret Access Key [None]: xxx
Default region name [None]: ap
Default output format [None]: json
TSOTA@cloudshell:~$ 
```

```bash:バケットをリスト
TSOTA@cloudshell:~$ bin/aws --endpoint-url https://s3.ap.cloud-object-storage.appdomain.cloud s3 ls
2020-12-08 15:44:36 tsota-bucket
```
```bash:バケットの中を確認
TSOTA@cloudshell:~$ bin/aws --endpoint-url https://s3.ap.cloud-object-storage.appdomain.cloud s3 ls tsota-bucket/
TSOTA@cloudshell:~$
```
```bash:ファイルをアップロード
TSOTA@cloudshell:~$ echo test > test.txt
TSOTA@cloudshell:~$ bin/aws --endpoint-url https://s3.ap.cloud-object-storage.appdomain.cloud s3 cp test.txt s3://tsota-bucket
upload: ./test.txt to s3://tsota-bucket/test.txt    
```
```bash:バケットの中を確認          
TSOTA@cloudshell:~$ bin/aws --endpoint-url https://s3.ap.cloud-object-storage.appdomain.cloud s3 ls tsota-bucket/
2020-12-08 16:18:55          5 test.txt
TSOTA@cloudshell:~$ 
```