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