使用AWS Glue调用Lambda函数

时间:2017-12-02 04:45:32

标签: aws-lambda boto3 aws-glue

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

我上传了一个带有库的zip:

Like the examples by AWS

没有拉链。

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

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

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

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

您是否尝试过针对上述Lambda函数从AWS Lambda控制台中增加超时时间?在这里,您想从Lambda函数实现什么。更多详细信息将有助于更好地解决问题。

答案 1 :(得分:0)

如果要从Lambda函数调用胶粘作业,可以这样做:

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函数完成。

答案 2 :(得分:0)

在 Python 中,使用 Boto3 Lambda client 'invoke()'。例如,您可以创建一个 Lambda container,然后从 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()