SNSとLambdaを使って自動的にAmazon FSx for NetApp ONTAPのSSDストレージ容量を増やす方法を試してみた

Amazon FSx for NetApp ONTAP(FSxN)のSSDストレージ容量を増やす方法は、マニュアル操作で行う場合は下記の図の様にAWS Console、NetApp BlueXPのGUI、CLIなど幾つかの方法があります。この記事ではAWS CloudFormationを使ってAmazon CloudWatchとSNSなどのサービスを利用してSSDストレージ容量の利用閾値を超えた時、自動的にアラームトリガーして容量を増やす方法を検証したいと思います。
* マニュアルで
 AWS Console：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/af774a51-a822-1707-6b55-952cf1992343.png)
NetApp BlueXPのGUI：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/54386a61-6d48-4ee0-236d-24878576e5a4.png)
CLI：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/9932259a-8795-c032-a66d-14f9b028f3ec.png)

# Keyword
* Amazon FSx for NetApp ONTAP(FSxN)
AmazonがフルマネージドのNetApp ONTAPファイルシステム上に構築された、信頼性が高く、スケーラブルで、パフォーマンスが高く、機能が豊富なファイルストレージを提供するサービスです。ONTAPファイルシステムの使い慣れた圧縮・重複排除・階層化機能、及びAPIオペレーションと、フルマネージドAWSのネイティブサービスを兼ね備えています。
* AWS CloudFormation とは
AWS リソースのモデル化およびセットアップに役立つサービスです。使用するすべてのAWSリソース (Amazon EC2 や Amazon CloudWatchなど) を記述するテンプレートを作成すれば、CloudFormation がこれらのリソースのプロビジョニングや設定を受け持ちます。AWSリソースを個別に作成、設計して、それぞれの依存関係を考える必要はありません。CloudFormation がこれを処理します。
* NetApp BlueXP
オンプレミス及びクラウド環境におけるストレージとデータサービスにおいて、シンプルなハイブリッドマルチクラウドを統合管理・運用する為のコントロールプレーンサービスです。

# 検証手順
1.FSxNを作成、CloudFormationにより自動拡張を設定
2.FSxNにmount、SSD利用閾値を超たデータを書き込む
3.SSD容量が自動的に増えたことを確認
構成イメージ：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/f5eb2e79-82cc-8b15-9aa6-af709064fb6d.png)

# 1.FSxNを作成、CloudFormationにより自動拡張を設定
* FSxNを作成
[こちら](https://qiita.com/heyanxia/items/9c62781fdc045a93b3b5#2fsxn%E3%81%A8cloud-sync%E3%82%92%E4%BD%9C%E6%88%90)を参考して、BlueXPのGUIからAWS上にConnector(EC2)を作って、AWS Consoleから `Quick create`でFSxNを作成します。検証の為、SSD storage capacityをMinimum`1024`GiB、`Storage effiency`を`Disabled`にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/1e309225-dd95-f4a3-a2e5-eed871883e28.png)
FSxNに200GBのボリューム`Storage efficiency`を`Disabled`、`Capacity pool tiering plicy`を`None`にして追加します。`Junction path`をメモして後程mountに使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/bea2d6de-5fb1-a3da-9222-3b038c9d5309.png)

* CloudFormationにより自動拡張を設定
[「FSxOntapDynamicStorageScaling.yaml」](https://solution-references.s3.amazonaws.com/fsx/DynamicScaling/FSxOntapDynamicStorageScaling.yaml)を手元にdownloadし、[こちら](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/increase-primary-storage.html)のガイドを確認した上で、CloudFormation stackを`With new resources(standard)`で作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/996c508d-8128-a3b6-a1f7-3bdc1759a8a1.png)
通常は利用閾値が80％と推奨されています。今回検証の為、利用閾値(Threshold)を`10%`、追加したい容量(Percentage Capacity increase)を`10%`に設定します。つまり、現在SSD容量(1024GiB、1TiB)の10%を超えると、自動的に`10%`の容量(0.1TiB)を増やします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/43974101-fd84-3404-0860-dcd3be02d031.png)
`Permissions`をdefaultのままにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/3dae2488-418e-8139-4777-0e516201f474.png)
Stackのデプロイが完了したのを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/dcc1c3bc-063f-61eb-bb82-e7f547e76b7d.png)
上記の設定がうまくできると、この様なメールのお知らせが設定したメールアドレスに届きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2991583/9ecf4b4f-48d1-f747-ffff-1c16ad35786d.png)
ここまでは、FSxNとCloudFormationにより自動拡張の設定が完了しました。

# 2.FSxNにmount、SSD利用閾値を超たデータを書き込む
上記の作成したBlueXP Conenctor(EC2)にSSHでログインして、FSxNのボリュームにmountして、利用閾値を超えたデータを書き込みます。
* Login:
```
 $　ssh -i YourKeyPair.pem ec2-user@ec2-13-231-43-224.ap-northeast-1.compute.amazonaws.com
```
* mount:
[こちら](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/attach-linux-client.html)を参考し、先程メモしたJonction Path`/nfs`を確認して`/fsx`ディレクトリを作って、mountします。
```
$ sudo su -
$ sudo mkdir /fsx
$ sudo mount -t nfs YOUR-svm-dns-name:/YOUR-volume-junction-path /fsx
$ df -h |grep fsx
172.31.4.181:/nfs  200G  200G  1.1M 100% /fsx
```
 `YOUR-svm-dns-name`、`YOUR-volume-junction-path`などの情報をAWS Consoleから確認して入れ替えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/02c5264f-c19d-d671-ea7c-b8b954507596.png)

うまくmountできない場合は[「Installing the NFS client」](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-old.html#mounting-fs-install-nfsclient)を参考してNFSをインストールします。
* データを書き込み
手元にある400MB`DemoFile`をEC2`/home/ec2-user`にコピーします。
```
$ scp -i YourKeyPair.pem DemoFile ec2-user@Your-ec2-13-231-43-224.ap-northeast-1.compute.amazonaws.com:~/.
```
EC2にログインして、DemoFileを`/fsx`に移動して500回に利用閾値を超えて`DemoFileCopyi`にコピーする形で書き込みます。
```
$ ssh -i YourKeyPair.pem ec2-user@ec2-13-231-43-224.ap-northeast-1.compute.amazonaws.com
$ sudo su -
$ mv /home/ec2-user/DemoFile /fsx
$ cd /fsx
$ for ((i=1; i<500;i++)); do cp DemoFile "DemoFileCopy"$i; done
```
書き込む途中で設定した閾値(threshold)の`10%`を超えると、アラームトリガーされてメールにお知らせが届きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2991583/bbbe7eb7-1c38-e960-dc6c-f9a7f6d7319c.png)
設定した`10%`容量を増やすメールも届きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/ab50ceb9-4bda-f80b-3334-3613d1a1e946.png)
BlueXPのGUIから、今容量を増やす処理が動いていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/b026e375-e4d9-0b69-5069-291092bf009c.png)
AWS アラームの方にも表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/b66b80b9-cbd8-5b80-a52f-2361e7234421.png)

# 3.SSD容量が自動的に増えたことを確認
* AWS Consoleから確認します。
Before:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/68a9a3d2-9f07-5af8-942d-4eabfc30ef63.png)
After:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/29c1ffe5-c929-7011-8388-a487eacff014.png)
* BlueXPのGUIから確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/f39fa6ba-6d9e-e3eb-d6bc-7dba811f9b41.png)


# 注意事項
* 1.一回SSD容量を増やすと、次に増やせるようになるまで６時間待つ必要があります。
* 2.[こちら](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/increase-primary-storage.html)のガイドにより、`Storage capacity increase only`増やすのみになるので、一旦容量を増やすと、減らすことはできません。
* 3.SSD容量を増やすと伴い、料金が発生します。今回利用したAWSサービス料金は[こちら](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/increase-primary-storage.html)のガイドにより、いくつか無料ですが、詳細を確認する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/9c2cf59f-c9df-106d-507f-33ff59468558.png)
* 4.上記のCloudFormation stackで作成したSNSやLambdaなどのリソースはそのstackをdeleteすると削除できます。

# まとめ
NetApp BlueXPのGUI、AWS Console又はCLIでのマニュアル操作の他に、AWS CloudFormationを使ってAmazon FSx for NetApp ONTAPPのSSDストレージ容量を自動的に増やすことができました。

# 参考リンク
1.[NetApp BlueXP: Create a Connector in AWS from BlueXP](https://docs.netapp.com/us-en/cloud-manager-setup-admin/task-creating-connectors-aws.html)
2.[Installing the NFS client](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-old.html#mounting-fs-install-nfsclient)
3.[To mount an ONTAP volume on a Linux client](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/attach-linux-client.html)
4.[AWS Documentation: Increasing SSD storage capacity dynamically](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/increase-primary-storage.html)
5.[AWS CloudFormation とは](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html)
6.[Create an Amazon FSx for ONTAP working environment](https://docs.netapp.com/us-en/cloud-manager-fsx-ontap/use/task-creating-fsx-working-environment.html)
7.[「2.FSxNとCloud Syncを作成」](https://qiita.com/heyanxia/items/9c62781fdc045a93b3b5#2fsxn%E3%81%A8cloud-sync%E3%82%92%E4%BD%9C%E6%88%90)
8.[FSx for NetApp ONTAP: Mounting on Linux clients](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/attach-linux-client.html)