Apache Airflow:如何使用另一个任务中的环境变量运行Docker操作符?
我想在Airflow中运行Docker操作符,使用在上一个任务中设置的环境变量download\u path。我怎样才能做到这一点?通过Xcom? 最简单的例子:Apache Airflow:如何使用另一个任务中的环境变量运行Docker操作符?,docker,airflow,airflow-operator,apache-airflow-xcom,Docker,Airflow,Airflow Operator,Apache Airflow Xcom,我想在Airflow中运行Docker操作符,使用在上一个任务中设置的环境变量download\u path。我怎样才能做到这一点?通过Xcom? 最简单的例子: #定义python函数 def make_文件夹(文件夹路径:str,日期:str): 下载路径=文件夹路径+日期 返回(下载路径) os.mkdir(下载路径) #Python运算符 task_1=蟒蛇算子( task\u id=“制作文件夹”, 提供上下文=False, python\u callable=make\u文件夹, o
#定义python函数
def make_文件夹(文件夹路径:str,日期:str):
下载路径=文件夹路径+日期
返回(下载路径)
os.mkdir(下载路径)
#Python运算符
task_1=蟒蛇算子(
task\u id=“制作文件夹”,
提供上下文=False,
python\u callable=make\u文件夹,
op_kwargs={'folder_path':'/my_path','date':'str(datetime.date(datetime.today())'),
xcom_push=True,
xcom\u all=True
)
#download_path作为必要环境变量的docker运算符
任务2=DockerRoperator(
任务_id='docker',
image='file\u处理器:最新',
api_version='auto',
自动删除=错误,
命令=“”,
环境={
“DPATH”:**下载路径**
},
docker_url=”unix://var/run/docker.sock",
网络模式=“网桥”,
xcom_push=True,
xcom\u all=True
)
任务1>>任务2
是的,您需要使用Xcom。试试这个:
task_2 = DockerOperator(
task_id='docker',
image='file_processor:latest',
api_version='auto',
auto_remove=False,
command='',
environment={
'DPATH': '{{ti.xcom_pull(task_ids='make_folder') }}'
},
docker_url="unix://var/run/docker.sock",
network_mode="bridge",
xcom_push=True,
xcom_all=True
)
如果上述操作不起作用,请将上一个任务(make_文件夹)的任务id传递给操作员,并尝试从此处提取:
context['ti'].xcom_pull(prev_task_id)
您确实可以使用
xcom
。task\u实例
对象为此提供了两种方法:xcom\u推送
和xcom\u拉送
要将值推送到xcom
,需要为“python协作”函数提供上下文。这将使函数可以访问task\u实例
对象
DockerOperator
的environment
字段已模板化。这意味着它支持。您可以使用{{task\u instance}}
宏
def make_文件夹(文件夹路径:str,日期:str,**上下文):
下载路径=文件夹路径+日期
os.mkdir(下载路径)
task\u instance=context['task\u instance']
task\u instance.xcom\u push(key=“download\u path”,value=download\u path)
task_1=蟒蛇算子(
task\u id=“制作文件夹”,
提供上下文=True,
python\u callable=make\u文件夹,
op_kwargs={'folder_path':'/my_path','date':'str(datetime.date(datetime.today())')}
)
任务2=DockerRoperator(
任务_id='docker',
image='file\u处理器:最新',
api_version='auto',
自动删除=错误,
命令=“”,
环境={
'DPATH':“{{task\u instance.xcom\u pull(task\u id='make\u folder',key='download\u path')}”
},
docker_url=”unix://var/run/docker.sock",
网络模式=“网桥”
)
任务1>>任务2