为什么我的 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 命令并输入 ARN 作为 --file-share-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

注:您必须使用具有运行 refresh-cache 命令权限的 AWS Identity and Access Management (IAM) 用户或角色的凭证来排定 cron 作业。

使用 Lambda 函数

您可以创建 Lambda 函数,它需要按照特定计划运行 RefreshCache API。以下示例函数使用 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'

注意以下对刷新缓存操作进行自动化的考虑因素:


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?