Storage Gateway(S3 File Gateway) 利用時、キャッシュが更新されない原因と対処法
困っていること
Storage Gateway(S3 File Gateway)を利用しています。5 分間隔で キャッシュが自動更新 されるように設定しているものの、キャッシュが更新(RefreshCache)されず後続の処理などが止まる状況で困っています。
原因と対処法を教えてください。
どう対応すればいいの?
原因
ファイルゲートウェイのキャッシュの更新は、S3 バケット内の全てのオブジェクトに対してリクエストを実施します。 そのため、バケット内のオブジェクトの数が多いと実行時間が長くなり、5 分間隔で実行された場合は更新が完了せずに次の更新が発生している可能性が考えられます。
対処法
キャッシュの更新(RefreshCache)操作の実行時間を短縮するには、AWS re:Post を参考に以下の方法を検討してください。
- バケット内のオブジェクトの数を減らす
- バケット全体に対して 1 つのファイル共有を使用する代わりに、S3 バケット内の個別のプレフィックスに対応する複数のファイル共有をデプロイする
- S3 バケット全体に対して使用しているファイル共有が 1 つの場合は、新しいオブジェクトで更新されるバケットの特定のプレフィックスまたはフォルダに RefreshCache 操作を集中させる
- オフピーク時に、S3 バケットへの他のリクエストに対して RefreshCache 操作を実行する
また、AWS CLI コマンドを用いて特定のプレフィックスに対してキャッシュの更新(RefreshCache)を実行することも可能です。対象 S3 バケットのオブジェクトが多い場合、特定のプレフィックスに対してのみキャッシュの更新を実施して事象が改善されるかお試しください。
※ AWS CLI コマンド例
「/testdir」フォルダを指定してキャッシュを更新 $ aws storagegateway refresh-cache --file-share-arn arn:aws:storagegateway:us-east-1:xxxxxxxxxxxx:share/share-xxxxxxx --folder-list /testdir
補足
マネジメントコンソールや AWS CLI から設定できる「更新間隔」や「TTL」とは、キャッシュファイル自体の TTL では無く、「キャッシュを更新を実行する間隔」です。
また、「キャッシュの自動更新(RefreshCache)」で更新される「キャッシュ」とは、S3 上のオブジェクトをファイルゲートウェイが「キャッシュファイル」として保存するキャッシュではございません。キャッシュの更新(Refresh Cache)は、S3 上で LIST を実行し、メタデータをファイルゲートウェイ上にキャッシュします。
S3 上のオブジェクトをファイルゲートウェイ 上にキャッシュするのではなく、S3 上のオブジェクト等のリストのメタデータをファイルゲートウェイはキャッシュします。