繁体   English   中英

Python/Airflow AttributeError:“AwsLambdaHook”对象没有属性“update_relative”

[英]Python/Airflow AttributeError: 'AwsLambdaHook' object has no attribute 'update_relative'

由于此代码片段位于 elif 循环中,因此我尝试以多种方式对其进行分解,但这一切似乎都归结为 AwsLambdaHook 给我带来了麻烦。 也就是说,即使将所有内容硬编码为仅 lambda 挂钩并删除其他“elif”部分也无济于事。 这是我在 Airflow 中收到的错误:

Broken DAG: [/x/y/z/dag.py] Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/airflow/models/baseoperator.py", line 1267, in set_downstream
    self._set_relatives(task_or_task_list, upstream=False)
  File "/usr/local/lib/python3.7/site-packages/airflow/models/baseoperator.py", line 1211, in _set_relatives
    task_object.update_relative(self, not upstream)
AttributeError: 'AwsLambdaHook' object has no attribute 'update_relative'

使用以下代码从配置中检索作业,j 是在 for 循环中使用的 lambda 函数/胶水作业:

from airflow.providers.amazon.aws.hooks.lambda_function import AwsLambdaHook
[...]
input_job_name = list(jobs[j].keys())[0]
[...]
lambda_step = AwsLambdaHook(function_name = input_job_name,
                    region_name='us-east-1', log_type='None', qualifier='$LATEST',
                    invocation_type='RequestResponse', config=None, aws_conn_id='aws_default')
            start >> lambda_step >> end

我的代码中没有任何地方引用相对上游/下游序列或类似的东西。 我不确定我是否需要,如果需要,在哪里?

您正在使用钩子而不是运算符来为您的 DAG 声明 lambda_step

有允许调用 AWS lambda 函数的AwsLambdaInvokeFunctionOperator 我强烈建议采用这种方法。

您可以将 lambda 步骤编写为:

from airflow.providers.amazon.aws.operators.aws_lambda import AwsLambdaInvokeFunctionOperator

lambda_step = AwsLambdaInvokeFunctionOperator(
    function_name=input_job_name,
    qualifier='$LATEST',
    invocation_type='RequestResponse',
)

另一种方法是在AwsLambdaHook的回调中应用PythonOperator

from airflow.operators.python import PythonOperator

#...

def invoke_lambda_function(**kwargs):
    hook = AwsLambdaHook(aws_conn_id=kwargs.pop('aws_conn_id'))
    result = hook.invoke_lambda(**kwargs)
    return result

lambda_step = PythonOperator(
    python_callable=invoke_lambda_function,
    op_kwargs=dict(
        function_name=input_job_name,
        region_name='us-east-1',
        log_type=None,
        qualifier='$LATEST',
        invocation_type='RequestResponse',
        config=None,
        aws_conn_id='aws_default'
    )
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM