暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用 Amazon Web Services CDK,在云上构建 DataOPS 平台

西云数据云计算 2022-02-18
307



本文作者 | 韩医徽



 前言

这是系列文章的第二篇,在第一篇文章“另辟蹊径:在云端使用 SQL 语言实现数据转化,测试和文档维护” 中介绍了做数据准备的 ELT 模式,以及如何利用 DBT 来帮助 Data Analysts 通过 SQL 做数据转化,测试和文档维护。在这篇文章中,将以上一篇为基础,使用 Amazon Web Services CDK 构建一个 Data OPS 方案。

在全球化经济放缓的背景下,传统企业面临着比以往更加激烈的市场竞争,企业进行数字化转型,也就变得越来越重要。

作为一名解决方案架构师,按我的理解,从技术角度去看,数字化转型的本质就是利用大数据的技术来提升企业的运营效率,从而使企业的各个部门,如客户成功、营销和财务部门,都能做出数据驱动的决策。在这个过程中,数据团队是关键推动者。数据团队通常由 Data Infra Engineer 和 Data Analysts 等多个角色组成。

Data Infra Engineer 和 Data Analysts 分工不同:



Data Infra Engineer 团队负责创建和维护基础设施,比如数据仓库,数据湖的基础设施的维护,CICD Pipeline 等;


Data Analysts 拥有业务领域知识,负责为不同的 Stakeholder(如营销和业务开发团队)的分析请求提供服务,从而使公司能够做出数据驱动的决策。

以下将向大家介绍如何通过 CDK,使用 Git, CodeBuild, Fargate, Airflow 等服务来构建一个 DataOPS 平台,从而打破 Data Infra Engineer 和 Data Analysts 之间的障碍,提高数据分析的效率。


DataOPS 平台参考架构


架构概述


本文提出了一个实现 DataOPS 平台的参考架构,有如下特点:
1、Data Analysts 可以利用他们的业务领域知识,使用他们擅长的语言(SQL)编写对应的代码,而不需要关系底层的 Infra 的问题;
2、Data Analysts 编写完代码之后,提交到 Git 仓库,可以自动触发 CI 的流程,变成可运行,可部署的状态,而不需要关系 CI 的流程,不需要关系底层的 Infra;
3、Data Analysts 可以使用自身熟悉的软件(Airflow), 编写调度的 DAG,在进行调度的时候,Airflow 会自动的基于 Serverless 的 Fargate 执行任务,Infra 会根据要执行的任务数量自动扩展,不需要 Data Analysts 干预;
4、Data Infra Engineer 可以使用 Infra As Code 的方式创建维护所有的 Infra 资源,包括 CICD 流程,ECR 仓库,Redshift 集群,ECS 集群等, 而无需手工通过控制台进行操作。

架构图及流程说明



▼Data Infra Engineer

通过 CDK 创建 DataOPS 平台, 主要组件包括:
  • Redshift 集群
  • CodeCommit, CodeBuild,用于构建 Data Analysts 开发的 DBT 工程的持续集成流程
  • ECR,用于存放管理 Data Analysts 开发的 DBT 工程的 Docker Image
  • MWAA,用于供数据开发人员调度 DBT 任务的 Airflow 集群
  • ECS Cluster, 用于运行 DBT Task


▼Data Analysts

在 Data Infra Engineer 使用 CDK 创建好 DataOPS 平台之后,Data Analysts 大致操作流程如下:

1、Data Analysts 使用 SQL 基于 DBT 框架编写代码,推送到 GitCommit;
GitCommit 会自动触发 CodeBuild,下载代码,进行编译,生成 container 镜像,并推送到 ECR 仓库;
2、Data Analysts,编写 Airflow 的 DAG,并上传到 S3;
3、Data Analysts,在 Airflow 中管理触发 DAG;
Airflow 会自动在 ECS Cluster 中创建 Task,运行 DBT 任务。


使用 Amazon Web Services CDK
构建 Data OPS 方案


笔者也实现了上述架构,源代码在Github公开,供大家参考,其中:

● elt-dbt-redshift-demo-for-data-engineer 为 Data Infra Engineer 提供了参考实现;

↑扫码查看源代码

elt-dbt-redshift-demo-for-data-analysts 为 Data Analysts 提供了参考实现;

↑扫码查看源代码

↓↓↓接下来详细演示如何在云上构建并使用 DataOPS 平台:


▼CDK 开发环境搭建

开发 Amazon Web Services CDK 需要先安装 Amazon Web Services CDK CLI,利用  Amazon Web Services CDK CLI 可以生成对应的 CDK 的 Project。


Amazon Web Services CDK CLI 的安装依赖于 Node.js,所以在您的开发环境需要先安装 node.js。node.js 的安装可扫码参看官方教程:


安装好 node.js 之后,可以直接使用 如下命令安装 Amazon Web Services CDK CLI:

npm install -g aws-cdk  #安装cdk cli

cdk --version #查看版本


安装 CDK CLI 后,需要通过 Amazon Web Services configure 命令配置开发环境的用户权限,详情请扫码参考:


Data Infra Engineer 使用 CDK 构建 Data OPS 平台

npm install -g yarn

npm install -g npx

git clone https://github.com/readybuilderone/elt-dbt-redshift-demo-for-data-engineer.git

cd elt-dbt-redshift-demo-for-data-engineer

npx projen

npx cdk bootstrap aws://<ACCOUNT-NUMBER>/<REGION> --profile <YOUR-PROFILE>

npx cdk deploy  --profile <YOUR-PROFILE>

注意:大家需要替换为自己环境的值。


整个过程大约需要 40 分钟左右,运行完成之后,命令行会返回:
  • 存放 Airflow Dag 的 S3 Bucket 的名称
  • ECS Cluster 的名称
  • ECS Task Definition 名称
  • Redshift 的所在的 Subnet 的 ID


至此,Data Infra Engineer 已经使用 CDK 搭建完成 Data OPS 平台,您可以登入到控制台进行相应验证。


Code Commit:CDK 创建了一个空的 CodeCommit,供 Data Analysts 使用。


Code Build:CDK 创建了 CodeBuild Project,会在 Data Analysts 提交代码到 CodeCommit 后,自动触发,打包成 container image。


ECR Repo:CDK 创建了空的 ECR Repo,用来存放 CodeBuild 生成的 container image。


ECS Cluster:CDK 创建了 ECS Cluster,和对应的 Task 用来运行 dbt 的 container 任务。


MWAA:CDK 创建了 MWAA,其中 DAG 为空。


Redshift:CDK 创建了Redshift集群,但是public schema之下,并没有任何的table。


↓↓↓DataOPS 平台创建成功,接下来演示 Data Analysts 的部分。


▼Data Analysts 利用 Data OPS 平台进行项目开发


推送代码到 CodeCommit
Data Analysts 推送代码到 CodeCommit 之后,应该自动触发 CodeBuild 生成 container image,推送到 ECR。


Data Analysts 使用的 Sample 代码托管在 Github,在配置好 CodeCommit 权限(如何配置可参考官方文档)之后,可以采用如下命令推送到 CodeCommit:
扫码访问 Github
↑扫码查看官方文档



git clone https://github.com/readybuilderone/elt-dbt-redshift-demo-for-data-analysts.git

cd elt-dbt-redshift-demo-for-data-analysts

git remote -v

git remote add codecommit <YOUR-CODECOMMIT-SSH-ADDRESS>

git push codecommit



仔细观察下 elt-dbt-redshift-demo-for-data-analysts 代码,可以发现 Image 内的是一个标准的 DBT Project。


Data Analysts 不需要改变任何习惯,只需要开发对应的 model,并推送到 Git,就可以出发持续集成的流程。


想要了解 DBT Project 可以参考上一篇文章:另辟蹊径: 在云端使用 SQL 语言实现数据转化,测试和文档维护, 本篇文章目的在于演示 DataOPS 平台,就使用 DBT 的 sample model,在空的 Redshift 中创建测试 Table。

观察 DataOPS 过程
在 push 之后,进入 CodeCommit 查看代码更新, 可以看到代码已经成功推送到 CodeCommit:


进入 CodeBuild 查看,会发现已经自动构建 container image,并推送到了 ECR:


进入到 ECR 中查看,会发现刚刚构建的 container image:


Data Analysts 构建 Airflow DAG,触发 DBT 任务,使用 Fargate 运行 DBT 任务
在完成上述步骤之后,Data Analysts 可以使用自己熟悉的 Airflow 来调度 DBT。
示例 Airflow 的 DAG 如下:

elt-dbt.py
import os
from airflow import DAG
from airflow.contrib.operators.ecs_operator import ECSOperator
from airflow.operators.bash_operator import BashOperator
from airflow.utils.dates import days_ago
from datetime import timedelta

default_args = {
"owner": "airflow",
"depends_on_past": False,
"start_date": days_ago(2),
"retries": 0,
"retry_delay": timedelta(minutes=5),
}

dag = DAG(
"redshift_transformations",
default_args=default_args,
description="Runs dbt container",
schedule_interval=None,
is_paused_upon_creation=False,
)

bash_task = BashOperator(task_id="run_bash_echo", bash_command="echo 1", dag=dag)
post_task = BashOperator(task_id="post_dbt", bash_command="echo 0", dag=dag)

dbt_top_events = ECSOperator(
task_id="dbt_top_events",
dag=dag,
aws_conn_id="aws_ecs",
cluster="dataops-ecs-cluster",
task_definition="dataops-task",
launch_type="FARGATE",
overrides={

},
network_configuration={
"awsvpcConfiguration": {
"subnets": ["<YOUR-SUBNET-ID>", "<YOUR-SUBNET-ID>"],
},
},
awslogs_stream_prefix="ecs/dbt-cdk-container",
)

bash_task >> dbt_top_events >> post_task

注意:您需要替换为自己环境的值(Data Infra Engineer 使用 CDK 创建 DataOPS 平台时的返回值)


替换好之后,将 elt-dbt.py 上传到 Airflow 的 Bucket 中(Bucket Name 见 Data Infra Engineer 使用 CDK 创建 DataOPS 平台时的返回值)。
aws s3 cp ./elt-dbt.py S3://<YOUR-BUCKET>/dags/ --profile <YOUR-PROFILE>


进入 Airflow,稍等片刻,可以看到对应的 DAG。


在 Airflow 中触发 DAG:


可以看到 DAG 已经被执行:


在运行 dbt_top_events 的阶段,进入 ECS,可以看到 dataops-task 在运行:


在 DAG 执行完成之后,进入 RedShift 查看验证结果:


可以看到,my_fist_dbt_model 和 my_second_dbt_model 已经生成,DBT 任务执行成功。


总结


在本篇文章中,提供了 DataOPS 的一个参考实现,Data Infra Engineer 可以使用 CDK 方便地创建维护 Infra,Data Analysts 基于这个平台,可以使用自己熟悉的语言和调度工具,进行开发。提交到 Git 之后,可以自动触发持续集成的后续任务,可以通过 Airflow 使用 Fargate 运行对应的任务,而不需要关心 Infra 层面的问题,希望这个方案可以帮助到大家。


作者介绍

韩医徽

亚马逊云科技解决方案架构师,负责亚马逊云科技合作伙伴生态系统的云计算方案架构咨询和设计,同时致力于亚马逊云科技云服务在国内的应用和推广。


推荐阅读

另辟蹊径:在云端使用 SQL 语言实现数据转化,测试和文档维护


- END -






长按识别左侧二维码

关注我们>>





关于西云数据(NWCD)]

宁夏西云数据科技有限公司(简称“西云数据”)是亚马逊云科技中国(宁夏)区域云服务的运营方和服务提供方,作为西云数据的战略技术合作伙伴,亚马逊云科技向西云数据提供技术、指导和专业知识。西云数据成立于 2015 年,是一家持有互联网数据中心服务和互联网资源协作服务牌照的云服务提供商。2017 年 12 月 12 日, 西云数据正式推出亚马逊云科技中国(宁夏)区域云服务,现已开通 3 个可用区。西云数据市场销售总部设立于北京,在全国多地设有分支机构以服务全国各地的企业客户。


西云数据致力于将世界先进的 Amazon Web Services 云计算技术带给中国客户,为客户提供优质、安全、稳定、可靠的云服务,全力支持中国企业和机构的创新发展。


关于亚马逊云科技]

15 年多以来,亚马逊云科技(Amazon Web Services)一直是世界上以服务丰富、应用广泛而著称的云平台。亚马逊云科技一直不断扩展其服务组合以支持几乎云上任意工作负载,目前提供了超过 200 项全功能的服务,涵盖计算、存储、数据库、联网、分析、机器人、机器学习与人工智能、物联网、移动、安全、混合云、虚拟现实与增强现实、媒体、以及应用开发、部署与管理等方面,遍及 25 个地理区域的 80 个可用区(AZ),并已公布计划在澳大利亚、印度、印度尼西亚、西班牙、瑞士和阿拉伯联合酋长国新建 6 个区域、18 个可用区。全球数百万客户,包括发展迅速的初创公司、大型企业和领先的政府机构都信赖亚马逊云科技,通过亚马逊云科技的服务强化其基础设施,提高敏捷性,降低成本。欲了解亚马逊云科技的更多信息,请访问:http://aws.amazon.com。


点分享
点收藏
点点赞
点在看
文章转载自西云数据云计算,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论