Como falo para acessar os buckets Solicitante paga do Amazon S3 do AWS Glue, Amazon EMR ou Amazon Athena?

2 minuto de leitura
0

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?

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos