gpt4 book ai didi

python - 在 AWS Lambda 函数上执行 Python 脚本时出现问题

转载 作者:行者123 更新时间:2023-12-05 07:02:12 26 4
gpt4 key购买 nike

我尝试在 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() 函数。如果需要,可以更改此函数的名称,但它总是接收这两个传入参数:eventcontext

根据调用 Lambda 函数的方式,事件 的内容包含“传递到”Lambda 函数的信息。例如:

  • 如果函数是从 Amazon S3 调用的,它包含触发事件的存储桶和对象的名称
  • 如果函数是从 Amazon SNS 调用的,它包含发送到 SNS 主题的消息

您似乎想在函数中使用三个值:query, database, s3_output

这些值将需要通过调用 Lambda 函数的任何方式传递给 Lambda 函数。然后该函数可以通过 event 参数检索这些值。

关于python - 在 AWS Lambda 函数上执行 Python 脚本时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63599039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com