AWS Lambda和Apache Airflow集成

时间:2018-03-05 17:00:44

标签: lambda airflow

想知道是否有人可以对这个问题有所了解:

我正在尝试找到Airflow REST API URL以启动DAG以从AWS Lambda函数运行。

到目前为止,从查看Apache孵化器站点提供的所有相关文档,解决问题的唯一指导是在Lambda(python 3.6)代码中使用此URL结构:

Apache实验API:https://airflow.apache.org/api.html#endpoints

基于该链接,语法应为:

http://airflow_hostname/api/experimental/dags/<DAG_ID>/

但是,无法从我的AWS Lambda函数启动特定DAG,任何帮助/指导或指针都会很棒。

2 个答案:

答案 0 :(得分:2)

在Airflow 1.10中,以下发布请求将起作用:

.data() std::string

您需要传递一个空的JSON字符串,否则发布请求将失败。

答案 1 :(得分:1)

这里只是一个后续...这篇文章对我也有帮助。当前答案提到POST正文需要JSON字符串(是否为空)……这是正确的。另一个很微妙的地方是,OP中的URL缺少该URL的“ / dag_runs”结尾部分。

为澄清起见,这是一个简单的AWS lambda函数,该函数调用名为“ hello_world”的Airflow DAG:

import os
from botocore.vendored import requests
import json

def lambda_handler(event, context):
    print("Event Passed to Handler: " + json.dumps(event))
    data = {}
    url = 'http://ec2-11-111-11-111.us-east-2.compute.amazonaws.com:8080/api/experimental/dags/hello_world/dag_runs'
    print('sending POST request: ' + url)
    r = requests.post(url, json.dumps(data))
    print('response:')
    print(r)
    return r.status_code