Como falo para acessar os buckets Solicitante paga do Amazon S3 do AWS Glue, Amazon EMR ou Amazon Athena?
Quero acessar um bucket Solicitante paga do Amazon Simple Storage Service (Amazon S3) do AWS Glue, Amazon EMR ou Amazon Athena.
Breve descrição
Para acessar os buckets do S3 que têm Solicitante paga ativado, todas as solicitações do bucket devem ter o cabeçalho Solicitante paga.
Resolução
AWS Glue
As solicitações do AWS Glue para o Amazon S3 não incluem o cabeçalho Solicitante paga por padrão. Sem esse cabeçalho, uma chamada de API para um bucket de Solicitante paga falha com uma exceção AccessDenied. Para adicionar o cabeçalho Solicitante paga a um script ETL, use hadoopConfiguration().set() para ativar fs.s3.useRequesterPaysHeader na variável GlueContext ou na variável de sessão do Apache Spark.
GlueContext:
glueContext._jsc.hadoopConfiguration().set("fs.s3.useRequesterPaysHeader","true")
Sessão Spark:
spark._jsc.hadoopConfiguration().set("fs.s3.useRequesterPaysHeader","true")
Veja a seguir um exemplo de como usar o cabeçalho em um script ETL. Substitua os seguintes valores:
database_name: o nome do seu banco de dados your_table_name: o nome da sua tabela s3://awsdoc-example-bucket/path-to-source-location/: o caminho para p bucket de origem s3://awsdoc-example-bucket/path-to-target-location/: o caminho para o 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 a seguinte propriedade em /usr/share/aws/emr/emrfs/conf/emrfs-site.xml:
<property> <name>fs.s3.useRequesterPaysHeader</name> <value>true</value> </property>
Athena
Para permitir que os membros do grupo de trabalho consultem os buckets de Solicitante paga, escolha Habilitar consultas nos buckets de Solicitante paga no Amazon S3 ao criar o grupo de trabalho. Para obter mais informações, consulte Criar um grupo de trabalho.
Informações relacionadas
Fazer download de objetos em buckets Solicitante paga
Como faço para solucionar erros 403 de acesso negado do Amazon S3?
Conteúdo relevante
- AWS OFICIALAtualizada há 8 meses
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 4 meses