簡體   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