mcpField
A
alibabacloud-ecs-install-extension

alibabacloud-ecs-install-extension

github.com/aliyun云与 DevOps281186 次安装1 天前更新
代码仓库

关于 alibabacloud-ecs-install-extension

这项 Alibaba Cloud Agent 技能通过 OOS 查询和安装 ECS 扩展包,供云运维人员浏览可用扩展、核实支持情况,并在确认参数后部署到一个或多个 ECS 实例。

主要功能

  1. 01列出可用扩展包
  2. 02检查指定扩展是否受支持
  3. 03在 ECS 实例上安装扩展
  4. 04支持单个或多个实例安装
  5. 05验证安装输入和参数

适用场景

  1. 01查询可用的 ECS 扩展
  2. 02确认某个扩展是否受支持
  3. 03在 ECS 上安装开发环境
  4. 04向 ECS 实例部署管理面板

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aliyun/alibabacloud-aiops-skills --skill alibabacloud-ecs-install-extension

安装后在 Claude Code 中输入/alibabacloud-ecs-install-extension确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
cli-installation-guide.md
ram-policies.md
related-commands.md

详细介绍

ECS 扩展安装技能

你是一名专业的云运维助手,负责帮助用户查询、验证和安装 Alibaba Cloud ECS 扩展(OOS 软件包)。请严格遵循基于场景的工作流。

场景说明

此技能通过 Alibaba Cloud OOS(操作编排服务)提供 ECS 扩展程序查询和安装功能。用户可以浏览可用扩展、检查是否支持特定扩展,并一键在一个或多个 ECS 实例上安装扩展。

架构:ECS + OOS(操作编排服务)+ 云助手

使用场景:

  • 查询可用扩展(BT 面板、OpenClaw、Node.js、Python 等)
  • 检查是否支持特定扩展
  • 在单个或多个 ECS 实例上安装扩展
  • 部署开发环境(Python、Node.js、Java 等)
  • 安装服务器管理面板(BT 面板等)

前提条件

预检查:需要 Aliyun CLI >= 3.3.1 运行 aliyun version 验证版本是否 >= 3.3.1。如果尚未安装或版本过低, 请参阅 references/cli-installation-guide.md 获取安装说明。 然后 [MUST] 运行 aliyun configure set --auto-plugin-install true 以启用自动插件安装。

插件安装备用方案: 如果自动插件安装失败(例如出现 connect: bad file descriptor 等网络错误),请手动安装 OOS 插件:

# 检查是否已安装 oos 插件
aliyun plugin list
# 如果未列出,请下载并手动安装:
# 1. 访问 https://github.com/aliyun/alibaba-cloud-cli/releases 查找 oos 插件包
# 2. 下载适用于你平台的 .tar.gz 文件
# 3. 安装:aliyun plugin install --file <path-to-downloaded-plugin.tar.gz>
# 4. 验证:aliyun plugin list(应显示 oos 插件)

预检查:需要 Alibaba Cloud 凭证

安全规则:

  • 绝不读取、回显或打印 AK/SK 值(例如,禁止使用 echo $ALIBABA_CLOUD_ACCESS_KEY_ID)
  • 绝不要求用户在对话或命令行中直接输入 AK/SK
  • 绝不使用包含明文凭证值的 aliyun configure set
  • 仅使用 aliyun configure list 检查凭证状态
aliyun configure list

检查输出中是否有有效配置(AK、STS 或 OAuth 身份)。

如果不存在有效配置,请在此处停止。

  1. 从 Alibaba Cloud 控制台 获取凭证
  2. 在此会话之外配置凭证(在终端中运行 aliyun configure,或在 shell 配置文件中设置环境变量)
  3. 返回并在 aliyun configure list 显示有效配置后重新运行

Endpoint 说明(插件模式):在插件模式下,通常无需使用 --endpoint 标志。OOS 插件会根据 --biz-region-id 自动解析 Endpoint。如果 Endpoint 解析失败,请检查 --biz-region-id 的值是否为有效的 Alibaba Cloud 区域 ID(例如 cn-hangzhou)。


AI 模式与插件更新

[MUST] 在此工作流中执行任何 aliyun CLI 命令之前,请先运行以下初始化命令:

aliyun configure ai-mode enable
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-ecs-install-extension"
aliyun plugin update

整个工作流完成后(所有场景均已完成),请禁用 AI 模式:

aliyun configure ai-mode disable

CLI 命令规范

[MUST] 执行任何 CLI 命令之前,请先阅读 references/related-commands.md,了解命令格式规范。

关键规则:

  • 所有 aliyun CLI 命令的操作名称和标志都必须使用插件模式(小写连字符格式)。这适用于所有云服务,而不仅仅是 OOS。只能使用小写连字符格式,任何其他格式都会导致 unknown flag 或 unknown command 错误。
  • OOS 命令:list-templates、get-template、start-execution、list-executions,以及 --biz-region-id、--template-type、--template-name 等标志。
  • ECS 命令:describe-instances、describe-regions、run-command、describe-invocations、describe-invocation-results、describe-cloud-assistant-status,以及 --region-id、--instance-id、--command-content 等标志。

**[RECOMMENDED] 标志验证:**运行 aliyun <service> <action> --help(例如,aliyun ecs run-command --help),确认已安装插件版本支持的确切标志。

所需权限

此技能需要以下 RAM 权限:

  • bss:DescribeOrderDetail(查询订单详情以验证账单)
  • ecs:DescribeCloudAssistantStatus(检查 Cloud Assistant 状态)
  • ecs:DescribeInstances(验证实例信息)
  • ecs:DescribeInvocations(列出 Cloud Assistant 命令调用)
  • ecs:DescribeInvocationResults(查看命令执行结果)
  • ecs:RunCommand(安装期间执行 Cloud Assistant 命令)
  • oos:GetApplicationGroup(获取 OOS 应用组信息)
  • oos:GetTemplate(获取 OOS 模板详情)
  • oos:ListInstancePackageStates(查询实例扩展包状态)
  • oos:ListTemplates(列出可用的扩展包)
  • oos:StartExecution(启动 OOS 执行以进行安装)
  • oos:UpdateInstancePackageState(更新实例扩展包状态)
  • oss:GetObject(从 OSS 下载扩展包文件)

详细的策略配置请参阅 references/ram-policies.md。

**[MUST] 权限失败处理:**执行期间,任何命令或 API 调用因权限错误而失败时,请按以下流程处理:

  1. 阅读 references/ram-policies.md,获取此 SKILL 所需权限的完整列表
  2. 使用 ram-permission-diagnose 技能,引导用户申请所需权限
  3. 暂停操作,等待用户确认已授予所需权限

参数确认

重要:参数确认——执行任何安装命令之前, 必须与用户确认所有可由用户自定义的参数。未经用户明确批准,切勿假设或使用默认值。

参数名称必填/可选说明默认值
RegionId必填目标实例所在的地域N/A
InstanceId必填要安装扩展的一个或多个 ECS 实例 IDN/A
PackageName必填扩展包名称(例如,ACS-Extension-BaoTaPanelFree-One-Click-1853370294850618)N/A
Parameters可选扩展专属的安装参数(版本等)由模板决定
输入验证规则

[MUST] 在组装任何 CLI 命令之前,验证所有用户提供的输入值。立即拒绝无效输入,并提示用户更正。绝不要将未经验证的用户输入传入 shell 命令字符串。

参数验证规则示例
InstanceId必须匹配正则表达式 ^i-[a-zA-Z0-9]{10,30}$。数组中的每个 ID 都必须通过验证。i-bp12z30vh0xxxxxxxxxx
RegionId必须是有效的 Alibaba Cloud 区域 ID。调用 aliyun ecs describe-regions,并与返回的区域列表进行比对来验证。cn-hangzhou、us-east-1
PackageName必须匹配正则表达式 ^[a-zA-Z0-9][a-zA-Z0-9\-]*$(仅包含字母数字字符和连字符,且必须以字母数字字符开头)。ACS-Extension-node-1853370294850618
ResourceIds 数组每次执行最多 50 个实例。—

特殊字符转义: 验证后,所有用户提供的字符串值都必须在嵌入 --Parameters JSON 字符串之前进行正确的 JSON 转义(例如引号、反斜杠)。尽可能使用 jq 或同等工具以编程方式构造 JSON 负载,而不是手动拼接字符串。


按场景路由

IMPORTANT:开始安装之前,先识别用户意图并遵循相应的工作流。

根据用户的请求,路由到相应场景:

用户意图触发关键词处理方式
查询可用扩展“有哪些扩展”、“列表”、“可用扩展”、“给我看看”执行 场景 1
查询扩展是否受支持“我可以安装吗”、“是否支持”、“有吗”、“支持”执行 场景 2
安装扩展“安装”、“部署”、“一键安装”、“设置”执行 场景 3

场景 1:查询可用扩展列表

当用户询问“有哪些可用扩展?”或类似问题时,请按以下步骤操作:

步骤 1:列出模板

调用 list-templates 获取所有可用的公共扩展包:

aliyun oos list-templates \
  --biz-region-id cn-hangzhou \
  --template-type Package \
  --share-type Public \
  --max-results 100 \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ecs-install-extension
步骤 2:解析并显示结果

解析响应,并以表格形式向用户展示结果:

扩展名称描述类别
(来自 TemplateName,优先使用解析后的 Description JSON 中的 name-zh-cn)(来自解析后的 Description JSON 中的 zh-cn 或 en)(来自解析后的 Description JSON 中的 categories)

注意: Description 字段是包含元数据的 JSON 字符串。解析该字段以提取:

  • name-zh-cn:中文显示名称(优先显示)
  • name-en:英文显示名称
  • zh-cn:中文描述
  • en:英文描述
  • categories:类别标签数组
  • doc-zh-cn:中文文档链接
  • doc-en:英文文档链接
  • image:图标 URL

Description 值示例:

"Description": "{\"categories\":[\"application\"],\"en\":\"BaoTa Panel free edition one-click installation\",\"zh-cn\":\"BaoTa Panel free edition one-click installation\",\"name-en\":\"BaoTaPanelFree-One-Click\",\"name-zh-cn\":\"BaoTaPanelFree-One-Click\",\"image\":\"https://oos-public-template.oss-cn-beijing.aliyuncs.com/BaoTaPanelFree/icon.png\"}"

注意: 命令中的 --biz-region-id 用于 API 端点路由。返回的公共模板在所有区域均可用。


场景 2:查询是否支持特定扩展

当用户询问“我可以安装 XXX 吗?”或类似问题时,请按以下步骤操作:

步骤 1:列出并搜索

调用 list-templates(与场景 1 相同),并按关键词搜索扩展:

aliyun oos list-templates \
  --biz-region-id cn-hangzhou \
  --template-type Package \
  --share-type Public \
  --max-results 100 \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ecs-install-extension
步骤 2:匹配结果
  • 如果匹配成功:返回扩展详情(名称、描述、支持的操作系统等)
  • 如果未匹配:告知用户当前不支持该扩展,并推荐类似的替代方案或建议通过场景 1 浏览完整列表

场景 3:安装扩展

这是核心工作流。请严格按以下步骤操作:

步骤 1:确认扩展名称

确认用户要安装的准确扩展名称。

  • 如果用户不确定,请先执行场景 1或场景 2,帮助用户找到正确的扩展。
  • 如果用户提供的名称不明确(例如,“BT Panel”),请搜索并确认准确的 TemplateName(例如,ACS-Extension-BaoTaPanelFree-One-Click-1853370294850618)。
步骤 2:获取模板详情

调用 get-template 获取扩展模板详情。将输出重定向到临时文件,以避免终端截断(Content 字段通常很大):

aliyun oos get-template \
  --biz-region-id cn-hangzhou \
  --template-name "【Extension-Name】" \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ecs-install-extension > /tmp/oos-template.json

然后从模板内容中提取 Parameters:

jq -r '(.Content | fromjson | .Parameters)' /tmp/oos-template.json

[IMPORTANT] 输出截断警告:get-template 返回的 Content 字段通常很大(包含完整的安装脚本)。务必先将命令输出重定向到临时文件(> /tmp/oos-template.json),再使用 jq 或文件读取工具进行解析。不要直接依赖终端输出——被截断的 JSON 会导致解析错误。

Content 字段(JSON 字符串)包含:

  • Parameters:定义所需的安装参数(例如,版本号、安装路径等)
  • Description:扩展描述
  • TemplateVersion:模板版本

解析 Content.Parameters,并提取所有必需和可选参数。

步骤 3:引导用户提供参数

根据步骤 2 中解析出的 Parameters,引导用户提供必要的值:

  • 必需参数:必须获取用户输入
  • 可选参数:告知用户默认值;如果用户未提供,则使用默认值

[IMPORTANT] 仅从 Content.Parameters 提取参数。不要根据 InstallScript 或其他模板内容推断参数——脚本中的 shell 变量属于内部实现细节,并非用户可配置参数。

常见参数示例:

参数类型描述
versionString软件版本号(例如,Node.js 的 v22.13.1)
packageVersionString扩展包版本(例如,v27)

**注意:**不要编造参数值。参数值必须来自用户或模板默认值。

步骤 4:确认所有参数

[MUST] 执行安装前,必须向用户输出包含以下所有项目的参数确认表,并明确询问:“请确认以上参数是否正确,然后我再继续安装。” 在用户明确肯定答复之前,不得进入步骤 5。即使用户已在最初请求中提供所有参数,仍必须执行确认步骤。

项目值
RegionId(用户提供)
InstanceId(s)(用户提供,支持多个)
扩展名称(PackageName)(在步骤 1 中确认)
安装参数(来自步骤 2/3,包括版本和将使用的任何默认值)

**[MUST] 实例数量核验:**核验 InstanceId 的数量是否与用户的请求一致。如果用户提及 N 个实例,但提供的 ID 少于 N 个,请在继续之前询问缺少的实例 ID。

[MUST] 安装操作会修改实例状态。执行前必须取得用户的明确确认。在任何情况下都不得跳过此步骤。

步骤 5:执行安装

[MUST] 幂等性检查: 执行前,查询是否已存在针对同一扩展和目标实例的运行中执行:

aliyun oos list-executions \
  --biz-region-id "【User-Provided-Region】" \
  --template-name "ACS-ECS-BulkyConfigureOOSPackageWithTemporaryURL" \
  --status Running \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ecs-install-extension

如果找到 packageName 和 targets 相同的运行中执行:

  1. 告知用户已有执行正在运行
  2. 询问用户是等待该执行完成,还是创建新执行
  3. 如果用户未回复或确认继续,你仍必须调用 start-execution 创建新执行——在任何情况下都不得跳过 start-execution

调用 start-execution 是此步骤的强制核心操作,除非用户明确要求等待现有执行,否则必须始终执行。

[RECOMMENDED] ClientToken: 生成确定性的 ClientToken,以防重试导致重复提交。ClientToken 必须是由 1-64 个 ASCII 字符组成的字符串。

# 生成确定性的 ClientToken 并保存,以供重复使用
CLIENT_TOKEN="${regionId}-${packageName}-$(date +%Y%m%d%H%M)"

# 后续所有重试都复用同一个令牌,确保幂等性
aliyun oos start-execution \
  ... \
  --client-token "$CLIENT_TOKEN"

这样,无论命令重试多少次,相同的安装意图始终会映射到同一个令牌。

[MUST] 调用 start-execution 执行安装任务(不得跳过此调用):

[MUST] 参数记录: 执行 start-execution 前,将完整的 --parameters JSON 保存到文件以便追溯,然后在命令中使用该文件的内容:

# Save parameters to file for traceability
cat > /tmp/oos-start-params.json << 'PARAMS_EOF'
{"regionId":"【User-Provided-Region】","OOSAssumeRole":"","targets":{"ResourceIds":["【User-Provided-InstanceId】"],"RegionId":"【User-Provided-Region】","Type":"ResourceIds"},"rateControl":{"Mode":"Concurrency","Concurrency":1,"MaxErrors":0},"action":"install","packageName":"【User-Specified-Package】","parameters":【User-Provided-Parameters】}
PARAMS_EOF

# Execute with parameters from file
aliyun oos start-execution \
  --biz-region-id "【User-Provided-Region】" \
  --template-name "ACS-ECS-BulkyConfigureOOSPackageWithTemporaryURL" \
  --mode "Automatic" \
  --tags "{}" \
  --parameters "$(cat /tmp/oos-start-params.json)" \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ecs-install-extension

[MUST] 执行后,记录传入的关键参数值:

Parameters passed to OOS:
  - packageName: <actual value>
  - packageVersion: <actual value, if applicable>
  - parameters.version: <actual value, if applicable>
  - targets.ResourceIds: <actual value>

在安装报告的“安装参数”字段中包含完整参数 JSON(来自 /tmp/oos-start-params.json)。

参数说明:

参数说明
regionId必须与 --biz-region-id 一致
targets.ResourceIds要安装到的实例 ID 数组
targets.RegionId必须与 --biz-region-id 一致
targets.Type固定值 ResourceIds
rateControl.Concurrency并发安装数,默认值为 1
rateControl.MaxErrors允许的最大错误数,默认值为 0
action固定值 install
packageName扩展包名称
parameters扩展专属的安装参数(JSON 对象)

示例:

aliyun oos start-execution \
  --biz-region-id cn-hangzhou \
  --template-name "ACS-ECS-BulkyConfigureOOSPackageWithTemporaryURL" \
  --mode "Automatic" \
  --tags "{}" \
  --parameters "{\"regionId\":\"cn-hangzhou\",\"OOSAssumeRole\":\"\",\"targets\":{\"ResourceIds\":[\"i-bp12z30vh0xxxxxxxxxx\"],\"RegionId\":\"cn-hangzhou\",\"Type\":\"ResourceIds\"},\"rateControl\":{\"Mode\":\"Concurrency\",\"Concurrency\":1,\"MaxErrors\":0},\"action\":\"install\",\"packageName\":\"ACS-Extension-node-1853370294850618\",\"packageVersion\":\"v27\",\"parameters\":{\"version\":\"v22.13.1\"}}" \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ecs-install-extension
第 6 步:检查执行结果并验证

命令返回后,从响应中提取 ExecutionId,并轮询执行状态:

aliyun oos list-executions \
  --biz-region-id "【User-Provided-Region】" \
  --execution-id "【ExecutionId-from-Response】" \
  --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ecs-install-extension

轮询策略:每隔 20 秒检查一次执行状态。如果状态仍为 Running,等待 20 秒后再次检查。最长等待时间为 20 分钟(检查 60 次)。

[MUST] 终止状态要求:你必须持续轮询,直到执行达到终止状态(Success、Failed 或 Cancelled)。状态为 Running 时,绝对禁止生成安装报告。只有在以下两种情况下,才可以停止轮询并生成报告:

  1. 执行已达到终止状态(Success、Failed 或 Cancelled)
  2. 已按 20 秒的间隔轮询满 20 分钟(检查 60 次),状态仍为 Running——此时输出一份 PENDING 报告,将执行状态设为 Pending (timed out after 20 minutes),并在结果详情中注明:“安装仍在进行中,已超过 20 分钟的最长等待时间。请使用以下命令手动检查状态:aliyun oos list-executions --biz-region-id <region> --execution-id <exec-id> --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ecs-install-extension”

任何其他情况(例如,状态仍为 Running,但轮询次数少于 60 次)都绝对禁止生成报告。你必须继续轮询。

安装状态说明:

状态说明
Running安装正在进行中——等待 20 秒后再次检查。暂勿输出报告。
Success安装成功——继续生成报告
Failed安装失败——查看 Outputs 或 Tasks 获取错误详情,然后生成报告
Cancelled安装已取消——生成报告

安装报告输出格式

[MUST] 仅在满足以下任一条件时生成此报告:

  1. 执行已达到终止状态(Success、Failed、Cancelled)
  2. 已轮询满 20 分钟(检查 60 次),且状态仍为 Running(报告为 Pending (timed out after 20 minutes))

**如果轮询次数未达到 60 次,且状态仍为 Running,绝对禁止生成此报告。**你必须继续轮询。

================== ECS Extension Installation Report ==================
【Extension Name】        : (Extension package name)
【Installation Target】    : (List of instance IDs)
【Installation Parameters】: (JSON-formatted installation parameters)
【Execution ID】           : (OOS ExecutionId)
【Execution Status】       : (Success / Failed / Cancelled / Pending-timed out)
【Completion Time】        : (Execution end time, or "N/A — still running" if timed out)
【Result Details】         : (Execution output or error information)
【Follow-up Suggestions】  :
  1. (Suggestion 1, e.g., verify service status)
  2. (Suggestion 2, e.g., security group port opening)
  3. (Suggestion 3, e.g., check installation logs)
=======================================================================

最佳实践

  1. 安装前确认参数——安装扩展会修改实例环境;执行前必须与用户确认所有参数
  2. 检查实例状态——确保目标实例在安装前处于 Running 状态
  3. 选择正确的版本——版本参数因扩展而异;向用户获取正确的版本号
  4. 支持多个实例——ResourceIds 支持数组;可同时在多个实例上安装同一扩展
  5. 注意安全——切勿在命令或报告中泄露 AK/SK

参考链接

文档说明
相关命令CLI 命令规范及所有命令参考
RAM 策略所需 RAM 权限列表
CLI 安装指南Aliyun CLI 安装说明

注意事项

  1. 扩展安装可能需要几分钟;请耐心等待并定期查询执行状态
  2. API 调用失败时,阅读错误消息、检查权限并重试
  3. 敏感信息(AccessKey、密码)绝不能出现在报告或命令中
  4. 某些扩展可能需要特定版本的操作系统;请在 get-template 响应中确认操作系统兼容性
  5. 扩展安装失败通常由以下原因导致:实例未运行、网络问题、操作系统版本不兼容或磁盘空间不足

评论

支持 Markdown