亚马逊AWS官方博客

如何使用OpenClaw+飞书实现亚马逊云的运维

摘要:本文介绍如何使用 OpenClaw 开源框架结合飞书,实现亚马逊云的 ChatOps 自动化运维。


一、背景

随着企业上云规模的不断扩大,运维团队面临着越来越多的挑战:大量的EC2实例需要管理,S3存储桶中的数据需要监控,各种云资源的状态需要实时掌握。传统的运维方式往往依赖于登录AWS控制台或使用CLI工具,这对于非技术人员来说门槛较高,对于需要快速响应的场景也不够便捷。

近年来,ChatOps的理念逐渐兴起——即通过聊天工具来完成运维操作。这种方式将运维操作融入到团队日常使用的即时通讯工具中,使得运维操作变得像发消息一样简单。团队成员无需切换工具,即可在聊天窗口中完成查看资源状态、创建实例、管理存储等操作,大大提升了运维效率和团队协作能力。

OpenClaw(龙虾)是一个开源的ChatOps机器人框架,它支持多种聊天平台的接入,包括飞书、微信、Slack等。飞书作为国内企业广泛使用的协作平台,与OpenClaw的结合可以为团队提供一个强大而便捷的云运维入口。

本文将详细介绍如何在EC2实例上安装和配置OpenClaw,并通过飞书实现对亚马逊云资源的日常运维操作,包括EC2实例的查看、创建、启停,以及S3存储桶的文件管理等典型场景。

二、系统架构

整个方案的架构非常简洁,主要由三个部分组成:飞书客户端、部署在EC2上的OpenClaw服务、以及AWS云资源。用户在飞书中用自然语言对机器人发出运维意图,OpenClaw 通过已订阅的飞书 channel(长连接或 webhook)接收消息,交给模型路由到对应的 skill;skill 在 EC2 本地调用 AWS CLI 完成操作,EC2 通过实例 IAM Role 与 AWS API 通信,结果再由 OpenClaw 回发到飞书会话中。

整体架构如下图所示:

[图1]

这种架构的优势在于:部署简单,仅需一台EC2即可运行;扩展灵活,可以根据需要添加更多的运维指令;安全可控,通过IAM角色控制OpenClaw的权限范围。

三、安装和配置

OpenClaw 是一个基于 Node.js 的个人 AI 助手 / ChatOps 框架,官方仓库地址为 https://github.com/openclaw/openclaw,支持飞书、Slack、Discord、Telegram、WhatsApp、微信、Teams、Matrix 等二十多个消息平台。它通过 onboard 向导统一接入各个 channel,通过 skill 和 MCP(Model Context Protocol)服务器扩展能力。本文将它部署在一台 EC2 上,并通过飞书对话调用 AWS 运维 skill 完成日常操作。

3.1 环境准备

  • 准备一台 EC2 实例(推荐 Amazon Linux 2023 或 Ubuntu 22.04,t3.small 即可),通过 SSH 登录。
  • 为实例绑定一个专用 IAM Role(如 OpenClawOpsRole),按最小权限授予目标 AWS 服务的只读/操作权限,例如 AmazonEC2ReadOnlyAccess、AmazonS3ReadOnlyAccess,以及按需的 ec2:StartInstances、ec2:StopInstances 等。
  • 安装 Node.js 22.14+(推荐 Node 24);OpenClaw 官方以 npm 全局包的形式分发。
  • 确保出站可访问飞书开放平台(open.feishu.cn,HTTPS 443)。入站端口由 openclaw 本地守护进程使用,通常无需对公网开放。

3.2 安装 OpenClaw

  • 在 EC2 上用官方提供的一键脚本安装 OpenClaw,并运行 onboard 向导:
# 官方一键安装脚本(macOS / Linux)。脚本会自动按需准备运行时,无需先手装 Node。
curl -fsSL https://openclaw.ai/install.sh | bash

# 运行 onboard 向导:依次完成 setup(gateway + workspace)、channels login、health 检查
# --install-daemon 会把 gateway 注册为后台常驻进程
openclaw onboard --install-daemon

# 验证安装
openclaw --version
openclaw gateway status
  • onboard 完成后会生成 ~/.openclaw/ 目录:openclaw.json 是主配置,workspace/skills/ 存放自定义 skill,credentials/ 与 secrets.json 用于保存各 channel 的凭证。

3.3 接入飞书 channel

OpenClaw 官方 docs(docs.openclaw.ai/channels/feishu)把飞书 bot 以 bundled plugin 的形式实现,默认通过 WebSocket 与飞书开放平台建立长连接,因此部署在 EC2 上不需要对公网开放回调端口。

  • 在飞书开放平台(open.feishu.cn)创建一个”企业自建应用”,开启”机器人”能力,获取 App ID(以 cli_ 开头)与 App Secret。
  • 在应用的”事件订阅”页面订阅消息接收事件 im.message.receive_v1,并确保机器人具备收发消息的最小权限。
  • 将飞书凭证写入 OpenClaw 主配置 ~/.openclaw/openclaw.json 的 channels.feishu 段(字段名来自官方文档):
{
  "agent": {
    "model": "bedrock/anthropic.claude-sonnet-4-6"
  },
  "channels": {
    "feishu": {
      "enabled": true,
      "domain": "feishu",              // 或 "lark"
      "connectionMode": "websocket",   // 推荐长连接;可选 "webhook"
      "defaultAccount": "default",
      "accounts": {
        "default": {
          "appId": "cli_xxxxxxxxxxxx",
          "appSecret": "<Your-Feishu-App-Secret>"
        }
      },
      "dmPolicy": "pairing",           // pairing / allowlist / open / disabled
      "allowFrom": [],                 // DM 白名单(pairing 审批后会自动追加)
      "groupPolicy": "allowlist",      // open / allowlist / disabled
      "groupAllowFrom": ["oc_xxxxxx"], // 允许的飞书群 chat_id
      "requireMention": true,          // 群里是否必须 @ 机器人才响应
      "streaming": true,               // 回复走卡片流式输出
      "typingIndicator": true
    }
  }
}
  • 可选字段还包括:textChunkLimit(单条消息字符上限,默认 2000)、mediaMaxMb(媒体上传/下载上限,默认 30MB)、resolveSenderNames(是否解析发送者名称)以及按 chat_id 粒度的 groups.<chat_id>.{enabled, requireMention, allowFrom}。
  • 如果无法使用 WebSocket 需要切换为 webhook 模式,则需要额外填写 verificationToken、encryptKey,并按需指定 webhookPath(默认 /feishu/events)、webhookHost(默认 127.0.0.1)、webhookPort(默认 3000);WebSocket 模式下这些字段不需要。
  • 完成凭证登录并重启 gateway 使配置生效:
# 通过官方 CLI 登录飞书 channel(会引导扫码 / 授权并持久化凭证)
openclaw channels login --channel feishu

# 应用配置
openclaw gateway restart

# 检查 channel 是否已经连上,gateway 是否存活
openclaw gateway status
openclaw channels status --probe
  • OpenClaw 对 DM 的默认准入策略是 pairing:陌生用户首次发 DM 时会收到配对码,需要管理员审批后才会持续响应。可用以下命令查看与放行:
openclaw pairing list feishu
openclaw pairing approve feishu <CODE>

3.4 可选:接入个人微信 channel

OpenClaw 官方文档(docs.openclaw.ai/channels/wechat)中的”wechat” channel 指的是个人微信,通过腾讯提供的第三方插件 @tencent-weixin/openclaw-weixin 实现,登录方式为手机扫码。请注意该 channel 目前仅宣告支持单聊(DM)与富媒体,不保证对微信群聊的支持;若你需要在企业群里让所有同事触达机器人,推荐仍然以飞书 channel 为主链路,微信仅作为个人管理员在非工作时间收告警/查状态的补充入口。OpenClaw 官方文档当前并未提供独立的”企业微信 / WeCom”channel,请勿将本节的字段照搬到企业微信上。

  • 先安装腾讯 weixin 插件(以下两种方式任选其一):
# 方式一:官方 CLI 快捷安装
npx -y @tencent-weixin/openclaw-weixin-cli install

# 方式二:通过 openclaw 的插件管理器安装
openclaw plugins install "@tencent-weixin/openclaw-weixin"
  • 启用插件并重启 gateway:
openclaw config set plugins.entries.openclaw-weixin.enabled true
openclaw gateway restart
openclaw plugins list            # 应能看到 openclaw-weixin
  • 扫码登录个人微信账号(凭证会持久化到 OpenClaw 的 state 目录,下次无需再扫):
openclaw channels login --channel openclaw-weixin
  • 如果同时跑多个微信账号,或希望不同账号/会话互相隔离,开启 per-account 会话作用域:
openclaw config set session.dmScope per-account-channel-peer
  • 陌生联系人首次 DM 时一样会触发 pairing,管理员审批后才会持续响应;命令与飞书保持一致,只是 channel 名换成 openclaw-weixin:
openclaw pairing list openclaw-weixin
openclaw pairing approve openclaw-weixin <CODE>
  • 链路自检:
openclaw channels status --probe
openclaw --version               # 需要 2026.4.25 及以上版本才自带最新扩展点

登录态是个人微信,存在被风控下线的风险,不建议把生产级 AWS 写操作完全托付给该 channel;建议将微信 channel 的 aws-ops skill 收紧为只读(例如把 SKILL.md 里的 “安全约束” 改为仅允许 describe/list 类命令)。

3.5 添加 AWS 运维能力(Skill)

OpenClaw 的扩展单元是 skill:一个目录加一份 SKILL.md。SKILL.md 的 frontmatter 声明元数据与运行时依赖,正文是自然语言指令,告诉模型何时调用哪个工具。下面创建一个 aws-ops skill,让机器人能够读写 EC2 与 S3。

  • 创建 skill 目录与文件:
mkdir -p ~/.openclaw/workspace/skills/aws-ops
touch   ~/.openclaw/workspace/skills/aws-ops/SKILL.md
  • 编辑 SKILL.md,声明该 skill 依赖 AWS CLI,并在正文中说明它的用途与可执行的操作:
---
name: aws-ops
description: 通过 AWS CLI 查询与操作 EC2、S3 等资源
metadata: {"openclaw": {"requires": {"bins": ["aws"]}}}
---

# AWS Ops Skill

当用户询问 EC2 / S3 相关问题,或请求启停实例、列出桶对象时,调用 AWS CLI 完成操作。

## 常用命令参考
- 查询实例列表:`aws ec2 describe-instances --output json`
- 启动 / 停止实例:`aws ec2 start-instances --instance-ids <id>` / `aws ec2 stop-instances --instance-ids <id>`
- 列出 S3 桶内容:`aws s3 ls s3://<bucket>/<prefix>` 或 `aws s3api list-objects-v2`

## 安全约束
- 任何"停止 / 删除 / 覆盖"类操作,在执行前必须先把命令发给用户确认。
- 区域缺省使用实例所在区域,不要跨区执行写操作。
  • 安装 AWS CLI 并确认 EC2 实例角色已生效(无需再配置 AK/SK):
# Amazon Linux 2023 已内置 awscli;Ubuntu 可执行:
sudo apt-get update && sudo apt-get install -y awscli

# 使用实例角色进行身份验证
aws sts get-caller-identity
  • 重启 gateway 让新 skill 生效,并确认已被加载:
openclaw gateway restart
openclaw skills list        # 应能看到 aws-ops

3.6 验证

  • 在飞书中找到已经上线的应用(机器人),在单聊或群聊中 @ 它并发一句自然语言:

@AWS 运维助手 帮我看看当前 region 里所有 EC2 实例

  • OpenClaw 会路由到 aws-ops skill,调用 aws ec2 describe-instances 并把结果以 Markdown 表格回发到飞书。首条消息通信正常即代表链路打通。

四、飞书运维场景实战

4.1 场景一:查看EC2实例列表

  • 在飞书对话中,@机器人并用自然语言提问即可:

@AWS 运维助手 列出当前区域所有 EC2 实例

  • OpenClaw 会调用 aws-ops skill 执行 aws ec2 describe-instances,并把结果格式化成表格回发到飞书,包含实例ID、名称、状态、实例类型和私有IP等关键信息:
实例ID 名称 状态 类型 私有IP
i-0abcxxxxxxxxxxx01 web-prod running t3.large 172.31.16.10
i-0abcxxxxxxxxxxx02 api-prod running t3.medium 172.31.16.11
i-0abcxxxxxxxxxxx03 dev-test stopped t3.small 172.31.16.12

4.2 场景二:创建EC2实例

  • 当需要快速创建一台新的 EC2 实例时,可以在飞书中用自然语言描述需求:
@AWS 运维助手  用 AMI ami-0xxxxxxxxxxxxxxxx 起一台 t3.micro,命名 test-server
  • 由于创建属于写操作,skill 会先把实际将要执行的 aws ec2 run-instances 命令发给用户确认;确认后执行并返回结果:
属性
状态 ✅ 创建成功
实例ID i-0abcxxxxxxxxxxx04
名称 test-server
类型 t3.micro
AMI ami-0xxxxxxxxxxxxxxxx
当前状态 pending → running
备注 预计1-2分钟后可用

4.3 场景三:启动和停止EC2实例

  • 启动一台已停止的实例:
@AWS 运维助手  启动 i-0abcxxxxxxxxxxx03
  • 返回结果:
属性
状态 ✅ 实例启动中
实例ID i-0abcxxxxxxxxxxx03
名称 dev-test
状态变更 stopped → pending
  • 停止一台运行中的实例:
@AWS 运维助手  停止 i-0abcxxxxxxxxxxx03
  • 返回结果:
属性
状态 ✅ 实例停止中
实例ID i-0abcxxxxxxxxxxx03
名称 dev-test
状态变更 running → stopping
  • 由于停止属于写操作,skill 会先把将要执行的 aws ec2 stop-instances 命令发到会话请用户确认,用户回复”确认”后才真正执行。

4.4 场景四:查看S3桶文件

  • 查看指定 S3 桶中的文件列表:

@AWS 运维助手 列一下 my-data-bucket 里的对象

  • 返回结果:
文件名 大小 最后修改时间
data/train.csv 256.3 MB 2026-04-20 10:30:00
data/test.csv 64.1 MB 2026-04-20 10:30:00
models/model-v1.tar.gz 1.2 GB 2026-04-22 15:45:00
logs/training.log 4.5 KB 2026-04-23 08:00:00

共 4 个对象,总大小: 1.52 GB

  • 也可以按前缀过滤,只查看特定目录下的文件:
@AWS 运维助手  列出 my-data-bucket 中 data/ 开头的对象

4.5 场景五:常用意图速查

aws-ops skill 通过自然语言意图映射到 AWS CLI 命令,下表列举几组常见用法:

自然语言(在飞书中) skill 实际执行的命令 权限类型
列出当前区域的 EC2 实例 aws ec2 describe-instances 只读
查看实例 i-0abcxxxxxxxxxxx 的详情 aws ec2 describe-instances –instance-ids i-0abcxxxxxxxxxxx 只读
启动实例 i-0abcxxxxxxxxxxx aws ec2 start-instances –instance-ids i-0abcxxxxxxxxxxx 写(需确认)
停止实例 i-0abcxxxxxxxxxxx aws ec2 stop-instances –instance-ids i-0abcxxxxxxxxxxx 写(需确认)
列出 S3 桶 my-bucket 的对象 aws s3 ls s3://my-bucket/ 只读
查看 my-bucket 中 logs/ 前缀 aws s3 ls s3://my-bucket/logs/ 只读
能帮忙做什么 openclaw skills list / 查看 aws-ops SKILL.md 元信息

五、最后

本文介绍了如何使用OpenClaw(龙虾)结合飞书,构建一个轻量级的亚马逊云ChatOps运维方案。通过这种方式,团队成员可以直接在飞书对话中完成EC2实例的查看、创建、启停,以及S3存储桶的文件管理等日常运维操作,无需登录AWS控制台或记忆复杂的CLI命令。

这种ChatOps模式的核心优势在于:第一,降低了运维操作的门槛,非技术人员也能参与基础运维;第二,所有操作都在聊天记录中留痕,天然具备审计能力;第三,团队成员可以实时看到运维操作的执行情况,提升了协作效率。

当然,本文仅展示了最基础的运维场景。在实际生产环境中,还可以进一步扩展更多功能,例如:集成CloudWatch告警自动推送到飞书群、支持RDS数据库的管理操作、实现基于审批流的高危操作管控、以及接入更多AWS服务的运维指令等。OpenClaw的插件化架构使得这些扩展变得非常简单,读者可以根据自身需求灵活定制。

➡️ 下一步行动:

相关产品:

相关文章:

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。

本篇作者

Kelvin Guo

亚马逊云科技资深解决方案架构师。主要技术方向为 MLOps、DevOps、容器、数据分析。20+年软件开发、项目管理、敏捷思想落地、工程效能咨询和落地经验。


亚马逊云科技中国峰会

开发者挑战赛现场开启,基于真实业务场景亲手构建 Agent。