New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Come posso accedere ai bucket con Pagamento a carico del richiedente in Amazon S3 da AWS Glue, Amazon EMR o Amazon Athena?
Desidero accedere a un bucket con Pagamento a carico del richiedente in Amazon Simple Storage Service (Amazon S3) da AWS Glue, Amazon EMR o Amazon Athena.
Breve descrizione
Per accedere ai bucket S3 con Pagamento a carico del richiedente attivato, tutte le richieste al bucket devono avere l'intestazione Pagamento a carico del richiedente.
Soluzione
AWS Glue
Le richieste di AWS Glue ad Amazon S3 non includono l'intestazione Pagamento a carico del richiedente per impostazione predefinita. Senza questa intestazione, una chiamata API a un bucket con Pagamento a carico del richiedente genera un'eccezione AccessDenied. Per aggiungere l'intestazione Pagamento a carico del richiedente a uno script ETL, utilizza hadoopConfiguration().set() per attivare fs.s3.useRequesterPaysHeader nella variabile GlueContext o nella variabile di sessione Apache Spark.
GlueContext:
glueContext._jsc.hadoopConfiguration().set("fs.s3.useRequesterPaysHeader","true")
Sessione Spark:
spark._jsc.hadoopConfiguration().set("fs.s3.useRequesterPaysHeader","true")
L’esempio seguente mostra come utilizzare l'intestazione in uno script ETL. Sostituisci i seguenti valori:
database_name: il nome del database your_table_name: il nome della tabella s3://awsdoc-example-bucket/path-to-source-location/: il percorso del bucket di origine s3://awsdoc-example-bucket/path-to-target-location/: il percorso del bucket di destinazione
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
Imposta la seguente proprietà in /usr/share/aws/emr/emrfs/conf/emrfs-site.xml:
<property> <name>fs.s3.useRequesterPaysHeader</name> <value>true</value> </property>
Athena
Per consentire ai membri del gruppo di lavoro di interrogare i bucket con Pagamento a carico del richiedente, scegli Abilita le query sui bucket con Pagamento a carico del richiedente in Amazon S3 quando crei il gruppo di lavoro. Per ulteriori informazioni, consulta Create a workgroup.
Informazioni correlate
Download di oggetti nei bucket con Pagamento a carico del richiedente
Come posso risolvere gli errori 403 Access Denied di Amazon S3?
Contenuto pertinente
- AWS UFFICIALEAggiornata 3 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 3 anni fa