

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

您可以使用 AWS Glue for Spark 在 Amazon S3 中讀取和寫入檔案。 AWS Glue 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 的 VPC 端點](vpc-endpoints-s3.md)

## 設定 S3 連線
<a name="aws-glue-programming-etl-connect-s3-configure"></a>

若要使用 Spark 任務連線至 AWS Glue 中的 Amazon S3，您將需要一些先決條件：
+ Glue AWS 任務必須具有相關 Amazon S3 儲存貯體的 IAM 許可。

在某些情況下，您需要設定其他先決條件：
+ 設定跨帳戶存取權時，Amazon S3 儲存貯體上適當的存取權控制。
+ 基於安全理由，您可以選擇透過 Amazon VPC 路由 Amazon S3 請求。這個方法可能會帶來頻寬和可用性方面的挑戰。如需詳細資訊，請參閱[Amazon S3 的 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`"：(選用) 指定資料的壓縮方式。將 `"compressionType"` 用於 Amazon S3 來源，以及將 `"compression"` 用於 Amazon S3 目標。一般來說，如果資料具有標準副檔名，則不需要此項目。可能值為 `"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` 子句的內容。從具有大量分割區的資料目錄資料表讀取時使用。從資料目錄索引擷取相符的分割區。與 `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"`：(選用) 用於寫入。資料欄標籤字串的陣列。 AWS Glue 會依此組態所指定來分割您的資料。如需詳細資訊，請參閱[寫入分割區](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-writing)。
+ `"excludeStorageClasses"`：(選用) 用於讀取。指定 Amazon S3 儲存類別的字串陣列。 AWS Glue 會根據此組態排除 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>

指定以 [Apache Hive 最佳化資料列單欄式 (ORC)](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC) 檔案格式存放在 Amazon S3 之檔案的連線。

使用下列有 `"connectionType": "orc"` 的連線選項：
+ `paths`：(必要) 要讀取的 Amazon S3 路徑清單。
+ *(其他選項名稱/值對)*：任何其他選項 (包括格式化選項) 都會直接傳遞至 SparkSQL `DataSource`。

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

指定以 [Apache Parquet](https://parquet.apache.org/docs/) 檔案格式存放在 Amazon S3 之檔案的連線。

使用下列有 `"connectionType": "parquet"` 的連線選項：
+ `paths`：(必要) 要讀取的 Amazon S3 路徑清單。
+ *(其他選項名稱/值對)*：任何其他選項 (包括格式化選項) 都會直接傳遞至 SparkSQL `DataSource`。

# 排除 Amazon S3 儲存體方案
<a name="aws-glue-programming-etl-storage-classes"></a>

如果您執行的 AWS Glue ETL 任務會從 Amazon Simple Storage Service (Amazon S3) 讀取檔案或分割區，則您可排除部分 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: The operation is not valid for the object's storage class (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>

您可以在 Glue Data Catalog AWS Glue 中指定 ETL AWS 任務用作資料表參數的儲存類別排除。您可以使用 AWS Command Line Interface (AWS CLI) 或以程式設計方式使用 API 將此參數包含在 `CreateTable`操作中。如需詳細資訊，請參閱[資料表結構](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 管理主控台 並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS 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 讀取所有基礎資料。

爬蟲程式不僅推斷檔案類型和結構描述，還會在填入 Glue Data Catalog AWS 時自動識別資料集的分割區結構。產生的分割區資料行可用於在 AWS Glue ETL 任務中查詢，或查詢 Amazon Athena 之類的引擎。

在您編目資料表後，您可以查看爬蟲程式建立的分割區。在 AWS Glue 主控台，於左側導覽窗格選擇 **Tables** (資料表)。選擇爬蟲程式建立的資料表，然後選擇 **View Partitions (檢視分割區)**。

對於樣式為 `key=val` 的 Apache Hive 樣式分割區路徑，爬蟲程式會自動使用金鑰名稱填入欄位名稱。否則，它會使用預設名稱，如 `partition_0`、`partition_1`，以此類推。您可以在主控台上變更預設名稱。請導覽至資料表執行此操作。在**索引**索引標籤下檢查索引是否存在。如果存在，您需要刪除索引才能繼續 (之後可以使用新資料欄名稱重新建立索引)。然後，選擇**編輯結構描述**，並在該處修改分割區資料欄的名稱。

在您的 ETL 指令碼中，所以您可以在分割區欄上篩選。因為分割區資訊儲存在 Data Catalog 中，請使用 `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)。

## 使用 pushdown 述詞預先篩選
<a name="aws-glue-programming-etl-partitions-pushdowns"></a>

在許多情況下，您可以使用 pushdown 述詞來在分割區上篩選，而無需列出和讀取資料集中的所有檔案。您不須在 DynamicFrame 中讀取整個資料集，然後才進行篩選，您可以直接在 Data Catalog 中分割區中繼資料上套用篩選。然後，您只需要列出與讀取在 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)
```

此會建立在 Data Catalog 中載入並滿足述詞表達式的 DynamicFrame。根據您載入的資料子集大小，這可以節省大量的處理時間。

述詞表達式可以是 Spark SQL 支援的任何布林表達式。您可以在 Spark SQL 查詢中放入 `WHERE` 子句的任何項目。例如，述詞表達式 `pushDownPredicate = "(year=='2017' and month=='04')"` 僅讀取 Data Catalog 中 `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 中的這些分割區的檔案之前套用。如果您有資料表的很多分割區，目錄分割區列表仍會產生額外的時間負荷。若要解決此額外負荷，您可以使用伺服器端分割區剔除搭配 Glue Data Catalog AWS 中使用[分割區索引](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html)`catalogPartitionPredicate`的選項。當您在一個資料表中有數百萬個分割區時，這會使分割區篩選速度更快。如果您的 `catalogPartitionPredicate` 需要目錄分割區索引尚未支援的述詞語法，您可以同時在 `additional_options` 中使用 `push_down_predicate` 和 `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)。

您可以使用此方法，以啟用在 Data Catalog 中與 Amazon S3 資料存放區的資料表群組。

**groupFiles**  
將 **groupFiles** 設為 `inPartition`，可將檔案分組在 Amazon S3 資料分割區中。如果超過 50,000 個輸入檔案，則 AWS Glue 會自動分組，如下例所示。  

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

**groupSize**  
將 **groupSize** 設定為群組目標大小 (以位元組為單位)。**groupSize** 屬性是選用的，如果沒有提供，AWS Glue 會計算在叢集中使用所有 CPU 核心的大小，同時仍降低 ETL 任務的總數與記憶體內分割區。  
例如，下列會將群組大小設定為 1 MB。  

```
  'groupSize': '1048576'
```
請注意，您應使用計算的結果來設定 `groupsize`。例如：1024 \$1 1024 = 1048576。

**recurse**  
將 **recurse (遞迴)** 設定為 `True` 以在指定 `paths` 作為路徑陣列時，遞迴讀取所有子目錄中的檔案。如果 `paths` 是 Amazon S3 中的物件金鑰陣列或輸入格式為 parquet/orc，則您不需要設定**遞迴**，如下列範例所示。  

```
  '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")
```

**注意**  
`groupFiles`從以下資料格式建立的 DynamicFrames 支援：csv、ion、grokLog、json 和 xml。avro、parquet 和 orc 不支援此選項。

# Amazon S3 的 VPC 端點
<a name="vpc-endpoints-s3"></a>

基於安全考量，許多 AWS 客戶會在 Amazon Virtual Private Cloud 環境 (Amazon VPC) 中執行其應用程式。運用 Amazon VPC，您可以將 Amazon EC2 執行個體啟動到 Virtual Private Cloud 上，此 Virtual Private Cloud 與其他網路 (包括公有網際網路) 在邏輯上隔離。使用 Amazon VPC，您可以控制其 IP 位址範圍、子網路、路由表、網路閘道及安全設定。

**注意**  
如果您在 2013-12-04 之後建立 AWS 帳戶，則每個 AWS 區域都已有一個預設 VPC。您可以立即開始使用預設的 VPC，不需進行任何額外的設定。  
如需詳細資訊，請參閱《Amazon VPC 使用者指南》中的[您的 VPC 和子網路](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html)。

許多客戶對於透過公有的網際網路來傳送和接收資料，都會有合法的隱私與安全性疑慮。客戶可以使用虛擬私有網路 (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 網路中的私有 Amazon S3 端點。您不需要修改 VPC 中在 Amazon EC2 執行個體上執行的應用程式，端點的名稱會保持不變，但轉傳至 Amazon S3 的作業會完全在 Amazon 網路中進行，不會存取公有的網際網路。

如需 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_tw/glue/latest/dg/images/PopulateCatalog-vpc-endpoint.png)


**設定 Amazon S3 的存取**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)：// 開啟 Amazon VPC 主控台。

1. 在左側導覽窗格中選擇 **Endpoints** (端點)。

1. 選擇 **Create Endpoint** (建立端點)，然後按照步驟來建立閘道類型的 Amazon S3 VPC 端點。