apache airflow的定制cdk结构
airflow-cdk的Python项目详细描述
气流cdk
这个项目使得使用Python中的aws cdk通过ECS fargate部署气流变得非常简单。在
使用
有两种主要的使用方法。
独立软件包
对于那些已经熟悉aws cdk的人,添加这个项目
作为依赖项,即pip install airflow-cdk
和/或添加到requirement.txt
并使用FargateAirflow
这样构造。在
fromaws_cdkimportcorefromairflow_cdkimportFargateAirflowapp=core.App()FargateAirflow(app,"airflow-cdk",postgres_password="replacethiswithasecretpassword")app.synth()
cdk deploy
就这样。在
克隆
您还可以克隆此存储库并更改FargateAirflow
构造
心满意足。在
这还为您提供了利用tasks.py
任务的额外好处
使用invoke可以轻松地创建新的dag
i、 e.inv new-dag
然后,您还可以轻松地使用现有的docker compose进行本地开发 对你的设置做了一些小的修改。在
最简单的方法是对上面的app.py
示例进行一行更改
以及docker-compose.yml
文件。在
然后,在docker-compose.yml
文件中,只需删除、注释掉或更改图像名
对于x-airflow
中的image: knowsuchagency/airflow-cdk
行。在
现在,docker-compose build
创建的同一个容器将部署到您的web、worker和ECS上
按cdk deploy
调度映像。在
组件
以下aws资源默认部署为同一集群和vpc内的ecs任务:
- airflow Web服务器任务
- 以及面向internet的应用程序负载平衡器
- 气流调度程序任务
- 气流调节器任务
- (注意)它将根据cpu和内存使用情况自动缩放,默认情况下从1开始一次最多可有16个实例
- 拉比MQ经纪人
- 允许您登录到的应用程序负载平衡器 具有默认用户/pw guest/guest的rabbitmq管理控制台
- rds实例
- s3圆木桶
为什么这么棒?在
除此之外,我们可以使用我们用来编写的相同语言和代码库来描述我们的基础设施 我们的狗?在
因为我们是在幕后使用cloudformation,所以每当我们更改代码或基础结构的一部分时,只有那些 将部署与上次部署不同的更改。在
也就是说,如果我们所做的只是修改我们希望在部署中运行的代码,我们只需重新构建并发布我们的docker
容器(如果我们使用aws_ecs.ContainerImage.from_asset(".")
)之前的容器(如果我们使用aws_ecs.ContainerImage.from_asset(".")
),那么就为我们完成了!在
气流的现有用户将知道在您想要区分 将更改推送到您的代码库,即DAG和实际的基础设施部署。在
我们只需要小心不要在有一些长时间运行的worker任务时进行部署,因为我们不想中断这些任务 fargate将用运行更新代码的新实例替换这些worker实例。 现在基本上没有区别。在
注释
- 在运行
cdk destroy
之前,您需要清空创建的s3 bucket,否则命令可能会失败 该阶段和存储桶可能会处于一种状态,使以后很难删除
待办事项
- 创建自定义组件以将气流部署到ec2集群
- 改进文档
- (可能)将airflow stable helm chart包含为cdk8s图表
欢迎投稿!在
- 项目
标签: