

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

AWS Glue for Spark を使用して Amazon S3 内のファイルの読み込みと書き込みを行うことができます。AWSGlue for Spark は、CSV、Avro、JSON、Orc、Parquet など、Amazon S3 に保存されている多くの一般的なデータ形式をそのままでサポートしています。サポートされるデータ形式の詳細については、「[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>

AWS Glue with Spark ジョブで Amazon S3 に接続するには、いくつかの前提条件が必要です。
+ AWS Glue ジョブには、関連する Amazon S3 バケットに対する IAM 権限が必要です。

場合によっては、追加の前提条件を設定する必要があります。
+ クロスアカウントアクセスを設定するときは、Amazon S3 バケットで適切なアクセス制御を行います。
+ セキュリティ上の理由から、Amazon S3 リクエストを Amazon VPC 経由でルーティングすることもできます。このアプローチでは、帯域幅や可用性の課題が生じる場合があります。詳細については、「[Amazon S3 用の VPC エンドポイント](vpc-endpoints-s3.md)」を参照してください。

## Amazon S3 接続のオプションのリファレンス
<a name="aws-glue-programming-etl-connect-s3"></a>

Simple Storage Service (Amazon S3) への接続を指定します。

Amazon S3 はテーブルではなくファイルを管理するため、このドキュメントに記載されている接続プロパティを指定することに加えて、ファイルタイプに関する追加の設定を指定する必要があります。この情報はデータ形式オプションを使用して指定します。形式オプションの詳細については、「[AWS Glue for Spark での入出力のデータ形式に関するオプション](aws-glue-programming-etl-format.md)」を参照してください。AWS Glue データカタログと統合してこの情報を指定することもできます。

接続オプションとフォーマットオプションの違いの例として、[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`」: (オプション) データの圧縮方法を指定します。Simple Storage Service (Amazon S3) ソース用には `"compressionType"` を、Simple Storage Service (Amazon S3) ターゲット用には `"compression"` を使用します。データに標準のファイル拡張子が付いている場合、このオプションは一般的に不要です。指定できる値は `"gzip"` および `"bzip2"` です。特定の形式では、他の圧縮形式がサポートされている場合もあります。機能のサポートの詳細については、データ形式のページを参照してください。
+ `"groupFiles"`: (オプション) 入力ファイルが 50,000 個を超える場合、デフォルトでファイルのグループ化が有効化されます。入力ファイルが 50,000 個未満の場合にグループ化を有効化するには、このパラメータに `"inPartition"` を設定します。入力ファイルが 50,000 個を超える場合に、グループ化を無効にするには、このパラメータを `"none"` に設定します。
+ `"groupSize"`: (オプション) ターゲットグループのサイズ (バイト単位)。デフォルトは、入力データのサイズとクラスターのサイズに基づいて計算されます。入力ファイルが 50,000 個未満の場合、このオプションを有効にするには、`"groupFiles"` を `"inPartition"` に設定する必要があります。
+ `"recurse"`: (オプション) true に設定した場合は、指定したパスの下にあるすべてのサブディレクトリ内のファイルを再帰的に読み取ります。
+ `"maxBand"`: (オプション、詳細設定) このオプションでは、`s3` リストの一貫性が認められるまでの期間をミリ秒単位で指定します。Amazon S3 の結果整合性を担保するために、直前の `maxBand` ミリ秒以内の変更タイムスタンプが付いたファイルが、特に `JobBookmarks` の使用時に追跡されます。ほとんどのユーザーはこのオプションを設定する必要はありません。デフォルトは 900000 ミリ秒 (15 分) です。
+ `"maxFilesInBand"`: (オプション、詳細設定) このオプションは、直前の `maxBand` 秒間に保存するファイルの最大数を指定します。この数を超えた場合、余分なファイルはスキップされ、次のジョブ実行時にのみ処理されます。ほとんどのユーザーはこのオプションを設定する必要はありません。
+ `"isFailFast"`: (オプション) このオプションにより、AWS Glue ETL ジョブがリーダー解析の例外をスローするかどうかを決定します。`true` に設定すると、Spark タスクが 4 回の再試行のうちにデータを正しく解析できなかった場合、ジョブは速やかに失敗します。
+ `"catalogPartitionPredicate"`: (オプション) 読み込みに使用。SQL `WHERE` 句の内容。非常に多数のパーティションを含むデータカタログテーブルから読み込むときに使用されます。データカタログインデックスから一致するパーティションを取得します。[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) メソッド (および他の類似メソッド) のオプション `push_down_predicate` と共に使用します。詳細については、「[カタログのパーティション述語を使用したサーバー側のフィルタリング](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>

[Apache Hive Optimized Row Columnar (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>

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 デベロッパーガイド*」の「[Restoring Archived Objects](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)
+ [Data Catalog テーブルでの Amazon S3 ストレージクラスの除外](#aws-glue-programming-etl-storage-classes-table)

## 動的フレームの作成時の Amazon S3 ストレージクラスの除外
<a name="aws-glue-programming-etl-storage-classes-dynamic-frame"></a>

ダイナミックフレームの作成時に Amazon S3 のストレージクラスを除外するには、`excludeStorageClasses` で `additionalOptions` を使います。AWS Glue では指定されたストレージクラスに対応するファイルを、独自の Amazon S3 `Lister` の実装を使用して自動的にリストアップし、除外します。

次に、動的フレームの作成時に `GLACIER` および `DEEP_ARCHIVE` ストレージクラスを除外する、Python および Scala の例を示します。

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()
```

## Data Catalog テーブルでの Amazon S3 ストレージクラスの除外
<a name="aws-glue-programming-etl-storage-classes-table"></a>

AWS Glue ETL のジョブによるストレージクラスの除外は、AWS Glue Data Catalog のテーブルパラメータとして指定できます。このパラメータは、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 マネジメントコンソール にサインインし、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. **[Apply]** (適用) を選択します。

# AWS Glue での ETL 出力のパーティションの管理
<a name="aws-glue-programming-etl-partitions"></a>

パーティション分割は、データセットを整理して効率的にクエリを実行可能にする重要な手法です。1 つまたは複数の列の個別の値に基づいて、データを階層形式のディレクトリ構造に整理します。

たとえば、Amazon Simple Storage Service (Amazon S3) のアプリケーションログを、年、月、日で分類しながら、日付についてパーティション化できます。次に 1 日分のデータに対応するファイルを `s3://my_bucket/logs/year=2018/month=01/day=23/` などのプレフィックス別に配置します。Amazon Athena、Amazon Redshift Spectrum、そして AWS Glue などのシステムでは、基になるデータ全体を Amazon S3 から読み取ることなく、これらのパーティションを使用してパーティション値でデータをフィルタリングできます。

クローラは、ファイルタイプとスキーマを推定するだけでなく、AWS Glue Data Catalog を構成する際に、データセットのパーティション構造も自動的に特定します。これにより出力されるパーティション列に対しては、AWS Glue ETL ジョブやクエリエンジン (Amazon Athena など) からクエリを実行できます。

テーブルのクロールが完了すると、クローラが作成したパーティションを表示できます。AWS Glue コンソールの左のナビゲーションペインで、[**Tables**] (テーブル) をクリックします。クローラで作成されたテーブルを選択した後、[**View Partitions**] (パーティション) の表示をクリックします。

Apache Hive 形式のパーティション分割されたパス (`key=val` 形式) の場合、クローラはキー名を使用して自動的に列名を事前設定します。それ以外の場合は、`partition_0`、`partition_1` などのデフォルト名が使用されます。コンソールでデフォルトの名前を変更できます。そのためには、テーブルに移動します。**[インデックス]** タブにインデックスが存在するかどうかを確認します。ある場合は、削除してから続行する必要があります (後で新しい列名を使用して再作成できます)。次に、**[スキーマの編集]** を選択し、そこでパーティション列の名前を変更します。

次に、ETL スクリプトでパーティション列をフィルタリングできます。パーティション情報は Data Catalog に格納されるため、パーティション列を `DynamicFrame` に含めるには `from_catalog` API 呼び出しを使用します。例えば、`create_dynamic_frame.from_options` ではなく `create_dynamic_frame.from_catalog` を使用します。

パーティション化は、データスキャンを減らす最適化手法です。この手法が適切であることを特定するプロセスの詳細については、「AWS 規範的ガイダンス」の「Best practices for performance tuning AWS Glue for Apache Spark jobs」ガイドにある「[Reduce the amount of data scan](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 でフィルタリングする代わりに、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)
```

これによって作成される DynamicFrame では、Data Catalog のパーティションのうち、述語式を満たすものだけがロードされます。ロードするデータのサブセットを絞り込む度合いに応じて、処理時間を大幅に短縮できる場合があります。

述語式として、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 にあるそれらのパーティションからファイルをリストする前に適用されます。テーブルに多数のパーティションがある場合、カタログパーティションのリストに、時間的なオーバーヘッドが余計に発生する可能性があります。このオーバーヘッドに対処するには、`catalogPartitionPredicate` オプションを指定して AWS Glue Data Catalog の[パーティションインデックス](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html)を使用しながら、サーバー側のパーティションでプルーニングを行います。1 つのテーブルに数百万のパーティションがある場合、これにより、パーティションのフィルタリングを大幅に高速化できます。カタログのパーティションインデックスではまだサポートされていない述語構文が、`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>

テーブルのプロパティを設定しておくと、Amazon S3 データストアからファイルが読み取られる際に、AWS Glue の ETL ジョブでそれらのファイルをグループ化させることができます。これらのプロパティを使用すると、各 ETL タスクでは入力ファイルのグループを単一のインメモリパーティションに読み取ることができます。これは、Amazon S3 データストアに多数の小さいファイルがある場合に便利です。特定のプロパティを定義する際には、Amazon S3 データパーティション内のファイルをグループ化し、そのグループの読み取り用のサイズを設定することを AWS Glue に指示します。また、`create_dynamic_frame.from_options` メソッドを使用した Amazon S3 データストアからの読み取りのために、これらのオプションを設定することもできます。

テーブルのファイルをグループ化するには、テーブル構造のパラメータフィールドにキーと値のペアを設定します。テーブルのパラメータフィールドに値を設定するには、JSON 表記を使用します。テーブルのプロパティを編集する詳しい方法については、「[テーブルの詳細の表示と管理](tables-described.md#console-tables-details)」を参照してください。

このメソッドを使用すると、Amazon S3 データストアにある Data Catalog でテーブルをグループ化できます。

**groupFiles**  
Amazon S3 データパーティションにあるファイルのグループ化を有効にするには、**groupFiles** に `inPartition` を設定します。入力ファイル数が 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** を設定する必要はありません。  

```
  '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` は、csv、Ion、grokLog、json、および xml のデータ形式から作成された DynamicFrames でサポートされています。このオプションは、avro、parquet、orc ではサポートされていません。

# Amazon S3 用の VPC エンドポイント
<a name="vpc-endpoints-s3"></a>

セキュリティ上の理由から、多くの AWS ユーザーがアプリケーションを Amazon Virtual Private Cloud 環境 (Amazon VPC) 内で実行しています。Amazon VPC を使用すると、Amazon EC2 インスタンスを仮想プライベートクラウドで作成できます。そのため、パブリックインターネットなどの他のネットワークから論理的に分離されます。Amazon VPC を使用すると、IP アドレスの範囲、サブネット、ルーティングテーブル、ネットワークゲートウェイ、セキュリティ設定を適切に管理できます。

**注記**  
2013 年 12 月 4 日より後に AWS アカウントを作成した場合は、各 AWS リージョンにデフォルトで VPC が用意されています。追加設定なしにデフォルトの 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 エンドポイントを作成する際、リージョン内の Amazon S3 エンドポイント (例: *s3.us-west-2.amazonaws.com*) に対するリクエストはすべて、Amazon ネットワーク内のプライベートの Amazon S3 エンドポイントにルーティングされます。VPC の Amazon EC2 インスタンスで実行されているアプリケーションを変更する必要はありません。エンドポイント名は変わりませんが、Amazon S3 へのルーティングは完全に Amazon ネットワーク内で行われ、パブリックインターネットにアクセスすることはありません。

エンドポイントの詳細については、Amazon VPC ユーザーガイドの「[VPC Endpoints](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)」を参照してください。

AWS Glue が VPC エンドポイントを使用して Amazon S3 にアクセスする様子を、次の図に示します。

![\[ネットワークトラフィックフローは、Amazon S3 への VPC 接続を示しています。\]](http://docs.aws.amazon.com/ja_jp/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 エンドポイントを作成します。