本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
刷新您的 Amazon S3 存储桶中的对象
在 NFS 或 SMB 客户端执行文件系统操作时,您的网关会在与文件共享关联的 S3 存储桶中维护一个对象清单。您的网关使用此缓存清单来减小 S3 请求的延迟和频率。此操作不会将文件导入 S3 文件网关缓存存储。它只更新缓存清单以反映 S3 存储桶中对象清单的变化。
要刷新文件共享的 S3 存储桶,您可以使用 Storage Gateway 控制台,RefreshCache在 Storage Gateway API 中进行操作,或者AWS Lambdafunction.
从控制台刷新 S3 存储桶中的对象
打开 Storage Gateway 控制台https://console.aws.amazon.com/storagegateway/home
. -
选择 File shares,然后选择与要刷新的 S3 存储桶关联的文件共享。
-
对于 Actions,选择 Refresh cache。
刷新过程所需的时间取决于在网关上缓存的对象数以及在 S3 存储桶中添加或删除的对象数。
使用刷新 S3 存储桶中的对象AWS Lambda功能
-
确定 S3 文件网关使用的 S3 存储桶。
-
检查是否Event部分为空。它稍后会自动填充。
-
创建 IAM 角色,并允许 Lambda 的信任关系
lambda.amazonaws.com
. -
使用以下策略。
{ "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": "*" } ] }
-
从 Lambda 控制台创建 Lambda 函数。
-
对您的 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' -
适用于执行角色中,选择您创建的 IAM 角色。
-
可选:为 Amazon S3 添加触发器并选择事件ObjectCreated要么ObjectRemoved.
注意
RefreshCache
在开始另一个过程之前需要完成一个过程 当您在存储桶中创建或删除许多对象时,性能可能会降低。因此,我们建议不要使用 S3 触发器。相反,请使用下面描述的 Amazon CloudWatch 规则。 -
在 CloudWatch 控制台上创建 CloudWatch 规则并添加时间表。一般来说,我们推荐固定速率30 分钟。但是,您可以在大型 S3 存储桶上使用 1-2 小时。
-
为 CloudWatch 事件添加新的触发器,然后选择刚创建的规则。
-
保存 Lambda 配置。选择测试。
-
选择S3 把并根据您的要求自定义测试。
-
测试应该会成功。如果没有,请根据您的要求修改 JSON 并重新测试。
-
打开 Amazon S3 控制台,然后验证您创建的事件和 Lambda 函数 ARN 是否存在。
-
使用 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 共享将反映此更新。
注意
对于在包含数百万对象的大型存储桶中更新大型对象创建或删除的缓存,更新可能需要数小时。
-
使用 Amazon S3 控制台手动删除对象,或AWS CLI.
-
查看客户端上挂载的 NFS 共享。验证对象已消失(因为缓存已刷新)。
-
查看您的 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操作完成。有关更多信息,请参阅获得有关文件操作的通知。