我尝试在 AWS Lambda 上运行以下脚本,但不幸的是,它没有成功执行。如果脚本有问题需要从 Lambda 执行一些更改,任何人都可以帮助我修复或纠正我吗?
#!/usr/bin/env python3
import boto3
client = boto3.client('athena')
def run_query(query, database, s3_output):
response = client.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': 'database'
},
ResultConfiguration={
'OutputLocation': s3_output,
}
)
print('Execution ID: ' + response['QueryExecutionId'])
return response
#Athena configuration
s3_input = 's3://smathena/cf-ant-prod/'
s3_ouput = 's3://smathena/athenatest/'
database = 's3_accesslog'
table = 'test_output1'
#Athena database and table definition
create_database = "CREATE DATABASE IF NOT EXISTS %s;" % (database)
delete_table = "drop table %s.%s;" % ( database, table )
create_table = \
"""CREATE EXTERNAL TABLE IF NOT EXISTS %s.%s (
`Date` DATE,
ScContentLen BIGINT,
ScRangeStart BIGINT,
ScRangeEnd BIGINT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '%s'
TBLPROPERTIES ('skip.header.line.count' = '2');""" % ( database, table, s3_input )
#Query definitions
query_1 = "SELECT * FROM %s.%s where CAST(status AS VARCHAR) like '404';" % (database, table)
#Execute all queries
queries = [ create_database, delete_table, create_table, query_1 ]
for q in queries:
print("Executing query: %s" % (q))
res = 'run_query(q, database, s3_ouput)'
在 AWS Lambda 上测试时出错:
Response:
{
"errorMessage": "run_query() missing 1 required positional argument: 's3_output'",
"errorType": "TypeError",
"stackTrace": [
" File \"/var/runtime/bootstrap.py\", line 131, in handle_event_request\n response = request_handler(event, lambda_context)\n"
]
}
请求编号: “2cb2175c-8838-470d-a8dd-efdf4c051312”
函数日志: 开始 RequestId:2cb2175c-8838-470d-a8dd-efdf4c051312 版本:$LATEST [错误] 类型错误:run_query() 缺少 1 个必需的位置参数:'s3_output' 追溯(最近一次通话): 文件“/var/runtime/bootstrap.py”,第 131 行,在 handle_event_request 中 响应 = request_handler(事件,lambda_context) END RequestId: 2cb2175c-8838-470d-a8dd-efdf4c051312
import boto3
client = boto3.client('athena')
def run_query(event, context):
response = client.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': 'database'
},
ResultConfiguration={
'OutputLocation': s3_output,
}
)
print('Execution ID: ' + response['QueryExecutionId'])
return event
出现以下错误:
START RequestId:55dbf703-f30c-4106-8873-c685f3d06e4d 版本:$LATEST [错误] NameError:未定义名称“s3_output” 追溯(最近一次通话): 文件“/var/task/lambda_function.py”,第 12 行,在 run_query 中 'OutputLocation':s3_output, 结束 RequestId:55dbf703-f30c-4106-8873-c685f3d06e4d 报告 RequestId:55dbf703-f30c-4106-8873-c685f3d06e4d 持续时间:14.30 毫秒计费持续时间:100 毫秒内存大小:128 MB 使用的最大内存:75 MB 初始化持续时间:649.66 毫秒
最佳答案
这与您之前的问题相同:Error while running a python script on AWS Lambda - Stack Overflow
AWS Lambda 函数具有以下格式:
import boto3
def lambda_handler(event, context):
print(event)
print(context)
当调用 Lambda 函数时,它会调用 lambda_handler()
函数。如果需要,可以更改此函数的名称,但它总是接收这两个传入参数:event
和 context
根据调用 Lambda 函数的方式,事件
的内容包含“传递到”Lambda 函数的信息。例如:
您似乎想在函数中使用三个值:query, database, s3_output
这些值将需要通过调用 Lambda 函数的任何方式传递给 Lambda 函数。然后该函数可以通过 event
参数检索这些值。
https://stackoverflow.com/questions/63599039/
相关文章:
markdown - 如何在 Sublime Text 3 中为 Markdown 启用 Emmet
php - 如何使用 line bot webhook 请求在线路组中使用 @mention/@ta
python - 将 PNG 图像从文件夹转换为 JPG - Python
java - 致命异常 : java. lang.IllegalArgumentException
swift - 如何比较 Result 和 .succeed in swift
reactjs - 如何在 React Navigation 5 中将图像添加到抽屉?
apache-flink - Apache Flink JobListener 无法正常工作
javascript - 从 javascript 到 mssql 的瑞典字符 - 在数据库表中显示