Использование AWS lambda для запуска запросов в Афине - PullRequest
0 голосов
/ 14 января 2019

У меня есть очень простая таблица на AWSAthena с тремя столбцами: имя, город и цена. Я могу выполнить следующий простой запрос:

select * from mytestdb.test where city='austin'

и время работы составляет менее 1 секунды. Я создаю лямбда-функцию, используя boto3 для выполнения того же запроса, однако запрос не может быть завершен через 3 минуты

import time
import boto3

# athena constant
DATABASE = 'mytestdb'
TABLE = 'test'
# S3 constant
output='s3://mybucket'


COLUMN = 'city'

def lambda_handler(event, context):
    # get keyword
    keyword = 'Austin'
    # created query
    query = "SELECT * FROM %s.%s where %s = '%s';" % (DATABASE, TABLE, COLUMN, keyword)
    # athena client
    client = boto3.client('athena')


    # Execution
    response = client.start_query_execution(
        QueryString=query,
        QueryExecutionContext={
            'Database': DATABASE
        },
        ResultConfiguration={
            'OutputLocation': output,
        }
    )

    # get query execution id
    query_execution_id = response['QueryExecutionId']
    print(query_execution_id)

    # get execution status


    # get query execution

    query_status = client.get_query_execution(QueryExecutionId=query_execution_id)
    print('Amir2')
    query_execution_status = query_status['QueryExecution']['Status']['State']


    time.sleep(200)        

    if query_execution_status == 'SUCCEEDED':
        result = client.get_query_results(QueryExecutionId=query_execution_id)
    else:
        print('killed')
        client.stop_query_execution(QueryExecutionId=query_execution_id)

    return

таблица имеет всего 10 строк, поэтому она совсем не велика. Является ли правильный способ поиска желаемого значения в зависимости от города или есть лучший способ сделать это?

ОБНОВЛЕНИЕ: вот мое лямбда-разрешение (у него полный доступ к Афине и s3:

{   "Version": "2012-10-17",   "Statement": [
    {
      "Sid": "Stmt1547414166585",
      "Action": [
        "athena:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Sid": "Stmt1547414166586",
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }    ] }
...