刷新 Amazon S3 儲存貯體中的物件 - AWSStorage Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

刷新 Amazon S3 儲存貯體中的物件

NFS 或 SMB 用户端執行檔案系統操作時,閘道會維護與檔案共享建立關聯之 S3 儲存貯體中物件的清查。您的閘道使用此快取清查,來降低 S3 請求的延遲和頻率。此操作不會將文件導入 S3 文件網關緩存存儲中。它僅更新緩存清單以反映 S3 存儲桶中對象清單中的更改。

若要重新整理檔案共享的 S3 儲存貯體,您可以使用 Storage Gateway 主控台、RefreshCache操作,或者AWS Lambda函數。

從主控台刷新 S3 儲存貯體中的物件
  1. 打開 Storage Gateway 主控台https://console.aws.amazon.com/storagegateway/home

  2. 選擇 File shares (檔案共享),然後選擇與您要重新整理之 S3 儲存貯體建立關聯的檔案共享。

  3. 針對 Actions (動作),選擇 Refresh cache (重新整理快取)

    重新整理程序所需的時間取決於閘道上快取的物件數量,以及新增至 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 主控台將物件上傳至 S3 儲存貯體AWS CLI。

    CloudWatch 主控台會產生類似如下的 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操作完成。如需詳細資訊,請參閱 取得關於檔案操作的通知