POST Object restore
说明
此操作执行以下类型的请求:
-
select:对归档的对象执行 select 查询 -
restore an archive:还原归档的对象
要使用此操作,您必须拥有执行 s3:RestoreObject 和 s3:GetObject 操作的权限。存储桶拥有者默认拥有此权限,并可以将此权限授予他人。有关权限的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的与存储桶子资源操作相关的权限和管理对 Amazon S3 资源的访问权限。
使用 Select 请求查询归档
您可以使用 select 类型的请求对归档的对象执行 SQL 查询。要由 select 请求查询的归档对象必须格式化为未压缩的逗号分隔值(CSV)文件。您可以针对归档的数据运行查询和自定义分析,而无需将数据还原到较热的 Amazon S3 层。有关 select 请求的概述,请参阅《Amazon Simple Storage Service 用户指南》中的查询归档对象。
在发出 select 请求时,请执行以下操作:
-
为 select 查询的输出定义输出位置。此位置必须是一个 Amazon S3 存储桶,与包含要查询的归档对象的存储桶位于同一 Amazon Web Services 区域。启动作业的 Amazon Web Services 账户必须拥有写入 S3 存储桶的权限。您可以为存储在存储桶中的输出对象指定存储类别和加密。有关输出的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的查询归档对象。
有关请求正文中
S3结构的更多信息,请参阅以下内容:-
《Amazon Simple Storage Service 用户指南》中的使用 ACL 管理访问权限
-
《Amazon Simple Storage Service 用户指南》中的使用服务器端加密保护数据
-
在请求正文的
SelectParameters结构中为查询的SELECT还原类型定义 SQL 表达式。您可以使用类似以下示例的表达式。-
下面的表达式返回指定对象中的所有记录。
SELECT * FROM Object -
假设您没有对存储在对象中的数据使用任何标头,则可以使用位置标头指定列。
SELECT s._1, s._2 FROM Object s WHERE s._3 > 100 -
如果您具有标头并且在请求正文的
CSV结构中将fileHeaderInfo设置为USE,则可以在查询中指定标头。(如果将fileHeaderInfo字段设置为IGNORE,则查询会跳过第一行。) 您无法将序号位置与标题列名混合。SELECT s.Id, s.FirstName, s.SSN FROM S3Object s
-
有关将 SQL 与 Amazon Glacier Select 还原结合使用的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的 Amazon S3 Select 和 Amazon Glacier Select 的 SQL 参考。
在发出 select 请求时,您还可以执行以下操作:
-
要加快您的查询,请指定
Expedited层。有关层的更多信息,请参阅本主题后面的“还原归档”。 -
指定有关要查询的输入对象和 CSV 编码查询结果序列化的数据序列化格式的详细信息。
以下是有关 select 功能的其它重要信息:
-
输出结果为新的 Amazon S3 对象。与归档检索不同,这些对象会一直存储,直至通过手动方式或生命周期策略进行显式删除。
-
您可以对同一 Amazon S3 对象发出多个 select 请求。Amazon S3 不会删除重复的请求,因此请避免发出重复的请求。
-
即使对象已经还原,Amazon S3 也会接受 select 请求。select 请求不会返回错误响应
409。
还原归档
GLACIER 和 DEEP_ARCHIVE 存储类别中的对象已归档。要访问归档的对象,您必须先发起还原请求。这会还原归档对象的临时副本。在还原请求中,指定您希望还原的副本存在的天数。指定期限过后,Amazon S3 会删除临时副本,但对象仍会以原先还原时所处的 GLACIER 或 DEEP_ARCHIVE 存储类别进行归档。
要还原特定的对象版本,您可以提供版本 ID。如果您未提供版本 ID,Amazon S3 将还原当前版本。
完成还原作业所需的时间取决于从哪个存储类别还原对象以及您指定的数据访问层。
还原归档对象(或使用 select 请求)时,您可以在请求正文的 Tier 元素中指定以下数据访问层选项之一:
-
Expedited:加速检索可让您在偶尔需要紧急请求归档的子集时,快速访问存储在 GLACIER 存储类别中的数据。对于除最大型归档对象(250 MB+)之外的所有其它归档,使用加速检索访问的数据通常在 1 到 5 分钟内提供。预配置容量确保在您需要时,可以使用针对加速检索的检索容量。DEEP_ARCHIVE 存储类别不提供加速检索和预调配容量。 -
Standard- 标准检索允许您在数小时内访问您的任何存档对象。这是未指定检索选项的 GLACIER 和 DEEP_ARCHIVE 检索请求的默认选项。从 GLACIER 存储类别完成标准检索通常需要 3-5 小时,从 DEEP_ARCHIVE 存储类别进行标准检索通常会在 12 小时内完成。 -
Bulk:批量检索是 Amazon Glacier 的成本最低的检索选项,使您能够在一天内以较低的成本检索大量(甚至是 PB 级)的数据。从 GLACIER 存储类别完成批量检索通常需要 5-12 小时,从 DEEP_ARCHIVE 存储类别进行批量检索通常会在 48 小时内完成。
有关 Expedited 数据访问的归档检索选项和预调配容量的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的还原已归档的对象。
您可以使用 Amazon S3 还原速度升级,以便在还原进行期间将还原速度更改为更快的速度。通过向同一对象发出另一个还原请求并设置新的 Tier 请求元素,可以提升正在进行的还原的速度。在发出升级还原层的请求时,您必须选择比正在进行的还原所使用的层更快的层。您不得更改任何其他参数,如 Days 请求元素。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的升级正在进行的还原的速度。
要获取对象还原的状态,您可以发送 HEAD 请求。操作会在响应中返回 x-amz-restore 标头,该标头提供有关还原状态的信息。您可以使用 Amazon S3 事件通知在还原启动或完成时通知您。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的配置 Amazon S3 事件通知。
还原归档对象后,您可以通过重新发出具有新时段的请求来更新还原时段。Amazon S3 会相对于当前时间更新还原期限,并且仅针对该请求收费,而不收取数据传输费用。当 Amazon S3 正在处理您当前对该对象的还原请求时,您无法更新还原期限。
如果存储桶的生命周期配置带有包含过期操作的规则,则对象过期时间将覆盖您在还原请求中指定的生命期。例如,如果您将对象副本的还原期限设为 10 天,但该对象计划在 3 天后过期,则 Amazon S3 会在 3 天后删除该对象。有关生命周期配置的更多信息,请参阅 PutBucketLifecycleConfiguration 和《Amazon Simple Storage Service 用户指南》中的对象生命周期管理。
请求
语法
POST /ObjectName?restore&versionId=VersionIDHTTP/1.1 Host:BucketName.s3.amazonaws.com Date:dateAuthorization:authorization string(see 对请求进行身份验证(Amazon 签名版本 4)) Content-MD5:MD5request body
注意
语法显示了一些请求标头。有关完整列表,请参阅本主题后面的“请求标头”。
请求参数
此操作的实施不使用请求参数。
请求标头
| 名称 | 描述 | 必填 |
|---|---|---|
Content-MD5 |
数据的 base64 编码的 128 位 MD5 摘要。您必须将此标头用作消息完整性检查,以验证请求正文在传输过程中是否未损坏。有关更多信息,请参阅 RFC 1864 类型:字符串 默认值:无 |
是 |
请求元素
以下是用于还原归档的请求正文的 XML 示例。
<RestoreRequest> <Days>2</Days> <GlacierJobParameters> <Tier>Bulk</Tier> </GlacierJobParameters> </RestoreRequest>
下表说明了请求正文中用于还原归档的 XML。
| 名称 | 描述 | 必填 |
|---|---|---|
RestoreRequest |
还原信息的容器。 类型:容器 |
是 |
Days |
已还原(活动)副本的生命周期。您可以从 Amazon Glacier 还原对象的最少天数为 1。在对象副本达到指定的生命周期后,Amazon S3 会将其从存储桶中移除。如果要还原归档,则此元素是必需的。 请勿在 类型:正整数 原级: |
是,如果还原归档 |
GlacierJobParameters |
S3 Glacier 存储类别作业参数的容器。 请勿在 类型:容器 原级: |
否 |
Tier |
还原归档时要使用的数据访问层。 类型:Enum 有效值: 原级: |
否 |
以下 XML 是对归档的对象进行 select 查询的请求正文:
<RestoreRequest> <Type>SELECT</Type> <Tier>Expedited</Tier> <Description>Job description</Description> <SelectParameters> <Expression>Select * from Object</Expression> <ExpressionType>SQL</ExpressionType> <InputSerialization> <CSV> <FileHeaderInfo>IGNORE</FileHeaderInfo> <RecordDelimiter>\n</RecordDelimiter> <FieldDelimiter>,</FieldDelimiter> <QuoteCharacter>"</QuoteCharacter> <QuoteEscapeCharacter>"</QuoteEscapeCharacter> <Comments>#</Comments> </CSV> </InputSerialization> <OutputSerialization> <CSV> <QuoteFields>ASNEEDED</QuoteFields> <RecordDelimiter>\n</RecordDelimiter> <FieldDelimiter>,</FieldDelimiter> <QuoteCharacter>"</QuoteCharacter> <QuoteEscapeCharacter>"</QuoteEscapeCharacter> </CSV> </OutputSerialization> </SelectParameters> <OutputLocation> <S3> <BucketName>Name of bucket</BucketName> <Prefix>Key prefix</Prefix> <CannedACL>Canned ACL string</CannedACL> <AccessControlList> <Grantee> <Type>Grantee Type</Type> <ID>Grantee identifier</ID> <URI>Grantee URI</URI> <Permission>Granted permission</Permission> <DisplayNmae>Display Name</DisplayName> <EmailAddress>email</EmailAddress> </Grantee> </AccessControlList> <Encryption> <EncryptionType>Encryption type</EncryptionType> <KMSKeyId>KMS Key ID</KMSKeyId> <KMSContext>Base64-encoded JSON<KMSContext> </Encryption> <UserMetadata> <MetadataEntry> <Name>Key</Name> <Value>Value</Value> </MetadataEntry> </UserMetadata> <Tagging> <TagSet> <Tag> <Key>Tag name</Key> <Value>Tag value</Value> </Tag> </TagSet> </Tagging> <StorageClass>Storage class</StorageClass> </S3> </OutputLocation> </RestoreRequest>
下表说明了请求正文中用于 SELECT 还原类型的 XML。
| 名称 | 描述 | 必填 |
|---|---|---|
RestoreRequest |
还原信息的容器。 类型:容器 |
是 |
Tier |
还原归档时要使用的数据访问层。 类型:Enum 有效值: 原级: |
否 |
Description |
请求的可选描述。 类型:字符串 原级: |
否 |
SelectParameters |
描述 select 作业请求的参数。 类型:容器 原级: |
是,如果请求类型是 SELECT |
OutputLocation |
描述用于接收 select 还原请求结果的位置。 类型:Amazon S3 的容器 原级: |
是,如果请求类型是 SELECT |
| 名称 | 描述 | 必填 |
|---|---|---|
Expression |
SQL 表达式。例如:
类型:字符串 原级: |
是 |
ExpressionType |
标识表达式类型。 类型:字符串 有效值: 原级: |
是 |
InputSerialization |
描述对象的序列化格式。 类型:CSV 的容器 原级: |
是 |
OutputSerialization |
描述如何序列化 select 任务的结果。 类型:CSV 的容器 原级: |
是 |
| 名称 | 描述 | 必填 |
|---|---|---|
RecordDelimiter |
用于分隔输入中各个记录的单个字符。您可以指定任意分隔符,而不是默认值。 类型:字符串 默认: 原级: |
否 |
FieldDelimiter |
用于分隔记录中各个字段的单个字符。您可以指定任意分隔符。 类型:字符串 默认: 原级: |
否 |
QuoteCharacter |
当字段分隔符是值的一部分时,用于转义的单个字符。 考虑 CSV 文件中的以下示例:
用引号将值括起来,可使该值成为单个字段。如果不使用引号,则逗号是字段分隔符(这使其成为两个单独的字段值,a 和 b)。 类型:字符串 默认: 原级: |
否 |
QuoteEscapeCharacter |
用于对已转义值内的引号字符进行转义的单个字符。例如,值 类型:字符串 默认: 原级: |
否 |
FileHeaderInfo |
描述输入数据中的第一行。它是 ENUM 值之一。
类型:Enum 有效值: 原级: |
否 |
Comments |
单个字符,用于指示在行的开头出现该字符时应忽略该行。您可以指定任何字符来表示注释行。 类型:字符串 原级: |
否 |
| 名称 | 描述 | 必填 |
|---|---|---|
QuoteFields |
指示是否在输出字段周围使用引号。
类型:Enum 有效值: 默认值: 原级: |
否 |
RecordDelimiter |
用于分隔输出中各个记录的单个字符。您可以指定任意分隔符,而不是默认值。 类型:字符串 默认: 原级: |
否 |
FieldDelimiter |
用于分隔记录中各个字段的单个字符。您可以指定任意分隔符。 类型:字符串 默认: 原级: |
否 |
QuoteCharacter |
当字段分隔符是值的一部分时,用于转义的单个字符。例如,如果值为 类型:字符串 默认: 原级: |
否 |
QuoteEscapeCharacter |
用于对已转义值内的引号字符进行转义的单个字符。例如,如果值为 类型:字符串 原级: |
否 |
| 名称 | 描述 | 必填 |
|---|---|---|
AccessControlList |
控制对暂存结果的访问权限的授权列表。 类型:授权的容器 原级: |
否 |
BucketName |
存储 select 还原结果的 S3 存储桶的名称。该存储桶必须与包含输入归档对象的存储桶位于同一个 Amazon Web Services 区域中。 类型:字符串 原级: |
是 |
CannedACL |
要应用于 select 还原结果的标准访问控制列表(ACL)。 类型:字符串 有效值: 原级: |
否 |
Encryption |
包含所存储结果的加密信息。 类型:加密的容器 原级: |
否 |
Prefix |
附加到 select 还原结果前的前缀。前缀的最大长度是 512 字节。 类型:字符串 原级: |
是 |
StorageClass |
用于存储 select 请求结果的存储类别。 类型:字符串 有效值: 原级: |
否 |
Tagging |
标签信息的容器。 类型:标签结构 原级: |
否 |
UserMetadata |
包含要与 select 还原结果一起存储的元数据的列表。 类型:MetadataEntry 结构 原级: |
否 |
| 名称 | 描述 | 必填 |
|---|---|---|
DisplayName |
被授权者的屏幕名称。 类型:字符串 原级: |
否 |
EmailAddress |
被授权者的电子邮件地址。 类型:字符串 原级: |
否 |
ID |
被授权者的规范用户 ID。 类型:字符串 原级: |
否 |
Type |
被授权者的类型。 类型:字符串 原级: |
否 |
URI |
被授权者组的 URI。 类型:字符串 原级: |
否 |
Permission |
授予的权限。 类型:字符串 原级: |
否 |
| 名称 | 描述 | 必填 |
|---|---|---|
EncryptionType |
存储作业结果时使用的服务器端加密算法。默认值为无加密。 类型:字符串 有效值 原级: |
否 |
KMSContext |
可选。如果加密类型是 类型:字符串 原级:Encryption |
否 |
KMSKeyId |
用于对象加密的 Amazon Key Management Service (Amazon KMS) 密钥 ID。 类型:字符串 原级: |
否 |
| 名称 | 描述 | 必填 |
|---|---|---|
Tag |
包含标签。 类型:容器 原级: |
否 |
| 名称 | 描述 | 必填 |
|---|---|---|
Key |
标签的名称。 类型:字符串 原级: |
否 |
Value |
标签的值。 类型:字符串 原级: |
否 |
| 名称 | 描述 | 必填 |
|---|---|---|
MetadataKey |
元数据键。 类型:字符串 原级: |
否 |
MetadataEntry |
元数据值。 类型:字符串 原级: |
否 |
响应
成功的操作将返回 200 OK 或 202 Accepted 状态代码。
-
如果之前未还原对象副本,则 Amazon S3 将在响应中返回
202 Accepted。 -
如果之前还原了对象副本,则 Amazon S3 将在响应中返回
200 OK。
响应标头
此操作的实施仅使用大多数响应通用的响应标头。有关更多信息,请参阅通用响应标头。
响应元素
此操作不返回响应元素。
特殊错误
| 错误代码 | 说明 | HTTP 状态代码 | SOAP 故障代码前缀 |
|---|---|---|---|
RestoreAlreadyInProgress |
对象还原已在进行中。(此错误不适用于 SELECT 类型请求。) | 409 冲突 | 客户端 |
GlacierExpeditedRetrievalNotAvailable |
S3 Glacier 存储类别的加速检索目前不可用。请稍后重试。(如果处理 Expedited 请求的容量不足,则返回该错误。此错误仅适用于 Expedited 检索,而不适用于 Standard 或 Bulk 检索。) |
503 | 不适用 |
示例
使用加速检索选项还原对象,为期两天
以下还原请求使用加速检索选项从 Amazon Glacier 还原 photo1.jpg 对象的副本,为期两天。
POST /photo1.jpg?restore HTTP/1.1 Host: examplebucket.s3.amazonaws.com Date: Mon, 22 Oct 2012 01:49:52 GMT Authorization:authorization stringContent-Length:content length<RestoreRequest> <Days>2</Days> <GlacierJobParameters> <Tier>Expedited</Tier> </GlacierJobParameters> </RestoreRequest>
如果 examplebucket 没有已还原的对象副本,Amazon S3 将返回以下 202 Accepted 响应。
HTTP/1.1 202 Accepted x-amz-id-2: GFihv3y6+kE7KG11GEkQhU7/2/cHR3Yb2fCb2S04nxI423Dqwg2XiQ0B/UZlzYQvPiBlZNRcovw= x-amz-request-id: 9F341CD3C4BA79E0 Date: Sat, 20 Oct 2012 23:54:05 GMT Content-Length: 0 Server: AmazonS3
如果对象的副本已还原,Amazon S3 会返回 200 OK 响应,并且仅更新已还原副本的过期时间。
使用 SELECT 请求查询归档
以下是 select 还原请求示例。
POST /object-one.csv?restore HTTP/1.1 Host: examplebucket.s3.amazonaws.com Date: Date: Sat, 20 Oct 2012 23:54:05 GMT Authorization:authorization stringContent-Length:content length<RestoreRequest xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Type>SELECT</Type> <Tier>Expedited</Tier> <Description>this is a description</Description> <SelectParameters> <InputSerialization> <CSV> <FileHeaderInfo>IGNORE</FileHeaderInfo> <Comments>#</Comments> <QuoteEscapeCharacter>"</QuoteEscapeCharacter> <RecordDelimiter>\n</RecordDelimiter> <FieldDelimiter>,</FieldDelimiter> <QuoteCharacter>"</QuoteCharacter> </CSV> </InputSerialization> <ExpressionType>SQL</ExpressionType> <Expression>select * from object</Expression> <OutputSerialization> <CSV> <QuoteFields>ALWAYS</QuoteFields> <QuoteEscapeCharacter>"</QuoteEscapeCharacter> <RecordDelimiter>\n</RecordDelimiter> <FieldDelimiter>\t</FieldDelimiter> <QuoteCharacter>\'</QuoteCharacter> </CSV> </OutputSerialization> </SelectParameters> <OutputLocation> <S3> <BucketName>example-output-bucket</BucketName> <Prefix>test-s3</Prefix> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="AmazonCustomerByEmail"> <EmailAddress>jane-doe@example.com</EmailAddress> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> <UserMetadata> <MetadataEntry> <Name>test</Name> <Value>test-value</Value> </MetadataEntry> <MetadataEntry> <Name>other</Name> <Value>something else</Value> </MetadataEntry> </UserMetadata> <StorageClass>STANDARD</StorageClass> </S3> </OutputLocation> </RestoreRequest>
Amazon S3 返回以下 202 Accepted 响应。
HTTP/1.1 202 Accepted x-amz-id-2: GFihv3y6+kE7KG11GEkQhU7/2/cHR3Yb2fCb2S04nxI423Dqwg2XiQ0B/UZlzYQvPiBlZNRcovw= x-amz-request-id: 9F341CD3C4BA79E0 x-amz-restore-output-path: js-test-s3/qE8nk5M0XIj-LuZE2HXNw6empQm3znLkHlMWInRYPS-Orl2W0uj6LyYm-neTvm1-btz3wbBxfMhPykd3jkl-lvZE7w42/ Date: Sat, 20 Oct 2012 23:54:05 GMT Content-Length: 0 Server: AmazonS3
更多信息
-
《Amazon Simple Storage Service 用户指南》中的 Amazon S3 Select 和 Amazon Glacier Select 的 SQL 参考