

# Amazon S3 连接
<a name="aws-glue-programming-etl-connect-s3-home"></a>

您可以使用 AWS Glue for Spark 在 Amazon S3 中读取和写入文件。AWSGlue for Spark 支持许多开箱即用的存储在 Amazon S3 中的常见数据格式，包括 CSV、Avro、JSON、Orc 和 Parquet。有关支持的数据格式的更多信息，请参阅 [AWS Glue for Spark 中的输入和输出的数据格式选项](aws-glue-programming-etl-format.md)。每种数据格式可能支持不同的 AWS Glue 功能集。有关功能支持的细节，请查阅您的数据格式页面。此外，您可以读取和写入存储在 Hudi、Iceberg 和 Delta Lake 数据湖框架中的版本控制文件。有关数据湖框架的更多信息，请参阅 [在 AWS Glue ETL 任务中使用数据湖框架](aws-glue-programming-etl-datalake-native-frameworks.md)。

使用 AWS Glue，您可以在写入时将 Amazon S3 对象分成文件夹结构，然后使用简单的配置按分区检索以提高性能。您还可以设置配置，以便在转换数据时将小文件分组在一起以提高性能。您可以在 Amazon S3 中进行读写 `bzip2` 和 `gzip` 存档。

**Topics**
+ [配置 S3 连接](#aws-glue-programming-etl-connect-s3-configure)
+ [Amazon S3 连接选项参考](#aws-glue-programming-etl-connect-s3)
+ [已弃用的数据格式连接语法](#aws-glue-programming-etl-connect-legacy-format)
+ [排除 Amazon S3 存储类](aws-glue-programming-etl-storage-classes.md)
+ [管理 AWS Glue 中用于 ETL 输出的分区](aws-glue-programming-etl-partitions.md)
+ [以较大的组读取输入文件](grouping-input-files.md)
+ [适用于 Amazon S3 的 Amazon VPC 终端节点](vpc-endpoints-s3.md)

## 配置 S3 连接
<a name="aws-glue-programming-etl-connect-s3-configure"></a>

要在 AWS Glue with Spark 作业中连接到 Amazon S3，需要具备一些先决条件：
+ AWS Glue 作业必须拥有对相关 Amazon S3 存储桶的 IAM 权限。

在某些情况下，您需要配置其他先决条件：
+ 配置跨账户访问时，需要对 Amazon S3 存储桶进行适当的访问控制。
+ 出于安全考虑，您可以选择通过 Amazon VPC 路由您的 Amazon S3 请求。此方法可能会带来带宽和可用性方面的难题。有关更多信息，请参阅 [适用于 Amazon S3 的 Amazon VPC 终端节点](vpc-endpoints-s3.md)。

## Amazon S3 连接选项参考
<a name="aws-glue-programming-etl-connect-s3"></a>

指定与 Amazon S3 的连接。

由于 Amazon S3 管理文件而不是表，因此除了指定本文档中提供的连接属性外，您还需要指定有关文件类型的额外配置。您可以通过数据格式选项来指定此信息。有关格式选项的更多信息，请参阅 [AWS Glue for Spark 中的输入和输出的数据格式选项](aws-glue-programming-etl-format.md)。您也可以通过与 AWS Glue Data Catalog 集成来指定此信息。

有关连接选项和格式选项之间区别的示例，请考虑 [create\$1dynamic\$1frame\$1from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options) 方法如何采用 `connection_type`、`connection_options`、`format` 和 `format_options`。本节专门讨论提供给 `connection_options` 的参数。

`"connectionType": "s3"` 可使用以下连接选项：
+ `"paths"`：（必需）要从中读取数据的 Amazon S3 路径的列表。
+ `"exclusions"`：（可选）包含要排除的 Unix 样式 glob 模式的 JSON 列表的字符串。例如，`"[\"**.pdf\"]"` 会排除所有 PDF 文件。有关 AWS Glue 支持的 glob 语法的更多信息，请参阅[包含和排除模式](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude)。
+ `"compressionType"` 或 "`compression`"：（可选）指定数据压缩方式。使用适用于 Amazon S3 源的 `"compressionType"` 以及适用于 Amazon S3 目标的 `"compression"`。通常，如果数据有标准文件扩展名，则不需要指定。可能的值为 `"gzip"` 和 `"bzip2"`。特定格式可能支持其他压缩格式。有关功能支持的细节，请查阅数据格式页面。
+ `"groupFiles"`：（可选）当输入包含超过 50,000 个文件时，默认启用文件分组。当少于 50,000 个文件时，若要启用分组，请将此参数设置为 `"inPartition"`。当超过 50,000 个文件时，若要禁用分组，请将此参数设置为 `"none"`。
+ `"groupSize"`：（可选）目标组大小（以字节为单位）。默认值根据输入数据大小和群集大小进行计算。当少于 50,000 个输入文件时，`"groupFiles"` 必须设置为 `"inPartition"`，此选项才能生效。
+ `"recurse"`：（可选）如果设置为 true，则以递归方式读取指定路径下的所有子目录中的文件。
+ `"maxBand"`：（可选，高级）此选项控制 `s3` 列表可能保持一致的持续时间（以毫秒为单位）。当使用 `JobBookmarks` 来表明 Amazon S3 最终一致性时，将专门跟踪修改时间戳在最后 `maxBand` 毫秒内的文件。大多数用户不需要设置此选项。默认值为 900000 毫秒或 15 分钟。
+ `"maxFilesInBand"`：（可选，高级）此选项指定在最后 `maxBand` 秒内可保存的最大文件数量。如果超过此值，额外的文件将会跳过，且只能在下一次作业运行中处理。大多数用户不需要设置此选项。
+ `"isFailFast"`：（可选）此选项用于确定 AWS Glue ETL 任务是否导致读取器解析异常。如果设置为 `true`，并且 Spark 任务的四次重试无法正确解析数据，则任务会快速失败。
+ `"catalogPartitionPredicate"`：（可选）用于读取。SQL `WHERE` 子句的内容。从具有大量分区的 Data Catalog 表中读取时使用。从 Data Catalog 索引中检索匹配的分区。与 `push_down_predicate` 一起使用，[create\$1dynamic\$1frame\$1from\$1catalog](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_catalog) 方法（以及其他类似方法）上的一个选项。有关更多信息，请参阅 [使用目录分区谓词进行服务器端筛选](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-cat-predicates)。
+ `"partitionKeys"`：（可选）用于写入。列标签字符串数组。AWSGlue 将按照此配置的指定对您的数据进行分区。有关更多信息，请参阅 [写入分区](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-writing)。
+ `"excludeStorageClasses"`：（可选）用于读取。指定 Amazon S3 存储类的字符串数组。AWSGlue 将根据此配置排除 Amazon S3 对象。有关更多信息，请参阅 [排除 Amazon S3 存储类](aws-glue-programming-etl-storage-classes.md)。

## 已弃用的数据格式连接语法
<a name="aws-glue-programming-etl-connect-legacy-format"></a>

某些数据格式可以使用特定的连接类型语法进行访问。此语法已被弃用。我们建议您改用 [AWS Glue for Spark 中的输入和输出的数据格式选项](aws-glue-programming-etl-format.md) 中提供的 `s3` 连接类型和格式选项来指定格式。

### "connectionType": "orc"
<a name="aws-glue-programming-etl-connect-orc"></a>

指定与 Amazon S3 中以 [Apache Hive 优化的行列式（ORC）](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC)文件格式存储的文件的连接。

`"connectionType": "orc"` 可使用以下连接选项：
+ `paths`：（必需）要从中读取数据的 Amazon S3 路径的列表。
+ *（其他选项名称/值对）*：任何其他选项（包括格式化选项）将直接传递给 SparkSQL `DataSource`。

### "connectionType": "parquet"
<a name="aws-glue-programming-etl-connect-parquet"></a>

指定与 Amazon S3 中以 [Apache Parquet](https://parquet.apache.org/docs/) 文件格式存储的文件的连接。

`"connectionType": "parquet"` 可使用以下连接选项：
+ `paths`：（必需）要从中读取数据的 Amazon S3 路径的列表。
+ *（其他选项名称/值对）*：任何其他选项（包括格式化选项）将直接传递给 SparkSQL `DataSource`。

# 排除 Amazon S3 存储类
<a name="aws-glue-programming-etl-storage-classes"></a>

如果您要运行从 Amazon Simple Storage Service（Amazon S3）读取文件或分区的 AWS Glue ETL 任务，则可以排除某些 Amazon S3 存储类类型。

Amazon S3 中提供以下存储类：
+ `STANDARD` – 用于频繁访问数据的通用存储。
+ `INTELLIGENT_TIERING` – 用于具有未知或访问模式不断变化的数据。
+ `STANDARD_IA` 和 `ONEZONE_IA` – 用于长期存在但不常访问的数据。
+ `GLACIER`、`DEEP_ARCHIVE` 和 `REDUCED_REDUNDANCY` – 用于长期归档和数字化保存。

有关更多信息，请参阅《Amazon S3 开发人员指南》**中的 [Amazon S3 存储类](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html)。

本节中的示例向您展示了如何排除 `GLACIER` 和 `DEEP_ARCHIVE` 存储类。这些类允许您列出文件，但除非文件已还原，否则它们不会让您读取文件。（有关更多信息，请参阅《Amazon S3 开发人员指南》**中的[还原存档对象](https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html)。

通过使用存储类排除，您可以确保您的 AWS Glue 作业可以在具有跨这些存储类层的分区的表上工作。如果没有排除，则从这些层读取数据的作业将失败，并显示以下错误：AmazonS3Exception：操作对于此对象的存储类无效。

有多种不同的方法可供您在 AWS Glue 中筛选 Amazon S3 存储类。

**Topics**
+ [创建动态帧时排除 Amazon S3 存储类](#aws-glue-programming-etl-storage-classes-dynamic-frame)
+ [在数据目录表上排除 Amazon S3 存储类](#aws-glue-programming-etl-storage-classes-table)

## 创建动态帧时排除 Amazon S3 存储类
<a name="aws-glue-programming-etl-storage-classes-dynamic-frame"></a>

要在创建动态帧时排除 Amazon S3 存储类，请使用 `additionalOptions` 中的 `excludeStorageClasses`。 AWS Glue 会自动使用自己的 Amazon S3 `Lister` 实施列出和排除与指定存储类对应的文件。

以下 Python 和 Scala 示例显示了在创建动态帧时如何排除 `GLACIER` 和 `DEEP_ARCHIVE` 存储类。

Python 示例：

```
glueContext.create_dynamic_frame.from_catalog(
    database = "my_database",
    tableName = "my_table_name",
    redshift_tmp_dir = "",
    transformation_ctx = "my_transformation_context",
    additional_options = {
        "excludeStorageClasses" : ["GLACIER", "DEEP_ARCHIVE"]
    }
)
```

Scala 示例：

```
val* *df = glueContext.getCatalogSource(
    nameSpace, tableName, "", "my_transformation_context",  
    additionalOptions = JsonOptions(
        Map("excludeStorageClasses" -> List("GLACIER", "DEEP_ARCHIVE"))
    )
).getDynamicFrame()
```

## 在数据目录表上排除 Amazon S3 存储类
<a name="aws-glue-programming-etl-storage-classes-table"></a>

您可以将 AWS Glue ETL 任务使用的存储类排除指定为 AWS Glue 数据目录中的表参数。您可以使用 AWS Command Line Interface (AWS CLI) 或以编程方式使用 API 在 `CreateTable` 操作中包含此参数。有关更多信息，请参阅 [Table 结构](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-Table)和 [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html)。

您还可以在 AWS Glue 控制台上指定排除的存储类。

**排除 Amazon S3 存储类（控制台）**

1. 登录 AWS 管理控制台，然后打开 AWS Glue 控制台，网址为：[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)。

1. 在左侧的导航窗格中，选择 **Tables (表)**。

1. 选择列表中的表名称，然后选择 **Edit table (编辑表)**。

1. 在 **Table properties (表属性)** 中，添加 **excludeStorageClasses** 作为键，添加 **[\$1"GLACIER\$1",\$1"DEEP\$1ARCHIVE\$1"]** 作为值。

1. 选择**应用**。

# 管理 AWS Glue 中用于 ETL 输出的分区
<a name="aws-glue-programming-etl-partitions"></a>

分区是用于组织数据集以便高效查询数据集的重要技术。它根据一个或多个列的不同值用分层目录结构来组织数据。

例如，您可以决定按日期（包括年、月和日）对 Amazon Simple Storage Service（Amazon S3）中的应用程序日志分区。然后，与某一天的数据相对应的文件将放置在前缀下，例如 `s3://my_bucket/logs/year=2018/month=01/day=23/`。Amazon Athena、Amazon Redshift Spectrum 和 AWS Glue 等系统可以使用这些分区按分区值筛选数据，而无需读取 Amazon S3 中的所有底层数据。

爬网程序不仅推断文件类型和架构，它们还会在填充 AWS Glue 数据目录时自动标识数据集的分区结构。生成的分区列可用于在 AWS Glue ETL 任务或 Amazon Athena 之类的查询引擎中进行查询。

对表进行网络爬取后，您可以查看爬网程序创建的分区。在 AWS Glue 控制台的左侧导航窗格中，选择 **Tables (表)**。选择爬网程序创建的表，然后选择 **View Partitions (查看分区)**。

对于采用 `key=val` 样式的 Apache Hive 风格分区路径，爬网程序会使用键名自动填充列名称。否则，它使用默认名称，如 `partition_0`、`partition_1` 等。您可以在控制台上更改默认名称。为此，请导航至该表格。检查**索引**选项卡下是否存在索引。如果是这样的话，您需要删除它们才能继续（之后您可以使用新的列名重新创建它们）。然后，选择**编辑架构**，并在那里修改分区列的名称。

然后，在您的 ETL 脚本中，便可以筛选分区列。因为分区信息存储于数据目录，所以使用 `from_catalog` API 调用包含 `DynamicFrame` 中的分区列。例如，使用 `create_dynamic_frame.from_catalog` 而不是 `create_dynamic_frame.from_options`。

分区是一种可减少数据扫描量的优化技术。要详细了解确定何时适合使用这种技术的过程，请参阅《AWS 规范性指南》中“优化 AWS Glue for Apache Spark 作业性能的最佳实践”**指南中的 [减少数据扫描量](https://docs.aws.amazon.com/prescriptive-guidance/latest/tuning-aws-glue-for-apache-spark/reduce-data-scan.html)。

## 使用下推谓词进行预筛选
<a name="aws-glue-programming-etl-partitions-pushdowns"></a>

在许多情况下，您可以使用下推谓词来筛选分区，而不必列出并读取数据集中的所有文件。您可以直接对数据目录中的分区元数据应用筛选，而不是读取整个数据集，然后在 DynamicFrame 中筛选。这样，只需将您实际需要的内容列出和读取到 DynamicFrame 中即可。

例如，在 Python 中，您可以写入以下内容。

```
glue_context.create_dynamic_frame.from_catalog(
    database = "my_S3_data_set",
    table_name = "catalog_data_table",
    push_down_predicate = my_partition_predicate)
```

这会创建一个 DynamicFrame，它仅在数据目录中加载满足谓词表达式的分区。根据您要加载的数据子集的规模，这样可以节省大量处理时间。

谓词表达式可以是 Spark SQL 支持的任何布尔表达式。您可以在 Spark SQL 查询的 `WHERE` 子句中放置的任何内容都可以使用。例如，谓词表达式 `pushDownPredicate = "(year=='2017' and month=='04')"` 仅加载数据目录中 `year` 等于 2017 并且 `month` 等于 04 的分区。有关更多信息，请参阅 [Apache Spark SQL 文档](https://spark.apache.org/docs/2.1.1/sql-programming-guide.html)，尤其是 [Scala SQL 函数参考](https://spark.apache.org/docs/2.1.1/api/scala/index.html#org.apache.spark.sql.functions$)。

## 使用目录分区谓词进行服务器端筛选
<a name="aws-glue-programming-etl-partitions-cat-predicates"></a>

`push_down_predicate` 选项将在列出目录中的所有分区之后以及列出 Amazon S3 中针对这些分区的文件之前应用。如果您有大量表分区，则目录分区列表仍然会产生额外的时间开销。为解决这一开销，您可以结合使用服务器端分区修剪和 `catalogPartitionPredicate` 选项，该选项使用 AWS Glue 数据目录中的[分区索引](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html)。当您在一个表中有数百万个分区时，这样可以提高分区筛选速度。如果您的 `catalogPartitionPredicate` 需要目录分区索引尚不支持的谓词语法，您可以结合使用 `push_down_predicate` 与 `additional_options` 中的 `catalogPartitionPredicate`。

Python：

```
dynamic_frame = glueContext.create_dynamic_frame.from_catalog(
    database=dbname, 
    table_name=tablename,
    transformation_ctx="datasource0",
    push_down_predicate="day>=10 and customer_id like '10%'",
    additional_options={"catalogPartitionPredicate":"year='2021' and month='06'"}
)
```

Scala：

```
val dynamicFrame = glueContext.getCatalogSource(
    database = dbname,
    tableName = tablename, 
    transformationContext = "datasource0",
    pushDownPredicate="day>=10 and customer_id like '10%'",
    additionalOptions = JsonOptions("""{
        "catalogPartitionPredicate": "year='2021' and month='06'"}""")
    ).getDynamicFrame()
```

**注意**  
`push_down_predicate` 和 `catalogPartitionPredicate` 使用不同的语法。前者使用 Spark SQL 标准语法，后者使用 JSQL 解析器。

## 写入分区
<a name="aws-glue-programming-etl-partitions-writing"></a>

默认情况下，DynamicFrame 在写入时不分区。所有输出文件都写入指定输出路径的顶级。直到最近，将 DynamicFrame 写入分区的唯一途径是在写入之前将其转换为 Spark SQL DataFrame。

但是，DynamicFrames 现在支持您在创建接收器时使用 `partitionKeys` 选项通过密钥序列进行本机分区。例如，以下 Python 代码将数据集以 Parquet 格式写出到 Amazon S3 中，写入到类型字段分区的目录中。然后，您可以使用其他系统（如 Amazon Athena）处理这些分区。

```
glue_context.write_dynamic_frame.from_options(
    frame = projectedEvents,
    connection_type = "s3",    
    connection_options = {"path": "$outpath", "partitionKeys": ["type"]},
    format = "parquet")
```

# 以较大的组读取输入文件
<a name="grouping-input-files"></a>

您可以设置表的属性，以使 AWS Glue ETL 任务能够在从 Amazon S3 数据存储中读取文件时对文件分组。这些属性使每个 ETL 任务可将一组输入文件读取到单个内存分区中，当 Amazon S3 数据存储中存在大量小型文件时，此功能特别有用。当您设置某些属性时，您会指示 AWS Glue 对 Amazon S3 数据分区中的文件分组并设置要读取的组的大小。您还可以在从 Amazon S3 数据存储中读取时用 `create_dynamic_frame.from_options` 方法设置这些选项。

要对表启用文件分组，可在表结构的参数字段中设置键值对。使用 JSON 表示法为表的参数字段设置值。有关编辑表属性的更多信息，请参阅 [查看和管理表详细信息](tables-described.md#console-tables-details)。

您可以使用此方法对数据目录中使用 Amazon S3 数据存储的表启用分组。

**groupFiles**  
将 **groupFiles** 设置为 `inPartition`，以在 Amazon S3 数据分区中启用文件分组。如果输入文件数多于 50000 个，AWS Glue 会自动启用分组，如以下示例中所示。  

```
  'groupFiles': 'inPartition'
```

**groupSize**  
将 **groupSize** 设置为组的目标大小 (以字节为单位)。**groupSize** 属性为可选属性，如果未提供，AWS Glue 将计算一个大小以使用集群中的所有 CPU 内核，同时仍会减少 ETL 任务和内存分区总数。  
例如，以下内容将组大小设置为 1 MB。  

```
  'groupSize': '1048576'
```
请注意，应使用计算的结果设置 `groupsize`。例如，1024 \$1 1024 = 1048576。

**recurse**  
将**递归**设置为 `True`，这样在将 `paths` 指定为路径数组时，会以递归方式读取所有子目录中的文件。如果 `paths` 是 Amazon S3 中的一组对象密钥，或者输入格式为 parquet/orc，您不需要将其设置为 **recurse**，如以下示例所示。  

```
  'recurse':True
```

如果您使用 `create_dynamic_frame.from_options` 方法直接从 Amazon S3 中读取，请添加这些连接选项。例如，下面尝试将文件分组到 1 MB 组中。

```
df = glueContext.create_dynamic_frame.from_options("s3", {'paths': ["s3://s3path/"], 'recurse':True, 'groupFiles': 'inPartition', 'groupSize': '1048576'}, format="json")
```

**注意**  
从以下数据格式创建的 DynamicFrames 支持 `groupFiles`：csv、ion、grokLog、json 和 xml。avro、parquet 和 orc 不支持此选项。

# 适用于 Amazon S3 的 Amazon VPC 终端节点
<a name="vpc-endpoints-s3"></a>

出于安全原因，许多AWS客户在 Amazon Virtual Private Cloud 环境（Amazon VPC）中运行其应用程序。利用 Amazon VPC，您可以在 Virtual Private Cloud 中启动 Amazon EC2 实例，Virtual Private Cloud 在逻辑上与其他网络（包括公共互联网）隔离。利用 Amazon VPC，您可以控制该网络的 IP 地址范围、子网、路由表、网络网关和安全设置。

**注意**  
如果您的AWS账户是在 2013 年 12 月 4 日之后创建的，则您在每个AWS区域都已经有一个默认 VPC。您无需任何额外配置即能立即开始使用您的默认 VPC。  
详情请参阅《Amazon VPC 用户指南》中的[您的默认 VPC 和子网](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html)。

许多客户对跨公共 Internet 发送和接收数据存在合理的私密性和安全性担心。客户可以利用 virtual private network (VPN)，通过其企业网络基础设施路由所有 Amazon S3 网络流量，从而消除这些担心。不过，此方法可能会带来带宽和可用性方面的难题。

Amazon S3 的 VPC 终端节点可以克服这些难题。Amazon S3 的 VPC 终端节点使 AWS Glue 可以使用私有 IP 地址访问 Amazon S3，而无需接触公共互联网。AWS Glue 不需要公有 IP 地址，因此您的 VPC 中不需要有互联网网关、NAT 设备或虚拟私有网关。您使用终端节点策略控制对 Amazon S3 的访问。您的 VPC 和AWS服务之间的流量不会脱离 Amazon 网络。

在为 Amazon S3 创建 VPC 终端节点时，发送到区域（如 *s3.us-west-2.amazonaws.com*）内的 Amazon S3 终端节点的任何请求都被路由到亚马逊网络中的私有 Amazon S3 终端节点。您不需要修改正在 VPC 中的 Amazon EC2 实例上运行的应用程序 – 终端节点名称保持不变，但到 Amazon S3 的路由会完全保留在亚马逊网络中，不会访问公共互联网。

有关 VPC 终端节点的更多信息，请参阅《Amazon VPC 用户指南》中的 [VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)。

下图说明 AWS Glue 如何使用 VPC 终端节点访问 Amazon S3。

![\[显示 VPC 连接到 Amazon S3 的网络流量。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/PopulateCatalog-vpc-endpoint.png)


**设置 Amazon S3 访问权限**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon VPC 控制台：[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)。

1. 在左侧导航窗格中，选择**终端节点**。

1. 选择 **Create Endpoint (创建终端节点)**，然后按照步骤创建网关类型的 Amazon S3 VPC 终端节点。