Post 带参数的触发器dag
我正在使用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的代码 打印结果的DAGPost 带参数的触发器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属
谷歌云文档中的例子似乎已经过时了。端点期望从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})