资讯动态

Quickwit 在 AWS ECS 上的生产级部署:官方 Terraform 模块配置与实战指南

发布时间:2026/9/15 13:01:06 来源:尧图企业网站定制
Quickwit 在 AWS ECS 上的生产级部署官方 Terraform 模块配置与实战指南【免费下载链接】quickwitCloud-native OSS search engine for observability项目地址: https://gitcode.com/GitHub_Trending/qu/quickwitQuickwit 是面向可观测性场景的云原生搜索引擎官方在 distribution/ecs 目录下提供了完整的 Terraform 模块帮助你在自己的 AWS 基础设施中一键拉起一套由 Fargate 容器承载的 Quickwit 集群索引器、搜索器、元数据存储、控制平面与 janitor并使用 S3 作为索引存储、RDS PostgreSQL 作为元数据库。本文以 ECS 部署文档 为骨架结合模块源码逐项讲解模块用法、关键配置参数、网络前提、高可用与成本优化建议并完整演示示例堆栈的部署、SSH 隧道访问与数据接入流程。读完本文你将能够在自己的 VPC 中独立部署、访问和扩展一套 Quickwit 集群并理解每个配置项背后的实现逻辑。模块概览一次apply得到什么在动手之前先看这套模块会创建哪些资源。从 cluster.tf、configs.tf 与 service/ecs.tf 可以看到整个堆栈由以下几部分组成ECS 集群与五个服务metastore元数据服务、control-plane控制平面、janitor清理服务、indexer索引器、searcher搜索器全部运行在 Fargate 上服务发现通过 Cloud Mapaws_service_discovery_private_dns_namespace在 VPC 内建立私有 DNS 命名空间默认域名为quickwit五个服务分别注册为metastore.quickwit、control-plane.quickwit、janitor.quickwit、indexer.quickwit、searcher.quickwitTTL 为 10 秒、采用MULTIVALUE路由策略S3 索引存储默认新建一个 S3 bucket可通过quickwit_index_s3_prefix指定已有 bucket 与前缀RDS PostgreSQL默认创建 PostgreSQL 16 实例作为 metastore 数据库连接串以 SecureString 形式写入 SSM Parameter Store/quickwit/{module_id}/postgres见 rds.tfIAM 权限任务角色持有 S3 读写ListBucket/GetObject/PutObject/DeleteObject与 ECR 拉取、日志写入等执行权限见 iam.tf。模块内部通过 service/ecs.tf 复用一个通用的quickwit_service子模块为每个服务注入统一的容器定义以run作为启动命令、暴露 RESTTCP 7280、gRPCTCP 7281与 gossipUDP 7280端口并挂载quickwit-data-vol数据目录/quickwit/qwdata和quickwit-keys密钥文件注入目录/quickwit/keys两个卷。各服务之间通过共享的安全组与内部 DNS 相互发现。快速开始模块的最小用法在你的 Terraform 工程中引入 Quickwit 模块只需提供三个必填变量module quickwit { source github.com/quickwit-oss/quickwit/distribution/ecs/quickwit vpc_id # VPC in which all resources will be created subnet_ids [...] # At least 2 private subnets must be specified quickwit_ingress_cidr_blocks [...] # List of CIDR blocks allowed to access to the Quickwit API }三个必填变量来自 variables.tf变量类型说明vpc_idstring所有资源将被创建到哪个 VPC 中subnet_idslist(string)部署 Quickwit 的子网列表至少需要 2 个私有子网RDS 多 AZ 与多服务高可用均依赖多子网quickwit_ingress_cidr_blockslist(string)允许访问 Quickwit API7280 端口的 CIDR 列表通常是 VPC CIDR 或办公网段网络前提私有子网如何拉取镜像Quickwit 集群运行在私有子网中任务没有公网 IP因此 ECS 拉取容器镜像的方式决定了你的网络设计README 给出了两条路径使用默认 Docker Hub 镜像quickwit/quickwit子网必须配置NAT Gateway才能访问公网拉取镜像使用 ECR 托管的镜像可以改用ECR 的 VPC Endpointinterface 类型无需 NAT Gateway。模块配置项全解除必填变量外模块提供大量可选配置完整清单以 variables.tf 为准。以下按用途分组说明标识与镜像变量默认值说明module_id随机生成模块标识例如环境名stage。用于避免在同一账号下多次部署时资源命名冲突见 configs.tfquickwit_imagequickwit/quickwit:latestQuickwit 容器镜像quickwit_cpu_architectureARM64任务 CPU 架构取X86_64/ARM64。必须与quickwit_image的镜像架构一致否则任务无法启动存储与服务发现变量默认值说明quickwit_index_s3_prefixS3 bucket 名与前缀如my-bucket-name/my-prefix。Quickwit 任务只会被授予该 S3 位置的访问权限留空则自动新建 bucketquickwit_domainquickwit集群内部服务发现使用的私有 DNS 域名各服务规格Fargate 任务大小以下变量的对象均支持desired_count、memory、cpu等字段默认值如下来自 variables.tf服务默认副本数默认内存 (MB)默认 CPU (vCPU 单位)备注quickwit_indexer181922048另有ephemeral_storage_gib默认 21单位 GiB与extra_task_policy_arns附加 IAM 策略列表quickwit_searcher140961024另有ephemeral_storage_gib默认 21quickwit_metastore1512256quickwit_control_plane—512256只需 1 个任务不提供desired_countquickwit_janitor—512256只需 1 个任务不提供desired_count注意索引器在 quickwit-indexer.tf 中显式设置了stop_timeout 120因为需要等待 ingester 中暂存的数据完成索引提交该值应大于最大的 commit 超时时间。元数据库配置变量默认值说明rds_config.instance_classdb.t4g.microRDS 实例规格rds_config.multi_azfalse是否启用多 AZ 部署用于保障元数据库高可用external_postgres_uri_secret_arn使用自有 Postgres 时传入 SSM 参数或 Secrets Manager 密钥的 ARN值形如postgres://user:passworddomain:port/db。设置后不再创建 RDS且rds_config被忽略日志与扩展变量默认值说明enable_cloudwatch_loggingtrue是否为任务启用 CloudWatch 日志使用自定义日志配置时通常关闭log_configuration{}自定义日志配置例如 FireLens详见 AWS ECS 关于 custom log routingFireLens的文档sidecar_container_definitions{}附加到 Quickwit 任务的 sidecar 容器定义sidecar_container_dependencies[]Quickwit 容器对 sidecar 的启动依赖如[{condition SUCCESS, containerName kafka_key_init}]高可用与成本优化README 中的关键 TipsREADME 的 Tips 部分浓缩了这套模块的设计取舍直接决定生产环境的可用性与账单元数据库备份已禁用请用 multi_azMetastore database backups are disabled as restoring one would lead to inconsistencies with the index store on S3. To ensure high availability, you should enablerds_config.multi_azinstead.Metastore 数据库备份被刻意禁用——因为单独恢复数据库会导致其与 S3 上的索引数据不一致。要获得高可用应设置rds_config { multi_az true }。从 rds.tf 可以看到模块创建的 RDSPostgreSQL 16、默认db.t4g.micro还启用了 IAM 数据库认证与 30 秒增强监控。复用自有 Postgres如果不想新建 RDS可以配置external_postgres_uri_secret_arn指向一个已有 Postgres 实例的连接串密钥SSM Parameter 或 Secrets Manager。要求该 Postgres 允许来自subnet_ids子网的入站连接设置后内部 RDS 不再创建。NAT Gateway 与 ECR VPC Endpoint 的成本对比README 给出了明确的成本参考NAT Gateway 约 $0.05/小时/AZECR interface VPC Endpoint 约 $0.01/小时/AZ。如果 Quickwit 部署的可用区中本来没有 NAT Gateway强烈建议把镜像推送到 ECR 并用 ECR VPC Endpoint 替代可显著降低网络费用。规避 Docker Hub 限流使用默认镜像会很快触发 Docker Hub 的拉取频率限制rate limiting。推荐做法是把 Quickwit 镜像推送到 ECR 并配置为quickwit_image。注意推送到 ECR 的镜像架构必须与quickwit_cpu_architecture匹配默认ARM64。服务发现与集群组网源码视角从 configs.tf 可以看到每个服务都会收到一份完整的quickwit_peer_list即五个服务在私有命名空间下的完整 DNS 名称列表service/config.tf 进一步展示了注入到容器中的统一环境变量环境变量值作用QW_ENABLED_SERVICES当前服务名指定该容器运行的 Quickwit 服务角色QW_PEER_SEEDS五个服务的 DNS 列表逗号分隔集群成员互相发现的种子节点QW_CLUSTER_IDecs-{module_id}集群标识QW_LISTEN_ADDRESS0.0.0.0监听地址QW_DATA_DIR/quickwit/qwdata数据目录对应quickwit-data-vol卷QW_DEFAULT_INDEX_ROOT_URIs3://{quickwit_index_s3_prefix}默认索引根 URI指向 S3QW_METASTORE_URI来自密钥secrets 注入Postgres 连接串在安全组层面service/ecs.tf模块为每个任务放行了集群成员安全组之间 7280–7281 端口的互访集群内部通信quickwit_ingress_cidr_blocks对 7280–7281 的外部访问即 Quickwit API出方向全部放行。扩展示例sidecar 注入密钥与附加 IAM 策略用 sidecar 注入 Kafka 等数据源的密钥文件Quickwit 任务挂载了/quickwit/keys卷配合 sidecar 容器可以把敏感文件以文件形式注入供 Kafka 等需要证书/密钥的数据源使用。example/kafka.tf 给出了完整范例一个busybox的kafka_key_initsidecar 从 Secrets Manager 读取 CA 证书、服务证书与私钥写入/quickwit/keys/目录并通过依赖条件{condition SUCCESS, containerName kafka_key_init}确保 Quickwit 容器在密钥就绪后才启动。随后可以在 Kafka source 中这样引用version: 0.8 source_id: kafka-source source_type: kafka num_pipelines: 2 params: topic: your-topic client_params: bootstrap.servers: your-kafka-broker.com security.protocol: SSL ssl.ca.location: /quickwit/keys/ca.pem ssl.certificate.location: /quickwit/keys/service.cert ssl.key.location: /quickwit/keys/service.key为索引器附加 AWS 服务访问策略如需访问 Kinesis 等外部 AWS 服务例如配置 Kinesis 数据源通过quickwit_indexer.extra_task_policy_arns把必要的 IAM 策略附加给索引器任务即可例如quickwit_indexer { extra_task_policy_arns [arn:aws:iam::aws:policy/AmazonKinesisFullAccess] }模块会把这些策略合并进索引器任务的 IAM 角色见 service/config.tf 中的tasks_iam_role_policies合并逻辑。实战运行官方示例堆栈example 目录提供了一个自包含的示例部署包含临时 VPC含 NAT Gateway、2 个可用区、2 个私有子网与 2 个公有子网见 vpc.tf、RDS、ECS 集群以及一个用于访问集群的 bastion 主机。重要该示例堆栈的月度成本约为$200/月包含 Fargate 任务、NAT Gateway 与 RDS。第一步准备 SSH 密钥并创建 tfvars示例堆栈通过 bastion 提供对 Quickwit 集群的访问访问安全由 SSH 密钥对保障。先用ssh-keygen -t ed25519生成密钥然后在example目录下创建terraform.tfvars填入公钥bastion_public_key ssh-ed25519 ...提示不设置bastion_public_key可以跳过 bastion 的创建但那样会很难访问和实验这套集群。bastion 由 bastion.tf 定义Ubuntu 22.04 的t3.nano实例仅放行 22 端口入站。第二步初始化并应用在example目录下执行terraform init terraform applyapply成功后输出中会给出 bastion EC2 实例的公网 IPbastion_ip。第三步SSH 隧道访问搜索 UIQuickwit 的搜索 UI 运行在 searcher 的 7280 端口通过 bastion 做本地端口转发即可在浏览器中访问ssh -N -L 7280:searcher.quickwit:7280 -i {your-private-key-file} ubuntu{bastion_ip}第四步接入示例数据集先登录 bastionssh -i {your-private-key-file} ubuntu{bastion_ip}然后在 bastion 上创建日志索引示例为 HDFS 日志索引配置可参考 config/tutorials/hdfs-logs/index-config.yamlwget https://raw.githubusercontent.com/quickwit-oss/quickwit/main/config/tutorials/hdfs-logs/index-config.yaml curl -X POST \ -H content-type: application/yaml \ --data-binary index-config.yaml \ http://indexer.quickwit:7280/api/v1/indexes接着导入一批示例数据wget https://quickwit-datasets-public.s3.amazonaws.com/hdfs-logs-multitenants-10000.json curl -X POST \ -H content-type: application/json \ --data-binary hdfs-logs-multitenants-10000.json \ http://indexer.quickwit:7280/api/v1/hdfs-logs/ingest?commitforce注意这里的数据写入目标是indexer.quickwit因为索引 API含 ingest由索引器对外提供服务。只要前面的 SSH 隧道还在运行就能在本地浏览器的 Quickwit UI 中看到刚接入的数据并执行搜索。进阶用 ECR Pull-Through Cache 彻底绕开 Docker Hub 限流示例堆栈默认直接从 Docker Hub 拉取 Quickwit 镜像使用方便但容易触发限流。README 提供了官方解法在terraform.tfvars中设置dockerhub_pull_through_creds_secret_arn指向一个内容如下的 AWS Secret{username:...,accessToken:...}设置后对应 image.tf 的实现会自动完成三件事创建一个 ECR 仓库quickwit-ecs-example/quickwit/quickwit为它配置一条指向registry-1.docker.io的 ECRpull-through cache 规则上游镜像经认证后缓存到 ECR把 Quickwit 模块的镜像配置自动切换到该 ECR 仓库{account}.dkr.ecr.{region}.amazonaws.com/quickwit-ecs-example/quickwit/quickwit后续任务拉取都走 ECR不再受 Docker Hub 频率限制影响。配合前文提到的 ECR VPC Endpoint即可在私有子网中实现既低成本又稳定的镜像拉取链路。小结Quickwit 的 ECS 模块把「S3 索引存储 RDS 元数据库 五个 Fargate 服务 私有 DNS 服务发现 最小权限 IAM」打包成一个可复用的 Terraform 模块。部署时最需要关注的三件事私有子网至少要两个且能拉到镜像NAT Gateway 或 ECR Endpoint 二选一、元数据库用multi_az而非备份来保障高可用、镜像架构与quickwit_cpu_architecture保持一致。在此基础上你可以通过 sidecar 注入 Kafka 等数据源的密钥、通过extra_task_policy_arns放开 Kinesis 等 AWS 服务的访问并用示例堆栈的 bastion SSH 隧道快速验证整条数据链路。更完整的参数清单与持续更新可直接查阅模块源码 variables.tf 与 example/terraform.tf 中的注释示例。【免费下载链接】quickwitCloud-native OSS search engine for observability项目地址: https://gitcode.com/GitHub_Trending/qu/quickwit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价