在 Airflow 中创建到 AWS ec2 实例的 SSH 连接

时间:2021-04-09 06:30:39

标签: python airflow airflow-operator apache-airflow-xcom

我有一个在 AWS ec2 实例上运行的常规 ETL 作业。

工作流程如下所示:

  1. 使用 EC2StartInstanceOperator 运算符启动 ec2 实例。
  2. 使用包含在 boto3 中的 PythonOperator 函数找出公共 IP。该运营商将 IP 推送到 XCOM。
  3. 使用公共 IP 建立 SSH 挂钩并使用 SSHOperator 运行远程命令。
  4. 完成后使用 EC2StopInstanceOperator 停止 ec2 实例。

上述问题是:

  1. SSH 钩子(Airflow 2.0 中的 airflow.providers.ssh.hooks.ssh.SSHHook)无法访问 XCOM,只有操作员可以。
  2. AWS ec2 实例不会在两次运行之间重新分配相同的公共 IP,因此我必须在每次运行期间运行 PythonOperator 以找出公共 IP。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用 SSHOperatorremote_host 参数来设置要连接的主机。此设置“将替换在 ssh_hook 中定义或在 ssh_conn_id 连接中预定义的 remote_host。”

remote_host 参数是模板化的,因此您可以从 XCOM using a template macro 读取 IP。