View a markdown version of this page

AWS Glue での Amazon S3 Express One Zone の使用 - AWS Glue

AWS Glue での Amazon S3 Express One Zone の使用

AWS Glue バージョン 5.1 以降では、ETL ジョブから Amazon S3 Express One Zone ディレクトリバケットのデータの読み取りおよび書き込みを行うことができます。S3 Express One Zone は、レイテンシーの影響を受けやすいアプリケーションに 1 桁のミリ秒単位で一貫したデータアクセスを提供する、高パフォーマンスの単一ゾーンの Amazon S3 ストレージクラスです。

前提条件

AWS Glue で S3 Express One Zone を使用するには、次を満たしている必要があります。

  • バージョン 5.1 以降を実行している AWS Glue ジョブ。

  • AWS Glue ジョブと同じリージョンに作成された S3 ディレクトリバケット。ディレクトリバケットは、クロスリージョンアクセスには対応していません。詳細については、「Amazon S3 ユーザーガイド」の「ディレクトリバケットの作成」を参照してください。

  • IAM ロールに対する s3express:CreateSession アクセス許可。S3 Express One Zone がディレクトリバケットに対してアクションを実行すると、ユーザーに代わって CreateSession が呼び出されます。

IAM アクセス許可

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) に置き換えます。

データの読み取りと書き込み

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