Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Wie kann ich von AWS Glue, Amazon EMR oder Amazon Athena aus auf Amazon S3 Requester Pays-Buckets zugreifen?
Ich möchte über AWS Glue, Amazon EMR oder Amazon Athena auf einen Amazon Simple Storage Service (Amazon S3) Requester Pays-Bucket zugreifen.
Kurzbeschreibung
Um auf S3-Buckets zuzugreifen, für die Requester Pays aktiviert ist, müssen alle Anfragen an den Bucket den Header Requester Pays haben.
Lösung
AWS-Kleber
AWS Glue-Anfragen an Amazon S3 enthalten standardmäßig nicht den Header Requester Pays. Ohne diesen Header schlägt ein API-Aufruf an einen Requester Pays-Bucket mit einer AccessDenied-Ausnahme fehl. Um den Header Requester Pays zu einem ETL-Skript hinzuzufügen, verwenden Sie hadoopConfiguration ().set(), um fs.s3.useRequesterPaysHeader für die GlueContext-Variable oder die Apache Spark-Sitzungsvariable zu aktivieren.
GlueContext:
glueContext._jsc.hadoopConfiguration().set("fs.s3.useRequesterPaysHeader","true")
Spark-Sitzung:
spark._jsc.hadoopConfiguration().set("fs.s3.useRequesterPaysHeader","true")
Im Folgenden finden Sie ein Beispiel für die Verwendung des Headers in einem ETL-Skript. Ersetzen Sie die folgenden Werte:
database_name: der Name Ihrer Datenbank your_table_name: der Name Ihrer Tabelle s3://awsdoc-example-bucket/path-to-source-location/: der Pfad zum Quell-Bucket s3://awsdoc-example-bucket/path-to-target-location/: der Pfad zum Ziel-Bucket
import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from awsglue.dynamicframe import DynamicFrame ## @params: [JOB_NAME] args = getResolvedOptions(sys.argv, ['JOB_NAME']) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args['JOB_NAME'], args) spark._jsc.hadoopConfiguration().set("fs.s3.useRequesterPaysHeader","true") # glueContext._jsc.hadoopConfiguration().set("fs.s3.useRequesterPaysHeader","true") ##AWS Glue DynamicFrame read and write datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "your_database_name", table_name = "your_table_name", transformation_ctx = "datasource0") datasource0.show() datasink = glueContext.write_dynamic_frame.from_options(frame = datasource0, connection_type = "s3", connection_options = {"path":"s3://awsdoc-example-bucket/path-to-source-location/"}, format = "csv") ##Spark DataFrame read and write df = spark.read.csv("s3://awsdoc-example-bucket/path-to-source-location/") df.show() df.write.csv("s3://awsdoc-example-bucket/path-to-target-location/") job.commit()
Amazon EMR
Stellen Sie die folgende Eigenschaft in /usr/share/aws/emr/emrfs/conf/emrfs-site.xml ein:
<property> <name>fs.s3.useRequesterPaysHeader</name> <value>true</value> </property>
Athena
Um Arbeitsgruppenmitgliedern die Abfrage von Requester Pays-Buckets zu ermöglichen, Abfrage von Requester Pays-Buckets in Amazon S3 aktivieren, wenn Sie die Arbeitsgruppe erstellen. Weitere Informationen finden Sie unter Erstellen einer Arbeitsgruppe.
Verwandte Informationen

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 7 Monaten
AWS OFFICIALAktualisiert vor 3 Jahren