Я пытаюсь использовать boto3
, v. 1.7.4, для взаимодействия с AWS Athena с помощью следующего сценария:
import boto3
import botocore
# Test access to the input bucket
bucket = boto3.resource('s3').Bucket('s3_input')
print(list(bucket.objects.all())
client = boto3.client('athena', region_name='us-east-1')
# Create a new database
db_query = 'CREATE DATABASE IF NOT EXISTS france;'
response = client.start_query_execution(
QueryString=db_query,
ResultConfiguration={'OutputLocation': 's3_output'})
# Create a new table
table_query = '''
CREATE EXTERNAL TABLE IF NOT EXISTS france.by_script (`content` string )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES ('separatorChar' = ',')
LOCATION 's3_input';'''
response = client.start_query_execution(
QueryString=table_query,
ResultConfiguration={'s3_output'},
QueryExecutionContext={'Database': 'france'})
При текущих разрешениях моей учетной записи тест для чтениясодержание s3_input
работает хорошо.Я также могу создать базу данных через db_query
, но создание таблицы завершается неудачно со следующим сообщением об ошибке:
Your query has the following errors:FAILED: Execution Error, return
code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
MetaException(message:Got exception: java.io.IOException
com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS
Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code:
AccessDenied; Request ID: [...]), S3 Extended Request ID: [...])
Если я запускаю команду table_query
из консоли, console.aws.amazon.com/athena/home, используя ту же учетную запись, проблем нет, и таблица создана правильно.
Разрешения
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "s3_input"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:HeadBucket"
],
"Resource": "*"
}
]
}
Я был бы радпонять, чего мне здесь не хватаетЗаранее спасибо.