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文件。在

^{pr2}$

然后,在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,否则命令可能会失败 该阶段和存储桶可能会处于一种状态,使以后很难删除

待办事项

欢迎投稿!在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用MVC设计模式观察嵌套对象   java将多个客户端连接到服务器   合并Java Web应用程序   Spring Security中未捕获java AuthenticationSuccessEvent   java Firebase JSON到Arraylist内部的Arraylist,存在对象问题   在Java15的sealedclasses特性中,final类和非密封类之间有什么区别?   java我可以使用数组。copyOf制作二维数组的防御副本?   java球不会在屏幕上移动   Java类如何在同一个文件中包含两个类?   java使用“Character.isWhiteSpace”删除所有空白   java阻止在RealmList中保存时创建领域对象   如何仅在ConnectionFactory上使用Java JMS身份验证   spring可以强制java对象在运行时实现接口吗?   socket无法在JAVA中使用TCP启用双工模式通信