

# 对目录存储桶使用批量操作
<a name="directory-buckets-objects-Batch-Ops"></a>

您可以使用 Amazon S3 批量操作对存储在 S3 存储桶中的对象执行操作。要了解有关 S3 批量操作的更多信息，请参阅[对 Amazon S3 对象执行大规模批量操作](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops.html)。

以下主题讨论对存储在目录桶的 S3 Express One Zone 存储类中的对象执行批量操作。

**Topics**
+ [对目录存储桶使用批量操作](#UsingBOPsDirectoryBuckets)
+ [主要区别](#UsingBOPsDirectoryBucketsKeyDiffs)

## 对目录存储桶使用批量操作
<a name="UsingBOPsDirectoryBuckets"></a>

您可以对存储在目录桶中的对象执行**复制**操作和**调用 AWS Lambda 函数**操作。通过**复制**，您可以在相同类型的桶之间复制对象（例如，从目录桶复制到目录桶）。您也可以在通用存储桶和目录存储桶之间进行复制。通过**调用 AWS Lambda 函数**操作，您可以通过 Lambda 函数使用您定义的代码对目录存储桶中的对象执行操作。

**复制对象**  
您可以在相同的存储桶类型之间进行复制，也可以在目录存储桶和通用存储桶之间进行复制。当您复制到目录桶时，必须为此桶类型使用正确的 Amazon 资源名称（ARN）格式。目录存储桶的 ARN 格式为 `arn:aws:s3express:region:account-id:bucket/bucket-base-name--x-s3`。

**注意**  
当源存储桶或目标存储桶位于 AWS 本地区域时，不支持跨不同 AWS 区域复制对象。源存储桶和目标存储桶必须具有相同的父 AWS 区域。源存储桶和目标存储桶可以是不同的存储桶位置类型（可用区或本地区域）。

您也可以使用 S3 控制台中的**导入**操作在目录存储桶中填充数据。**导入**是一种创建批量操作作业的简化方法，用于将对象从通用存储桶复制到目录存储桶。对于从通用存储桶到目录存储桶的**导入**复制作业，S3 会自动生成清单。有关更多信息，请参阅[将对象导入到目录桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job.html)和[指定清单](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specify-batchjob-manifest.html)。

**调用 Lambda 函数（`LambdaInvoke`）**  
使用批量操作来调用处理目录存储桶的 Lambda 函数有特殊要求。例如，您必须使用 v2 JSON 调用架构来构建 Lambda 请求，并在创建任务时指定 InvocationSchemaVersion 2.0。有关更多信息，请参阅[调用 AWS Lambda 函数](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-invoke-lambda.html)。

## 主要区别
<a name="UsingBOPsDirectoryBucketsKeyDiffs"></a>

下面列出了使用批量操作对存储在目录桶（使用 S3 Express One Zone 存储类）中的对象执行批量操作时的主要区别：
+ 对于目录存储桶，支持 SSE-S3 和具有 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）。如果您发出 `CopyObject` 请求来指定在目录存储桶（源或目标）上使用具有客户提供的密钥的服务器端加密（SSE-C），则响应将返回 HTTP `400 (Bad Request)` 错误。

  我们建议存储桶的默认加密使用所需的加密配置，并且不要在 `CreateSession` 请求或 `PUT` 对象请求中覆盖存储桶默认加密。然后，使用所需的加密设置自动对新对象进行加密。有关目录存储桶中的加密覆盖行为以及如何使用 SSE-KMS 加密目录存储桶中的新对象副本的更多信息，请参阅 [Specifying server-side encryption with AWS KMS for new object uploads](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html)。

  当您通过[批量操作中的 Copy 操作](#directory-buckets-objects-Batch-Ops)将 SSE-KMS 加密的对象从通用存储桶复制到目录存储桶、从目录存储桶复制到通用存储桶，或在目录存储桶之间复制时，不支持 S3 存储桶密钥。在这种情况下，每次对 KMS 加密的对象发出复制请求时，Amazon S3 都会调用 AWS KMS。有关在目录存储桶上使用 SSE-KMS 的更多信息，请参阅[设置和监控目录存储桶的默认加密](s3-express-bucket-encryption.md)和[在目录存储桶中使用具有 AWS KMS 密钥的服务器端加密（SSE-KMS）](s3-express-UsingKMSEncryption.md)。
+ 无法标记目录存储桶中的对象。您只能指定一个空标签集。默认情况下，批量操作会复制标签。如果您在通用桶和目录桶之间复制带有标签的对象，则将收到 `501 (Not Implemented)` 响应。
+ S3 Express One Zone 可让您选择用于在上传或下载过程中验证数据的校验和算法。您可以选择以下安全哈希算法（SHA）或循环冗余校验（CRC）数据完整性检查算法之一：CRC32、CRC32、SHA-1 和 SHA-256。S3 Express One Zone 存储类不支持基于 MD5 的校验和。
+ 默认情况下，所有 Amazon S3 桶都将 S3 对象所有权设置设为强制桶拥有者，并禁用访问控制列表（ACL）。对于目录存储桶，无法修改此设置。您可以将对象从通用存储桶复制到目录存储桶。然而，当您复制到目录桶或从目录桶复制时，无法覆盖默认 ACL。
+ 无论您如何指定清单，列表本身都必须存储在通用存储桶中。批量操作无法从目录桶中导入现有清单，也无法将生成的清单保存到目录桶。但是，清单中描述的对象可以存储在目录存储桶中。
+ 批量操作无法将目录桶指定为 S3 清单报告中的位置。清单报告不支持目录桶。您可以使用 `ListObjectsV2` API 操作列出对象，为目录桶中的对象创建清单文件。然后，您可以在 CSV 文件中插入该列表。

### 授予访问权限
<a name="BOPsAccess"></a>

 要执行复制作业，您必须拥有以下权限：
+ 要将对象从一个目录存储桶复制到另一个目录存储桶，您必须拥有 `s3express:CreateSession` 权限。
+ 要将对象从目录存储桶复制到通用存储桶，您必须拥有将对象副本写入目标存储桶的 `s3express:CreateSession` 权限和 `s3:PutObject` 权限。
+ 要将对象从通用桶复制到目录桶，您必须拥有读取正在复制的源对象的 `s3express:CreateSession` 权限和 `s3:GetObject` 权限。

   有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)。
+ 要调用 Lambda 函数，您必须根据 Lambda 函数授予对资源的权限。要确定需要哪些权限，请检查相应的 API 操作。