Amazon S3 バケット内のオブジェクトの更新 - AWSStorage Gateway

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon S3 バケット内のオブジェクトの更新

NFS または SMB クライアントがファイルシステムオペレーションを実行すると、ゲートウェイはファイル共有に関連付けられる S3 バケット内のオブジェクトのインベントリを維持します。ゲートウェイは、このキャッシュされた在庫表を使用して、S3 リクエストのレイテンシーと頻度を減らします。この操作は、S3 ファイルゲートウェイキャッシュストレージにファイルをインポートしません。キャッシュされたインベントリを更新するだけで、S3 バケット内のオブジェクトのインベントリに変更が反映されます。

ファイル共有の S3 バケットを更新するには、Storage Gateway コンソールを使用して、RefreshCacheStorage Gateway API での操作、またはAWS Lambdafunction.

コンソールで S3 バケット内のオブジェクトを更新する
  1. [Storage Gateway コンソールを開く] でhttps://console.aws.amazon.com/storagegateway/home

  2. [ファイル共有] を選択し、更新する S3 バケットに関連付けられているファイル共有を選択します。

  3. [アクション] では、[キャッシュを更新] を選択します。

    更新処理にかかる時間は、ゲートウェイにキャッシュされているオブジェクトの数、および S3 バケットに対して追加または削除されたオブジェクトの数によって異なります。

を使用して S3 バケット内のオブジェクトをリフレッシュするにはAWS Lambda関数
  1. S3 ファイルゲートウェイで使用される S3 バケットを特定します。

  2. []イベントセクションは空白です。後で自動的に入力されます。

  3. IAM ロールを作成し、Lambda の信頼関係を許可するlambda.amazonaws.com

  4. 次のポリシーを使用します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "StorageGatewayPermissions", "Effect": "Allow", "Action": "storagegateway:RefreshCache", "Resource": "*" }, { "Sid": "CloudWatchLogsPermissions", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents" ], "Resource": "*" } ] }
  5. Lambda コンソールで Lambda 関数を作成します。

  6. Lambda タスクに次の関数を使用します。

    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:672406774878:share/share-E51FBD9C' ) print(response) return 'Your FileShare cache has been refreshed'
  7. を使用する場合実行ロール[] で、作成した IAM ロールを選択します。

  8. オプション:Amazon S3 のトリガーを追加し、イベントを選択します。ObjectCreatedまたはObjectRemoved

    注記

    RefreshCache別のプロセスを開始する前に、あるプロセスを完了する必要があります。バケット内で多数のオブジェクトを作成または削除すると、パフォーマンスが低下する可能性があります。したがって、S3 トリガーを使用しないことをお勧めします。代わりに、以下で説明する Amazon CloudWatch ルールを使用します。

  9. CloudWatch コンソールで CloudWatch ルールを作成し、スケジュールを追加します。一般的に、固定レート30分の. ただし、大きな S3 バケットでは 1 ~ 2 時間を使用できます。

  10. CloudWatch イベントの新しいトリガーを追加し、作成したルールを選択します。

  11. Lambda 設定を保存します。[Test] (テスト) を選択します。

  12. 選択S3プットテストを要件に合わせてカスタマイズします。

  13. テストが成功します。そうでない場合は、JSON を要件に変更して再テストします。

  14. Amazon S3 コンソールを開き、作成したイベントと Lambda 関数 ARN が存在することを確認します。

  15. Amazon S3 コンソールまたはAWS CLI。

    CloudWatch コンソールでは、以下のような出力が生成されます。

    { u'Records': [ {u'eventVersion': u'2.0', u'eventTime': u'2018-09-10T01:03:59.217Z', u'requestParameters': {u'sourceIPAddress': u'MY-IP-ADDRESS'}, u's3': {u'configurationId': u'95a51e1c-999f-485a-b994-9f830f84769f', u'object': {u'sequencer': u'00549CC2BF34D47AED', u'key': u'new/filename.jpeg'}, u'bucket': {u'arn': u'arn:aws:s3:::MY-BUCKET', u'name': u'MY-GATEWAY-NAME', u'ownerIdentity': {u'principalId': u'A3OKNBZ72HVPP9'}}, u's3SchemaVersion': u'1.0'}, u'responseElements': {u'x-amz-id-2': u'76tiugjhvjfyriugiug87t890nefevbck0iA3rPU9I/s4NY9uXwtRL75tCyxasgsdgfsq+IhvAg5M=', u'x-amz-request-id': u'651C2D4101D31593'}, u'awsRegion': u'MY-REGION', u'eventName': u'ObjectCreated:PUT', u'userIdentity': {u'principalId': u'AWS:AROAI5LQR5JHFHDFHDFHJ:MY-USERNAME'}, u'eventSource': u'aws:s3'} ] }

    Lambda 呼び出しでは、次のような出力結果が得られます。

    { u'FileShareARN': u'arn:aws:storagegateway:REGION:ACCOUNT-ID:share/MY-SHARE-ID', 'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': '6663236a-b495-11e8-946a-bf44f413b71f', 'HTTPHeaders': {'x-amzn-requestid': '6663236a-b495-11e8-946a-bf44f413b71f', 'date': 'Mon, 10 Sep 2018 01:03:59 GMT', 'content-length': '90', 'content-type': 'application/x-amz-json-1.1' } } }

    クライアントにマウントされた NFS 共有には、この更新が反映されます。

    注記

    何百万ものオブジェクトを含む大規模なバケットでラージオブジェクトの作成または削除を更新するキャッシュの場合、更新には数時間かかる場合があります。

  16. Amazon S3 コンソールを使用してオブジェクトを手動で削除するかAWS CLI。

  17. クライアントにマウントされている NFS 共有を表示します。オブジェクトがなくなっていることを確認します (キャッシュが更新されたため)。

  18. CloudWatch ログをチェックして、イベントで削除のログを確認しますObjectRemoved:Delete

    { u'account': u'MY-ACCOUNT-ID', u'region': u'MY-REGION', u'detail': {}, u'detail-type': u'Scheduled Event', u'source': u'aws.events', u'version': u'0', u'time': u'2018-09-10T03:42:06Z', u'id': u'6468ef77-4db8-0200-82f0-04e16a8c2bdb', u'resources': [u'arn:aws:events:REGION:MY-ACCOUNT-ID:rule/FGw-RefreshCache-CW'] }
    注記

    cron ジョブまたはスケジュールされたタスクの場合、CloudWatch ログイベントは次のようになります。u'detail-type': u'Scheduled Event'

キャッシュを更新すると、更新オペレーションのみが開始されます。キャッシュの更新が完了しても、必ずしもファイルの更新が完了したとは限りません。ゲートウェイのファイル共有で新しいファイルを確認する前にファイルの更新オペレーションが完了したかどうかを判断するには、refresh-complete 通知を使用します。これを行うには、Amazon CloudWatch イベントを通じて通知をサブスクライブして、RefreshCache操作は完了しました。詳細については、「ファイル操作についての通知を受信する」を参照してください。