首页/新闻资讯/正文详情

Apache DolphinScheduler 云上部署实战:基于 Terraform 与 Packer 在 AWS 一键搭建调度平台

发布时间:2026/9/23 4:06:27 来源:云帆数科 栏目:资讯中心
Apache DolphinScheduler 云上部署实战:基于 Terraform 与 Packer 在 AWS 一键搭建调度平台
任务调度大数据后端前端【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址https://gitcode.com/gh_mirrors/do/dolphinscheduler点击查看免费下载Apache DolphinScheduler 是一个现代的云原生数据编排平台其官方仓库在 deploy/terraform 目录下提供了完整的 IaC基础设施即代码方案借助Packer 构建预装 DolphinScheduler 的 AMI再通过Terraform 一键拉起 VPC、RDS、S3、ZooKeeper 与各服务组件实例实现 standalone单机或 cluster集群两种模式在 AWS 上的分钟级部署。读完本文你将掌握从编写pkrvars.hcl/tfvars变量文件到构建 AMI、apply 资源、打开 Web UI 的完整实战链路并能对照源码理解每一层基础设施的用途。方案总览两条部署路径官方 Terraform 方案将部署拆分为两个阶段对应仓库中的两套脚本构建 AMI 阶段使用 deploy/terraform/aws/packer/ds-ami-official.pkr.hcl官方发行包或 deploy/terraform/aws/packer/ds-ami-local.pkr.hcl本地构建产物制作自定义 AMI。创建资源阶段使用 deploy/terraform/aws 目录下的.tf文件创建网络、数据库、对象存储、ZooKeeper 以及 DolphinScheduler 各组件master、worker、alert、api、standalone-server的 EC2 实例。整体目录结构如下deploy/terraform/ ├── README.md # 方案总入口 └── aws/ ├── README.md # AWS 部署操作手册 ├── packer/ # 两个 AMI 构建模板 │ ├── ds-ami-official.pkr.hcl │ └── ds-ami-local.pkr.hcl ├── templates/ # cloud-init 用户数据模板 │ ├── cloud-init.yaml │ └── zookeeper/cloud-init.yaml ├── dolphinscheduler-{master,worker,alert,api,standalone}.tf ├── network-main.tf # VPC / 子网 / 路由 ├── rds-main.tf # PostgreSQL RDS ├── s3-main.tf # S3 桶与 IAM 用户 ├── zookeeper-main.tf # 单节点 ZooKeeper演示用 └── *.tf # provider、变量、输出等前置条件在开始之前需要在本地环境安装两个 HashiCorp 工具按官方文档安装即可Packer用于构建 AMI官方仓库要求其版本支持amazon-ebsbuilder 与github.com/hashicorp/amazon插件见 ds-ami-official.pkr.hcl 中required_plugins声明版本要求 0.0.1。Terraform用于编排 AWS 资源当前配置使用的 AWS provider 由 provider-main.tf 定义直接读取aws_access_key、aws_secret_key、aws_region三个变量。同时需要准备好具有相应权限的 AWS 访问密钥Access Key / Secret Key并确认目标区域示例默认使用cn-north-1。第一步构建 DolphinScheduler AMIAMIAmazon Machine Image是本次部署的基础镜像。Packer 会基于 Amazon Linux 2022al2022-ami-*官方镜像安装 Java 8java-1.8.0-amazon-corretto并将 DolphinScheduler 发行包解压到/opt/dolphinscheduler最后对所有start.sh脚本赋予可执行权限。编写 Packer 变量文件首先创建ds-ami.pkrvars.hcl按需填写以下变量cat EOF ds-ami.pkrvars.hcl aws_access_key aws_secret_key aws_region cn-north-1 ds_ami_name my-test-ds-2 # 如果使用官方发行 tar只需把 ds_version 设为你想要的版本号 ds_version 3.1.1 # 如果使用本地构建的发行 tar则把 ds_tar 指向 tar 文件位置 ds_tar ~/workspace/dolphinscheduler/dolphinscheduler-dist/target/apache-dolphinscheduler-3.1.3-SNAPSHOT-bin.tar.gz EOF两个 Packer 模板共有的变量包括aws_access_keyAWS Access Key必填、aws_secret_keyAWS Secret Key必填、aws_region区域默认cn-north-1、ds_ami_nameAMI 名称默认dolphinscheduler-ami。区别在于发行包的来源ds-ami-official.pkr.hcl 使用ds_version变量默认3.1.1构建时通过curl从 Apache 归档地址拉取对应版本的apache-dolphinscheduler-${var.ds_version}-bin.tar.gz并解压到/opt/dolphinschedulerds-ami-local.pkr.hcl 使用ds_tar变量必填通过provisioner file将本地 tar 上传到实例后解压适合验证本地修改过的源码构建产物。两种构建命令使用官方发行包构建packer init --var-fileds-ami.pkrvars.hcl packer/ds-ami-official.pkr.hcl packer build --var-fileds-ami.pkrvars.hcl packer/ds-ami-official.pkr.hcl使用本地构建的发行包构建packer init --var-fileds-ami.pkrvars.hcl packer/ds-ami-local.pkr.hcl packer build --var-fileds-ami.pkrvars.hcl packer/ds-ami-local.pkr.hclpacker init会按模板中的required_plugins自动安装 amazon 插件packer build则执行构建。构建产物是一个名为ds_ami_name的私有 AMI后续 Terraform 通过 os-versions.tf 中的data aws_ami dolphinschedulerowners [self]按var.ds_ami_name过滤且取most_recent来引用它——这正是要求terraform.tfvars中ds_ami_name必须与 Packer 变量文件一致的原因。第二步创建 AWS 资源编写 Terraform 变量文件创建terraform.tfvars注意ds_ami_name必须与上面ds-ami.pkrvars.hcl中保持一致cat EOF terraform.tfvars aws_access_key aws_secret_key aws_region name_prefix test-ds-terraform ds_ami_name my-test-ds ds_component_replicas { master 1 worker 1 alert 1 api 1 standalone_server 0 } EOFds_component_replicas是部署形态的开关当standalone_server设为0、其余组件各设1时部署的是cluster集群模式master / worker / alert / api 四个独立进程通过 ZooKeeper 注册与协作反之若只将standalone_server设为1、其余全为0则部署standalone单机模式——所有服务打包在一个standalone-server进程中。两种模式可以共存例如集群之外再开一台演示机。执行 applyterraform init -var-fileterraform.tfvars terraform apply -var-fileterraform.tfvars -auto-approveterraform init初始化 provider 与模块S3 bucket 使用了社区模块terraform-aws-modules/s3-bucket/aws见 s3-main.tfterraform apply开始创建资源。整个过程会依次完成以下基础设施的编排。资源拓扑Terraform 到底创建了什么对照 deploy/terraform/aws 目录下的.tf文件一次 apply 大致创建以下资源网络层network-main.tf一个 VPC默认 CIDR10.0.0.0/16启用 DNS hostname一个 Internet Gateway公网子网默认 1 个CIDR 从10.0.1.0/24起与私网子网默认 2 个CIDR 从10.0.101.0/24起分别绑定公网/私网路由表各组件实例都落在公网子网并绑定公网 IPvm_associate_public_ip_address默认全为true便于直接访问 UI 与 SSH。数据库层rds-main.tf一个 PostgreSQL 14.5 的 RDS 实例aws_db_instance标识符dolphinscheduler默认db.t3.micro5GB 存储skip_final_snapshot true适合测试场景数据库名、用户、密码分别来自db_name固定dolphinscheduler、db_username默认dolphinscheduler、db_password必填安全组只放行 master、worker、alert、api、standalone 五个安全组访问 5432 端口。对象存储层s3-main.tf一个以dolphinscheduler-test-为前缀的私有 S3 桶force_destroy true方便测试销毁一个名为${name_prefix}-s3的 IAM 用户及一对 Access Key仅对该桶授予s3:*权限这些密钥会通过 cloud-init 注入common.properties作为 DolphinScheduler 的资源存储resource.storage.typeS3。ZooKeeper 层zookeeper-main.tf仅当zookeeper_connect_string为空时创建count var.zookeeper_connect_string ! ? 0 : 1一台 Amazon Linux 2022 实例cloud-init 安装并启动 Docker 后通过 remote-exec 运行docker run ... -p 2181:2181 zookeeper:3.5容器提供单节点 ZooKeeper该变量注释明确提示仅用于演示不要在生产环境使用——生产环境应传入已有的 ZooKeeper 连接串。组件实例层dolphinscheduler-{master,worker,alert,api,standalone}.tf每个组件都包含一个安全组 一个aws_instance实例数量由ds_component_replicas对应键控制并通过user_data注入 templates/cloud-init.yaml 渲染后的启动脚本。各组件端口规划如下组件监听端口安全组放行规则源码位置api-server12345对外 HTTP对0.0.0.0/0开放见 dolphinscheduler-api.tfmaster-server5678仅放行 api 安全组与 worker 安全组见 dolphinscheduler-master.tfworker-server1234仅放行 master 与 api 安全组见 dolphinscheduler-worker.tfalert-server50052–50053仅放行 worker 安全组见 dolphinscheduler-alert.tfstandalone-server12345对外 HTTP对0.0.0.0/0开放见 dolphinscheduler-standalone.tf所有组件实例的 root 卷与 data 卷都启用加密encrypted true默认规格见 dolphinscheduler-variables.tf如 master / worker 默认t2.medium、api / standalone 默认t2.small、alert 默认t2.micro。cloud-init从 AMI 到运行中的服务cloud-init.yaml 是理解整套自动化关键的一环它完成了三件事创建系统用户ds免密 sudo并注入 SSH 公钥来自aws_key_pair由 key-pair-main.tf 动态生成写入两个 systemd 单元dolphinscheduler-schema.serviceoneshot以ds用户执行/opt/dolphinscheduler/tools/bin/upgrade-schema.sh通过SPRING_DATASOURCE_URL等环境变量连接 RDS完成数据库 schema 初始化dolphinscheduler.serviceRequiresdolphinscheduler-schema.service以bash -l /opt/dolphinscheduler/${dolphinscheduler_component}/bin/start.sh启动对应组件进程并注入REGISTRY_ZOOKEEPER_CONNECT_STRINGZooKeeper 地址集群模式下必填、WORKER_ALERT_LISTEN_HOSTalert 服务地址等环境变量Restartalways保证进程崩溃自动拉起runcmd 初始化通过sed批量改写所有common.properties把资源存储切换为 S3 并写入 IAM 密钥、region、桶名随后依次systemctl start dolphinscheduler-schema、systemctl start dolphinscheduler先初始化 schema 再启动服务。因此terraform apply结束后各 EC2 实例上的组件会自动完成注册并对外提供服务无需再手工登录机器配置。第三步打开 DolphinScheduler UIapply 成功后通过 Terraform 的 output 可以拿到 api-server或 standalone-server的公网 DNSopen http://$(terraform output -json api_server_instance_public_dns | jq -r .[0]):12345/dolphinscheduler/uiapi_server_instance_public_dns来自 dolphinscheduler-output.tf 中定义的 output值为aws_instance.api[*].public_dns的列表配合jq取第一个元素拼出完整 URL。默认账号密码为 DolphinScheduler 的初始管理员账号admin/dolphinscheduler123。输入变量全表Inputs以下是 AWS 方案的完整输入变量表来自 deploy/terraform/aws/README.md 与各*-variables.tf文件NameDescriptionTypeDefaultRequiredaws_access_keyAWS access keystringn/ayesaws_regionAWS regionstringcn-north-1noaws_secret_keyAWS secret keystringn/ayesdb_instance_classDatabase instance classstringdb.t3.micronodb_passwordDatabase passwordstringn/ayesdb_usernameDatabase usernamestringdolphinschedulernods_ami_nameName of DolphinScheduler AMIstringdolphinscheduler-aminods_component_replicasReplicas of the DolphinScheduler Componentsmap(number){alert1, api1, master1, standalone_server0, worker1}nods_versionDolphinScheduler Versionstring3.1.1noname_prefixName prefix for all resourcesstringdolphinschedulernoprivate_subnet_cidr_blocksAvailable CIDR blocks for private subnetslist(string)[10.0.101.0/24,10.0.102.0/24,10.0.103.0/24,10.0.104.0/24]nopublic_subnet_cidr_blocksCIDR blocks for the public subnetslist(string)[10.0.1.0/24,10.0.2.0/24,10.0.3.0/24,10.0.4.0/24]nos3_bucket_prefixn/astringdolphinscheduler-test-nosubnet_countNumber of subnetsmap(number){private2, public1}notagsTags to apply to all resourcesmap(string){DeploymentTest}novm_associate_public_ip_addressAssociate a public IP address to the EC2 instancemap(bool){alerttrue, apitrue, mastertrue, standalone_servertrue, workertrue}novm_data_volume_sizeData volume size of the EC2 Instancemap(number){alert10, api10, master10, standalone_server10, worker10}novm_data_volume_typeData volume type of the EC2 Instancemap(string){alertgp2, apigp2, mastergp2, standalone_servergp2, workergp2}novm_instance_typeEC2 instance typemap(string){alertt2.micro, apit2.small, mastert2.medium, standalone_servert2.small, workert2.medium}novm_root_volume_sizeRoot Volume size of the EC2 Instancemap(number){alert30, api30, master30, standalone_server30, worker30}novm_root_volume_typeRoot volume type of the EC2 Instancemap(string){alertgp2, apigp2, mastergp2, standalone_servergp2, workergp2}novpc_cidrCIDR for the VPCstring10.0.0.0/16nozookeeper_connect_stringZookeeper connect string, if empty, will create a single-node zookeeper for demonstration, dont use this in productionstringno几个需要特别留意的参数aws_access_key / aws_secret_key / db_password必填其余都有合理默认值最小化改动即可运行ds_component_replicas是控制集群 vs 单机以及各组件扩缩容的核心参数且由于实例用count创建改小后terraform apply会直接销毁多余的实例zookeeper_connect_string为空时脚本会自动创建演示用单节点 ZooKeeper官方注释明确警示生产环境必须显式提供连接串所有vm_*系列的map参数都按组件维度配置可以为不同组件分配不同机型、磁盘大小和磁盘类型。输出变量全表Outputsterraform apply之后可用terraform output查看的资源属性定义于 dolphinscheduler-output.tf、rds-output.tf、s3-outputs.tf、zookeeper-output.tf每个实例类输出都是按 replica 数量的列表NameDescriptionalert_server_instance_idInstance IDs of alert instancesalert_server_instance_private_ipPrivate IPs of alert instancesalert_server_instance_public_dnsPublic domain names of alert instancesalert_server_instance_public_ipPublic IPs of alert instancesapi_server_instance_idInstance IDs of api instancesapi_server_instance_private_ipPrivate IPs of api instancesapi_server_instance_public_dnsPublic domain names of api instancesapi_server_instance_public_ipPublic IPs of api instancesdb_addressDatabase addressdb_nameDatabase namedb_portDatabase portmaster_server_instance_idInstance IDs of master instancesmaster_server_instance_private_ipPrivate IPs of master instancesmaster_server_instance_public_dnsPublic domain names of master instancesmaster_server_instance_public_ipPublic IPs of master instancess3_access_keyS3 access keys3_addressS3 addresss3_bucketS3 bucket names3_regional_domain_nameS3 regional domain names3_secretS3 access secretvm_server_instance_idInstance IDs of standalone instancesvm_server_instance_private_ipPrivate IPs of standalone instancesvm_server_instance_public_dnsPublic domain names of standalone instancesvm_server_instance_public_ipPublic IPs of standalone instancesworker_server_instance_idInstance IDs of worker instancesworker_server_instance_private_ipPrivate IPs of worker instancesworker_server_instance_public_dnsPublic domain names of worker instancesworker_server_instance_public_ipPublic IPs of worker instanceszookeeper_server_instance_idInstance IDs of zookeeper instanceszookeeper_server_instance_private_ipPrivate IPs of zookeeper instanceszookeeper_server_instance_public_dnsPublic domain names of zookeeper instanceszookeeper_server_instance_public_ipPublic IPs of zookeeper instances这些输出可直接用于编写访问脚本、配置负载均衡或接入监控系统例如本文打开 UI 的命令就是基于api_server_instance_public_dns构造的。源码阅读指引进一步定制如果需要对这套 Terraform 方案做二次定制建议从以下入口深入AMI 构建细节ds-ami-official.pkr.hcl 与 ds-ami-local.pkr.hcl——修改基础操作系统、Java 版本或安装路径组件启动逻辑templates/cloud-init.yaml——两个 systemd 单元定义了先建 schema、再启服务的依赖顺序如需调整启动参数如 JVM 内存、超时改这里存储配置注入templates/cloud-init.yaml——sed改写的正是 DolphinScheduler 的common.properties资源存储类型、AWS 密钥、region、桶名、endpoint组件安全组与实例规格dolphinscheduler-master.tf、dolphinscheduler-worker.tf、dolphinscheduler-alert.tf、dolphinscheduler-api.tf、dolphinscheduler-standalone.tf依赖中间件network-main.tf、rds-main.tf、s3-main.tf、zookeeper-main.tf。需要注意的是这套 Terraform 方案定位是快速拉起一套可用的演示/测试环境RDS 使用db.t3.micro、ZooKeeper 为单节点 Docker 容器且安全组对公网开放了 SSH 与 UI 端口因此在生产环境使用时应按实际规模调整实例规格、收紧安全组并显式指定已有的 ZooKeeper 集群连接串。小结Apache DolphinScheduler 的 Terraform 部署方案 把AMI 构建 资源编排 cloud-init 自动初始化三层自动化串联起来Packer 负责把发行包固化进 AMITerraform 负责网络、数据库、对象存储、注册中心与各组件实例的声明式管理cloud-init 则负责在实例启动瞬间完成 schema 初始化、配置注入与服务拉起。掌握了ds-ami.pkrvars.hcl、terraform.tfvars两份变量文件即可在几分钟内获得一套可访问 Web UI 的 standalone 或 cluster 模式的调度平台并通过 Inputs/Outputs 表自由调整规模与机型。赞分享任务调度大数据后端前端【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址https://gitcode.com/gh_mirrors/do/dolphinscheduler点击查看免费下载相关推荐Apache DolphinScheduler 云上部署实战Packer 定制 AMI Terraform 一键拉起 AWS 全栈集群Apache DolphinScheduler 云上部署实战Packer 定制 AMI Terraform 一键拉起 AWS 全栈集群 本文基于仓库内置的任务调度数据编排工作流自动化后端大数据使用 Packer 与 Terraform 在 AWS、Azure、GCP 上一键部署 Nomad HashiStack 沙箱集群使用 Packer 与 Terraform 在 AWS、Azure、GCP 上一键部署 Nomad HashiStack 沙箱集群 本文基于 Nomad 仓库任务调度云原生运维后端在 AWS 上用 Packer 与 Terraform 部署 Nomad 集群完整实操指南在 AWS 上用 Packer 与 Terraform 部署 Nomad 集群完整实操指南 本指南基于 Nomad 官方仓库中的 terraform/aws任务调度云原生运维后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

软著登记源代码材料避坑指南:审查雷区与自查流程
软著登记源代码材料避坑指南:审查雷区与自查流程

上个月有个做社交APP的朋友找我,说在应用商店提审被卡住了,平台提示“软著证书材料存疑”。他很不服气:代码是一行一行自己写的,证书也是正规代理办的,怎么就成了存疑?我让他把当初提交的源代码文档发我一份… · 2026/9/23 4:06:27

C# try/catch 优雅设计:从异常分类到结构化日志
C# try/catch 优雅设计:从异常分类到结构化日志

上周评审新同事提交的代码,看到他在一处外部接口调用附近的 try/catch 处理,我本来想照惯例在评论区提示两句“这里最好还是细化一下异常分支”,结果看完他的 catch 块,我把打好的字删了。那个 catch 用 when 过滤了异常码、把日志… · 2026/9/23 4:06:20

INVICTA英维克塔振动电机型号解析:从激振力到选型维护
INVICTA英维克塔振动电机型号解析:从激振力到选型维护

有次去砂石骨料线做设备巡检,操作工指着一台嗡嗡作响的电机问我:这台英维克塔的振动电机,下次要换的时候到底怎么选?我蹲下去看铭牌,上面写着“INVICTA BLz80-230/6”。说实话,这几个字符看起来简单&#x… · 2026/9/23 4:06:20

癌研有明医院看病认可的病例报告翻译件一般有哪些要求
癌研有明医院看病认可的病例报告翻译件一般有哪些要求

​关于病例报告翻译件的接件标准,与其道听途说,按日本癌研有明医院接收方的书面习用做法,不如按审核方的视角倒推出该准备什么。这两样各自解决什么印章解决的是出处可辨,顺着日本癌研有明医院这条办理链路,声明写明的… · 2026/9/23 16:50:17

Qwen Code 工作流控制台:Web Shell 与 Git Worktree 实现 AI 编程任务隔离与回滚
Qwen Code 工作流控制台:Web Shell 与 Git Worktree 实现 AI 编程任务隔离与回滚

1. 从“单兵作战”到“带团队”:Qwen Code 工作流控制台到底解决了什么用 AI 写代码这件事,过去一年多的体验可以用一句话概括:模型越来越聪明,但协作方式还停留在“单线程对话”阶段。你打开一个对话框,把需求贴进去&… · 2026/9/23 16:50:11

工业视觉质检闭环实操手册:小样本缺陷检测与工艺联动
工业视觉质检闭环实操手册:小样本缺陷检测与工艺联动

简介:本资源是一份面向工业AI工程师、视觉算法研究员及智能制造系统集成人员的深度技术方案,聚焦工业视觉质检中缺陷识别不准、工艺反馈滞后等核心痛点,提出基于DeepSeek大模型与DLIA系统的全流程闭环优化方法。全书455页,含52个技… · 2026/9/23 16:50:11

Electron打包失败?Node 26与macOS老make不兼容排查实录
Electron打包失败?Node 26与macOS老make不兼容排查实录

1. 报错现场:一次“make 异常中断”的完整日志链先说背景。我手头有一台刚换没多久的 M4 芯片 MacBook Pro,跑的是最新版 macOS,平时主要是用来做 Electron 相关的桌面应用开发。项目本身的依赖不复杂:Electron Electron Forge … · 2026/9/23 16:50:11

Cosmos 仓库蒙特卡洛随机抽样估算圆周率 Pi:原理推导与多语言实现详解
Cosmos 仓库蒙特卡洛随机抽样估算圆周率 Pi:原理推导与多语言实现详解

Cosmos 仓库蒙特卡洛随机抽样估算圆周率 Pi:原理推导与多语言实现详解 【免费下载链接】cosmos Worlds largest Contributor driven code dataset | Used in Quark Search Engine, OpenGenus IQ, OpenGenus Visual Project 项目地址: https://gitcode.com/gh_mirr… · 2026/9/23 16:50:05

C语言课程设计:EasyX五子棋完整源码与实现解析
C语言课程设计:EasyX五子棋完整源码与实现解析

简介:这份资源是面向C语言初学者与课程设计学习者的五子棋项目源码包,借助轻量级EasyX图形库,把C语言基础语法与图形界面编程结合起来,解决初学者难以将语法知识落地为可视化小项目的问题。包内共50个文件,以tlog、log… · 2026/9/23 16:50:05

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码