Amazon S3 バケットの変更が Storage Gateway ファイル共有に表示されないのはなぜですか?

最終更新日: 2020 年 2 月 4 日

新しいファイルのアップロードや既存のファイルの削除など、Amazon Simple Storage Service (Amazon S3) バケットに変更を加えました。けれども、変更が AWS Storage Gateway ファイル共有に反映されていません。これを解決する方法を教えてください。

簡単な説明

ファイル共有を使用してローカルにファイルをキャッシュに書き込むと、Storage Gateway はファイル共有キャッシュを自動的に更新します。ただし、ファイルを Amazon S3 に直接アップロードしても、Storage Gateway はキャッシュを自動的に更新しません。これを行う場合、RefreshCache 操作を実行して、ファイル共有の変更を確認する必要があります。複数のファイル共有がある場合、各ファイル共有に対して RefreshCache 操作を実行する必要があります。

キャッシュは、Storage Gateway コンソール、AWS コマンドラインインターフェイス (AWS CLI) を使用して、または AWS Lambda 関数を使って更新できます。

解決方法

Storage Gateway コンソールを使用する

Storage Gateway コンソールを使用してキャッシュを更新するには、Amazon S3 バケット内のオブジェクトの更新を参照してください。

AWS CLI を使用する

1.    list-file-shares コマンドを実行します。

$ aws storagegateway list-file-shares

2.    更新するキャッシュを使用して、ファイル共有の Amazon リソースナンバー (ARN) をコピーします。次に、refresh-cache コマンドを実行し、-file-share-arn の値として ARN を入力します。

$ aws storagegateway refresh-cache --file-share-arn arn:aws:storagegateway:eu-west-1:12345678910:share/share-FFDEE12

別のオプションとして、スクリプトまたはスケジュールされた cron ジョブを作成して、一定の間隔で refresh-cache コマンドを実行できます。たとえば、次の cron ジョブは、12 時間ごとにコマンドを実行します。

0 */12 * * * root aws storagegateway refresh-cache --file-share-arn arn:aws:storagegateway:eu-west-1:12345678910:share/share-FFDEE12

注: cron ジョブは、refresh-cache コマンドを実行する権限を持つ AWS Identity and Access Management (IAM) ユーザーまたはロールの認証情報を使用してスケジュールする必要があります。

Lambda 関数を使用する

特定のスケジュールで RefreshCache API を実行する Lambda 関数を作成できます。次の関数の例では boto3 を使用します。

import json
import boto3
client = boto3.client('storagegateway')
def lambda_handler(event, context):
    print(event)
    response = client.refresh_cache(
        FileShareARN='arn:aws:storagegateway:ap-southeast-2:123456789012:share/share-EEFFBD9C'
    )
    print(response)
    return 'Your FileShare Cache has been Refreshed'

キャッシュの更新操作を自動化するには、次の考慮事項に注意してください。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合