

# AWS Glue での Amazon S3 Express One Zone の使用
<a name="aws-glue-programming-etl-s3-express"></a>

AWS Glue バージョン 5.1 以降では、ETL ジョブから [Amazon S3 Express One Zone](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-high-performance.html#s3-express-one-zone) ディレクトリバケットのデータの読み取りおよび書き込みを行うことができます。S3 Express One Zone は、レイテンシーの影響を受けやすいアプリケーションに 1 桁のミリ秒単位で一貫したデータアクセスを提供する、高パフォーマンスの単一ゾーンの Amazon S3 ストレージクラスです。

## 前提条件
<a name="aws-glue-programming-etl-s3-express-prereqs"></a>

AWS Glue で S3 Express One Zone を使用するには、次を満たしている必要があります。
+ バージョン 5.1 以降を実行している AWS Glue ジョブ。
+ AWS Glue ジョブと同じリージョンに作成された S3 ディレクトリバケット。ディレクトリバケットは、クロスリージョンアクセスには対応していません。詳細については、「*Amazon S3 ユーザーガイド*」の「[ディレクトリバケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-bucket-create.html)」を参照してください。
+ IAM ロールに対する `s3express:CreateSession` アクセス許可。S3 Express One Zone がディレクトリバケットに対してアクションを実行すると、ユーザーに代わって `CreateSession` が呼び出されます。

## IAM アクセス許可
<a name="aws-glue-programming-etl-s3-express-iam"></a>

AWS Glue ジョブの IAM ロールに次のアクセス許可を追加して、S3 Express One Zone ディレクトリバケットへのアクセスを許可します。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3express:CreateSession",
            "Resource": "arn:aws:s3express:*:*:bucket/{{EXAMPLE-BUCKET}}--{{az-id}}--x-s3"
        }
    ]
}
```

{{EXAMPLE-BUCKET}} をディレクトリバケット名に置き換え、{{az-id}} をアベイラビリティーゾーン ID (例: `use1-az4`) に置き換えます。

## データの読み取りと書き込み
<a name="aws-glue-programming-etl-s3-express-usage"></a>

AWS Glue バージョン 5.1 以降では、`s3://` および `s3a://` URI スキームの両方を使用した S3 Express One Zone ディレクトリバケットへのアクセスがサポートされています。追加の設定は必要ありません。

次の例は、AWS Glue ETL ジョブの S3 Express One Zone ディレクトリバケットからデータを読み書きする方法を示しています。

```
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

# S3 Express One Zone directory bucket path
express_path = "s3://EXAMPLE-BUCKET--use1-az4--x-s3/my-data/"

# Read data from S3 Express One Zone
df = spark.read.parquet(express_path)

# Write data to S3 Express One Zone
df.write.mode("overwrite").parquet(express_path + "output/")
```

S3 Express One Zone で DynamicFrames を使用することもできます。

```
# Read with DynamicFrame
dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    connection_options={"paths": [express_path]},
    format="parquet"
)

# Write with DynamicFrame
glueContext.write_dynamic_frame.from_options(
    frame=dynamicFrame,
    connection_type="s3",
    connection_options={"path": express_path + "output/"},
    format="parquet"
)
```