Post 带参数的触发器dag

Post 带参数的触发器dag,post,python-requests,airflow,google-cloud-composer,Post,Python Requests,Airflow,Google Cloud Composer,我正在使用Composer进行ETL过程。我想从Google Cloud中的VM触发一个dag,并使用VM中运行的进程的结果作为我的dag的参数 我一直在遵循谷歌官方指南,了解如何做到这一点: 他们指出,dag_run.conf将包含有关云函数的信息。当我从VM触发时,我正在触发dag发送数据参数的非空值和上下文参数的空值,因此没有如下上下文: trigger_dag{uRouccess_result:uvalue_of_process_result} 会触发dag,但dag_run.conf属

我正在使用Composer进行ETL过程。我想从Google Cloud中的VM触发一个dag,并使用VM中运行的进程的结果作为我的dag的参数

我一直在遵循谷歌官方指南,了解如何做到这一点:

他们指出,dag_run.conf将包含有关云函数的信息。当我从VM触发时,我正在触发dag发送数据参数的非空值和上下文参数的空值,因此没有如下上下文:

trigger_dag{uRouccess_result:uvalue_of_process_result}

会触发dag,但dag_run.conf属性与dag_run.conf属性一样为None,这与它们提供的示例相反

trigger_dag函数只创建对受身份感知代理保护的应用程序的请求

是否还需要执行其他操作,以使气流中的dag在创建dag_run.conf属性时捕获post请求中的有效负载

我在末尾附上代码,也可以在上面提供的链接中找到:

触发DAG的代码

打印结果的DAG


谷歌云文档中的例子似乎已经过时了。端点期望从JSON对象的conf属性读取任何数据。但是,Python函数按原样发送数据,而不将其包装在conf属性中

通过更改行,可以修改Python代码以考虑到这一点

make_iap_request(webserver_url, client_id, method='POST', json=data)

此外,如果您使用的是早于1.10.2的Composer版本,则可能还需要在发送数据之前将其转换为字符串;这可以使用json.dumpsdata完成

我希望这个解决方案对您有效

import datetime

import airflow
from airflow.operators import bash_operator


default_args = {
    'owner': 'Composer Example',
    'depends_on_past': False,
    'email': [''],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': datetime.timedelta(minutes=5),
    'start_date': datetime.datetime(2017, 1, 1),
}

with airflow.DAG(
        'composer_sample_trigger_response_dag',
        default_args=default_args,
        # Not scheduled, trigger only
        schedule_interval=None) as dag:

    # Print the dag_run's configuration, which includes information about the
    # Cloud Storage object change.
    print_gcs_info = bash_operator.BashOperator(
        task_id='print_gcs_info', bash_command='echo {{ dag_run.conf }}')
make_iap_request(webserver_url, client_id, method='POST', json=data)
make_iap_request(webserver_url, client_id, method='POST', json={'conf': data})