5

我试图在 AWS Glue 的工作中使用 boto3 来调用 Lambda 函数但没有结果。

我上传了一个包含库的 zip:

就像 AWS 的例子一样

并且没有拉链。

错误是“无法加载数据:端点”。

我试图在没有 zip 的情况下调用,但这会导致超时异常。

import boto3
client = boto3.client('lambda' , region_name='us-east-1')
r_lambda = client.invoke(FunctionName='S3GlueJson')

有人能帮我吗 ?

4

2 回答 2

0

在 Python 中,使用Boto3 Lambda 客户端 'invoke()'。例如,您可以创建一个Lambda 容器,然后从 Glue 作业中调用它:

import boto3
import pandas as pd

lambda_client = boto3.client('lambda',region_name='us-east-1') 

def get_predictions( df ):
    # Call getPredictions Lambda container
    response = lambda_client.invoke(
        FunctionName='getPredictions',
        InvocationType='RequestResponse',
        LogType='Tail',
        Payload=df
    )
    logger.info('Received response from Lambda container.')
    data = response["Payload"].read().decode('utf-8')
    x = json.loads(data)
    df_pred = pd.DataFrame.from_dict(x)
    return df_pred

dfjson = df.to_json()
df_pred = get_predictions( dfjson )
df_pred.head()
于 2021-05-12T18:36:07.753 回答
-1

如果您想从 Lambda 函数调用 Glue 作业,可以这样做:

import boto3
glue = boto3.client(service_name='glue', region_name='us-east-1',
              endpoint_url='https://glue.us-east-1.amazonaws.com')

#Start Job
myNewJobRun = glue.start_job_run(JobName=JOB_NAME)

#Get current state of Job, to be sure it's running
status = glue.get_job_run(JobName=JOB_NAME, RunId=myNewJobRun['JobRunId'])
logger.info('JOB State {}: {}'.format(
JOB_NAME, status['JobRun']['JobRunState']))

由于作业执行可能会延迟一段时间才能完成,因此最好不要等待 Lambda 函数完成。

于 2020-04-01T18:46:13.210 回答