AWS CLIを使ったAmazon S3とONTAP S3の操作

# 本記事の要約
- AWS CLIを使う際にプロファイルを使い分けることでAmazon S3およびONTAP S3の操作が可能

- Amazon S3の操作時は、AWS IAM Roles Anywhereで取得したクレデンシャル情報を利用

- ONATP S3の操作時は、NetApp ONTAPから払い出したクレデンシャル情報を利用


# そもそもONTAP S3とは
- ONTAP S3とはONTAP 9.8から正式リリースされたオブジェクトストレージ機能です。（ONTAP 9.7の段階でTech Previewとして利用可能）

- ONTAP S3で払い出したS3 Bucketに対しS3クライアントアプリケーションによるオブジェクトの格納などの操作が可能です。また、ONTAPが提供するデータ階層化機能“FabricPool”のCold Data階層化先として利用することも可能です。
https://docs.netapp.com/ja-jp/ontap/object-storage-management/index.html

- S3クライアントアプリケーションに対応しているということなので、今回はAWS CLIを使って操作してみます。

# やってみた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2806894/abe833ff-1769-f4a3-9d9c-f454ac253d53.png)

- IAM Roles Anywhereが設定済みの環境を利用します。
IAM Roles Anywhereの設定方法については、以下ブログをご参照ください。
https://qiita.com/Yoshinori_Tsukioka/items/22b9f704f4bcd31621cf

- AWS CLIをインストールし、Amazon S3とONTAP S3の操作が可能であることを確認します。
この際にAmazon S3操作時はIAM Roles Anywhereで取得したクレデンシャル情報を使い、
ONTAP S3操作時はONTAPから払い出したクレデンシャル情報を利用しますので、
AWS CLIのConfig設定を少し工夫します。

# AWS CLIのインストール
- AWS公式サイトを参考にAWS CLIをローカル環境にインストールします。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

- AWS CLIが正常にインストールされたことを確認します。
```bash
$ aws --version
　　aws-cli/2.13.11 Python/3.11.4 Linux/4.18.0-348.7.1.el8_5.x86_64 exe/x86_64.centos.8 prompt/off
```

- 続いて、IAM Roles Anywhereでクレデンシャル情報を取得できる設定を投入します。
参考となるAWS公式情報は、以下になります。
https://aws.amazon.com/jp/blogs/news/extend-aws-iam-roles-to-workloads-outside-of-aws-with-iam-roles-anywhere/

```text
~/.aws/configを設定

[default]
 credential_process = ./aws_signing_helper credential-process
   --certificate ./cert.pem
   --private-key ./private-key.pem
 　--trust-anchor-arn “トラストアンカーのARN”
   --profile-arn “信頼プロファイルのARN”
   --role-arn “IAM RoleのARN”
```

# Amazon S3の操作
- Amazon S3のバケット内に格納したデータを確認します。
```bash
$ aws s3 ls testbucket001 --recursive
2023-07-10 16:37:48          0 test/
2023-07-10 17:18:25 1073741824 test/test.file
2023-07-10 17:24:15 1073741824 test/test_2.file
```
　正常に動作したようです。

- 続いて、Amazon S3からローカルにデータをダウンロードしておきます。

```bash
$ aws s3 cp s3://testbucket001/ /opt/jupyter/test --recursive
download: s3://testbucket001/test/test_2.file to ../test/test/test_2.file
download: s3://testbucket001/test/test.file to ../test/test/test.file
```

- ダウンロードしたデータを確認します。
```bash
$ ls
test.file test_2.file
```

以上でIAM Roles Anywhere経由で取得したクレデンシャル情報をもとにAmazon S3の操作が可能であることが確認できました。

# ONTAP S3の操作
- ONTAP S3を操作するためのクレデンシャル情報を~/.aws/configに設定します。
```text
~/.aws/configを設定

[services ontaps3]
s3 = 
 endpoint_url = https://10.128.223.171/　#ONTAP S3のURL


[profile netapp]
aws_access_key_id = “ONTAP S3接続ユーザーのアクセスキー”
aws_secret_access_key = “ONTAP S3接続ユーザーのシークレットキー”
services = ontaps3
```

:::note
servicesセクションでs3コマンドを実行時のエンドポイントを指定しています。
今回はONTAP S3のURLを指定し、更にプロファイル“netapp”で実行した際に、servicesセクションで宣言されたエンドポイントを使うといった具合です。

servicesセクションの定義については、公式マニュアルをご参照ください。
https://docs.aws.amazon.com/sdkref/latest/guide/feature-ss-endpoints.html
:::

- ONATP S3内のバケットを検索してみます。
```bash
$ aws s3 ls --profile netapp
2023-08-29 12:55:31 test
```

　テスト用に準備していたバケットが確認できました。
　これで、aws s3コマンド実行時の--profileオプションでAmazon S3を使うか、
　ONTAP S3を使うかの使い分けができる環境が整いました。

:::note
--profileオプション追加することで、~/.aws/config内の[profile netapp]を参照してコマンドが実行されます。
つまり、今回の場合は以下の使い分けが可能になります。

**--profileオプションの指定なし：Amazon S3への接続**
**--profile netappの指定：ONATP S3への接続**
:::

- 最後に先ほどAmazon S3からローカルにダウンロードしたデータをONATP S3にアップロードしてみます。

```bash
aws s3 cp --profile netapp /opt/jupyter/test/test/ s3://test --recursive
upload: ../test/test/test.file to s3://test/test.file              
upload: ../test/test/test_2.file to s3://test/test_2.file       
 
$ aws s3 ls --profile netapp test/
2023-09-01 15:49:51 1073741824 test.file
2023-09-01 15:49:59 1073741824 test_2.file
```

　無事に完了しました。

# まとめ
今回は、AWS CLIを使ったAmazon S3とONTAP S3の操作を検証してみました。
プロファイルを使い分けることで、AWS CLIを使ったAmazon S3とONTAP S3間のデータ受け渡しが可能であるという内容をお届けできたかと思います。

この記事が少しでも参考になれば、幸いです。

# 主な参照元
- https://docs.netapp.com/ja-jp/ontap/object-storage-management/index.html
- https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
- https://docs.aws.amazon.com/sdkref/latest/guide/feature-ss-endpoints.html