关于 alibabacloud-ecs-install-extension
这项 Alibaba Cloud Agent 技能通过 OOS 查询和安装 ECS 扩展包,供云运维人员浏览可用扩展、核实支持情况,并在确认参数后部署到一个或多个 ECS 实例。
主要功能
- 01列出可用扩展包
- 02检查指定扩展是否受支持
- 03在 ECS 实例上安装扩展
- 04支持单个或多个实例安装
- 05验证安装输入和参数
适用场景
- 01查询可用的 ECS 扩展
- 02确认某个扩展是否受支持
- 03在 ECS 上安装开发环境
- 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.mdram-policies.mdrelated-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 身份)。
如果不存在有效配置,请在此处停止。
- 从 Alibaba Cloud 控制台 获取凭证
- 在此会话之外配置凭证(在终端中运行
aliyun configure,或在 shell 配置文件中设置环境变量)- 返回并在
aliyun configure list显示有效配置后重新运行
Endpoint 说明(插件模式):在插件模式下,通常无需使用
--endpoint标志。OOS 插件会根据--biz-region-id自动解析 Endpoint。如果 Endpoint 解析失败,请检查--biz-region-id的值是否为有效的 Alibaba Cloud 区域 ID(例如cn-hangzhou)。
AI 模式与插件更新
[MUST] 在此工作流中执行任何
aliyunCLI 命令之前,请先运行以下初始化命令: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,了解命令格式规范。关键规则:
- 所有
aliyunCLI 命令的操作名称和标志都必须使用插件模式(小写连字符格式)。这适用于所有云服务,而不仅仅是 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 调用因权限错误而失败时,请按以下流程处理:
- 阅读
references/ram-policies.md,获取此 SKILL 所需权限的完整列表- 使用
ram-permission-diagnose技能,引导用户申请所需权限- 暂停操作,等待用户确认已授予所需权限
参数确认
重要:参数确认——执行任何安装命令之前, 必须与用户确认所有可由用户自定义的参数。未经用户明确批准,切勿假设或使用默认值。
| 参数名称 | 必填/可选 | 说明 | 默认值 |
|---|---|---|---|
RegionId | 必填 | 目标实例所在的地域 | N/A |
InstanceId | 必填 | 要安装扩展的一个或多个 ECS 实例 ID | N/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 个实例。 | — |
特殊字符转义: 验证后,所有用户提供的字符串值都必须在嵌入
--ParametersJSON 字符串之前进行正确的 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 变量属于内部实现细节,并非用户可配置参数。
常见参数示例:
| 参数 | 类型 | 描述 |
|---|---|---|
version | String | 软件版本号(例如,Node.js 的 v22.13.1) |
packageVersion | String | 扩展包版本(例如,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相同的运行中执行:
- 告知用户已有执行正在运行
- 询问用户是等待该执行完成,还是创建新执行
- 如果用户未回复或确认继续,你仍必须调用
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时,绝对禁止生成安装报告。只有在以下两种情况下,才可以停止轮询并生成报告:
- 执行已达到终止状态(
Success、Failed或Cancelled)- 已按 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] 仅在满足以下任一条件时生成此报告:
- 执行已达到终止状态(
Success、Failed、Cancelled)- 已轮询满 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)
=======================================================================
最佳实践
- 安装前确认参数——安装扩展会修改实例环境;执行前必须与用户确认所有参数
- 检查实例状态——确保目标实例在安装前处于
Running状态 - 选择正确的版本——版本参数因扩展而异;向用户获取正确的版本号
- 支持多个实例——
ResourceIds支持数组;可同时在多个实例上安装同一扩展 - 注意安全——切勿在命令或报告中泄露 AK/SK
参考链接
| 文档 | 说明 |
|---|---|
| 相关命令 | CLI 命令规范及所有命令参考 |
| RAM 策略 | 所需 RAM 权限列表 |
| CLI 安装指南 | Aliyun CLI 安装说明 |
注意事项
- 扩展安装可能需要几分钟;请耐心等待并定期查询执行状态
- API 调用失败时,阅读错误消息、检查权限并重试
- 敏感信息(AccessKey、密码)绝不能出现在报告或命令中
- 某些扩展可能需要特定版本的操作系统;请在
get-template响应中确认操作系统兼容性 - 扩展安装失败通常由以下原因导致:实例未运行、网络问题、操作系统版本不兼容或磁盘空间不足