为了确保AWS Redshift Spectrum可以看到已恢复的DeepArchive对象,我们需要在恢复这些对象之前进行几项配置。以下是用于解决此问题的几个步骤:
确保S3的桶配置了Amazon S3 Inventory功能,并将其存储在包含DeepArchive对象的目录下。
aws s3api put-bucket-inventory-configuration --bucket BUCKET-NAME --id INVENTORY-CONFIG-ID --inventory-configuration '{"Destination":{"S3BucketDestination":{"Bucket":"arn:aws:s3:::DESTINATION-BUCKET-NAME","Format":"CSV","Prefix":"inventory-output/"},"AccountId":"DESTINATION-ACCOUNT-ID"},"IsEnabled":true,"Schedule":{"Frequency":"Daily"}}'
确保AWS Redshift Spectrum可以查看存储在DeepArchive中的对象。要做到这一点,需要配置S3访问日志记录,以便在使用Redshift Spectrum访问S3对象时,在S3访问日志中存储访问信息。这将确保AWS Redshift Spectrum可以看到存储在DeepArchive中的对象。
aws s3api put-bucket-acl --bucket BUCKET-NAME --grant-read-acp uri=http://acs.amazonaws.com/groups/global/AllUsers
aws s3api put-bucket-logging --bucket BUCKET-NAME --logging-configuration '{"LogFormat": "CSV","LoggingEnabled": {"TargetBucket": "ACCESS-LOG-BUCKET-NAME","TargetPrefix":"'$(echo $S3BUCKET)'-access-logs/"}}'
确保AWS Redshift具有访问S3存储桶和对象的权限。这可以通过创建一个IAM策略并将其附加到与Redshift Spectrum相关联的角色来完成。以下是IAM策略示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws-cn:s3:::",
"arn:aws-cn:s3:::/*"
]
}
]
}
最后,恢复DeepArchive对象,以便Redshift Spectrum可以看到它们。
aws s3api restore-object --bucket BUCKET-NAME --key OBJECT-KEY --restore-request '{"Days":}'