[StorageGateway]明示的にキャッシュをクリアする機能等が追加されました

はじめに

こんにちは、岩城です。
StorageGatewayに機能アップデートがありましたのでレポートします。
AWS Storage Gateway Announces Increased Throughput and Adds New Caching Capability

3つのアップデート

  • パフォーマンスの向上
  • DNSおよびNTP設定の追加
  • ゲートウェイのキャッシュリフレッシュ機能の追加

ゲートウェイのパフォーマンス向上

AWSが推奨する構成を取ることで、各ゲートウェイ(ファイルゲートウェイ、ボリュームゲートウェイ、テープゲートウェイ)のパフォーマンスの最適化を図れます。

Performance

ファイルゲートウェイ

推奨設定 書き込みスループット(ファイルサイズ>6MB)
Root disk: 80 GB io1, 4,000 IOPS
Cache disk: 512 GiB EBS cache, io1, 1,500 provisioned IOPS
Minimum network performance: 1 Gbps
Amazon EC2 instance: c5.4xlarge
125 MiB/s
Storage Gateway Hardware Appliance
Minimum network performance: 5 Gbps
300 MiB/s
Root disk: 80 GB io1, 4,000 IOPS
Cache disk: Two 1.9 TiB NVME caches (ephemeral)
Minimum network performance: 5 Gbps
Amazon EC2 instance: i3.4xlarge (AWS Storage Gateway のローカルディスクの管理)
500 MiB/s

ボリュームゲートウェイ

  • 高性能ディスクを使用する
  • ゲートウェイホストにCPUリソースを追加する
  • 別の物理ディスクを使用するゲートウェイ仮想ディスクのバックアップ
  • ボリューム構成を変更する

テープゲートウェイ

  • テープドライブのブロックサイズを大きくする

DNSおよびNTP設定の追加

ファイルゲートウェイの独自のドメインネームサービス(DNS)サーバーとネットワークタイムプロトコル(NTP)サーバーを指定できるようになり、オンプレミスネットワークとセキュリティポリシーとの統合が簡単になりました。とWhat's newに記載ありましたが、コンソール上からは確認できませんでした。確認が取れ次第追記します。

ゲートウェイのキャッシュリフレッシュ機能の追加

私の推しはココです!  

以前、StorageGatewayを利用してインスタンスからS3バケットをNFSマウントするブログを書きました。 [Storage Gateway] EC2からS3バケットをNFSマウントしてみた〜2018年冬〜

後から指摘されて知ったのですが、例えば、StorageGatewayを介してS3にファイルをputした場合には、即座にインスタンス側から認識できますが、直接S3にputしたファイルをインスタンス側から認識するまでには時間が掛かかっていました。これは、StorageGatewayがキャッシュした情報をインスタンスが参照しているためです。

今回追加された機能により、キャッシュをリフレッシュすることで、上記ケースを回避できるようになりました。

リフレッシュ方法

コンソールとcliからのリフレッシュ方法を紹介します。

コンソール

cli

AWS CLI Command Reference(refresh-cache)

$ aws storagegateway refresh-cache --file-share-arn arn:aws:storagegateway:ap-northeast-1:<AWSアカウントID>:share/<ファイル共有ID>
{
    "FileShareARN": "arn:aws:storagegateway:ap-northeast-1:<AWSアカウントID>share/<ファイル共有ID>"
}

やってみた

前提

以下の環境構築手順を割愛します。

  • StorageGatewayのファイルゲートウェイを作成してインスタンスにマウントする
  • インスタンスからS3やStorageGatewayを操作するためのロール設定

動作確認

 /home/ec2-user/storageにS3バケットの20181211-iwaki-testがマウントされていることを確認します。

$ df -h
ファイルシス                                   サイズ  使用  残り 使用% マウント位置
devtmpfs                                         476M     0  476M    0% /dev
tmpfs                                            493M     0  493M    0% /dev/shm
tmpfs                                            493M  460K  493M    1% /run
tmpfs                                            493M     0  493M    0% /sys/fs/cgroup
/dev/xvda1                                       8.0G  1.3G  6.8G   16% /
xxx.xx.xx.xxx:/20181211-iwaki-test               8.0E     0  8.0E    0% /home/ec2-user/storage
tmpfs                                             99M     0   99M    0% /run/user/1000

StorageGatewayを介さずに、インスタンスからS3にファイルをputします。コンソールからのアップロードでも構いません。

$ touch /tmp/testfile
$ aws s3 cp /tmp/testfile s3://20181211-iwaki-test
$ aws s3 ls s3://20181211-iwaki-test
2018-12-13 11:50:19          0 testfile

マウントしたディレクトリからputしたファイルを確認してみます。

$ ls -l /home/ec2-user/storage
合計 0

ファイルを認識できません。ここでキャッシュをクリアしてみます。

$ aws storagegateway refresh-cache --file-share-arn arn:aws:storagegateway:ap-northeast-1:<AWSアカウントID>:share/share-0837766A"
{
    "FileShareARN": "arn:aws:storagegateway:ap-northeast-1:<AWSアカウントID>share/share-0837766A"
}
$ ls -l /home/ec-user2/storage
合計 0
-rw-rw-rw- 1 nfsnobody nfsnobody 0 12月 13 12:14 testfile

無事ファイルを認識することができました。

おわりに

以前のブログでS3バケットをNFSマウントしてみたと書きましたが、実際はS3バケットを直接マウントているわけではなく、あくまでStorageGatewayがキャッシュしたデータを参照していることがよく分かりました。

本エントリが誰かの役に立てれば幸いです。