¿Cómo puedo acceder a buckets de pagos por solicitante de Amazon S3 desde AWS Glue, Amazon EMR o Amazon Athena?
Quiero acceder a un bucket de pagos por solicitante de Amazon Simple Storage Service (Amazon S3) desde AWS Glue, Amazon EMR o Amazon Athena.
Breve descripción
Para acceder a buckets de S3 con la opción Pago por solicitante activada, todas las solicitudes al bucket deben llevar el encabezado «Pago por solicitante».
Resolución
AWS Glue
Las solicitudes de AWS Glue a Amazon S3 no incluyen el encabezado «Pago por solicitante» de forma predeterminada. Sin este encabezado, en una llamada a la API a un bucket de pago por solicitante se produce un error con la excepción «AccessDenied». Para añadir el encabezado «Pago por solicitante» a un script de ETL, utilice hadoopConfiguration().set() para activar fs.s3.useRequesterPaysHeader en la variable GlueContext o en la variable de la sesión de Apache Spark.
GlueContext:
glueContext._jsc.hadoopConfiguration().set("fs.s3.useRequesterPaysHeader","true")
Sesión de Spark:
spark._jsc.hadoopConfiguration().set("fs.s3.useRequesterPaysHeader","true")
A continuación, se muestra un ejemplo de cómo utilizar el encabezado en un script de ETL. Sustituya los siguientes valores:
database_name: nombre de su base de datos your_table_name: nombre de su tabla s3://awsdoc-example-bucket/path-to-source-location/: ruta al bucket de origen s3://awsdoc-example-bucket/path-to-target-location/: ruta al bucket de destino
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
Defina la siguiente propiedad en /usr/share/aws/emr/emrfs/conf/emrfs-site.xml:
<property> <name>fs.s3.useRequesterPaysHeader</name> <value>true</value> </property>
Athena
Para permitir que los miembros del grupo de trabajo consulten los buckets de pago por solicitante, seleccione Habilitar consultas en buckets de pago por solicitante en Amazon S3 cuando cree el grupo de trabajo. Para obtener más información, consulte Creación de un grupo de trabajo.
Información relacionada
Descarga de objetos en buckets de pago por solicitante
¿Cómo puedo solucionar los errores 403 de acceso denegado de Amazon S3?
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 8 meses
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace un año