
Alibabacloud Ehpc Instant Job Skill
- 37 installs
- 208 repo stars
- Updated August 4, 2026
- aliyun/alibabacloud-aiops-skills
alibabacloud-ehpc-instant-job-skill is a Claude skill that manages the full lifecycle of Alibaba Cloud E-HPC Instant compute jobs via the Aliyun CLI or SDK.
About
This skill manages the lifecycle of Alibaba Cloud E-HPC Instant compute-platform jobs, including creating and submitting, querying lists, fetching details, viewing logs, and deleting jobs. It supports both container and VM jobs with resource, network, and storage configuration. A developer uses it to run and manage HPC compute jobs via the Aliyun CLI or SDK. Documentation is primarily in Chinese.
- Full lifecycle management of E-HPC Instant compute jobs
- Supports container and VM job creation with resource and network config
- Uses the Aliyun CLI (preferred) or SDK with AI-mode
Alibabacloud Ehpc Instant Job Skill by the numbers
- 37 all-time installs (skills.sh)
- Ranked #771 of 1,039 Cloud & Infrastructure skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
alibabacloud-ehpc-instant-job-skill capabilities & compatibility
Requires Alibaba Cloud credentials; running HPC compute jobs incurs cloud charges
- Capabilities
- devops · orchestration
- Works with
- aws
- Use cases
- devops · orchestration
- Runs
- Runs locally
- Pricing
- Bring your own API key
What alibabacloud-ehpc-instant-job-skill says it does
通过阿里云CLI(优先)或SDK工具,实现对E-HPC Instant计算平台作业及计算资源的全生命周期管理。
aliyun ehpcinstant ListJobs --region cn-shanghai
npx skills add https://github.com/aliyun/alibabacloud-aiops-skills --skill alibabacloud-ehpc-instant-job-skillAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 37 |
|---|---|
| repo stars | ★ 208 |
| Last updated | August 4, 2026 |
| Repository | aliyun/alibabacloud-aiops-skills ↗ |
What it does
Manage the lifecycle of Alibaba Cloud E-HPC Instant compute jobs: create, query, detail, log, and delete.
Who is it for?
Creating, querying, and deleting compute jobs on Alibaba Cloud E-HPC Instant
Skip if: Non-HPC workloads or Alibaba Cloud products outside E-HPC Instant
When should I use this skill?
A developer needs to create, list, inspect, log, or delete an E-HPC Instant compute job
What you get
Creates, queries, and manages E-HPC Instant compute jobs and their resources across their lifecycle.
- Created or submitted E-HPC Instant jobs
- Job list, details, logs, or deletion results
By the numbers
- 4-step execution flow
- default region cn-shanghai
Files
阿里云E-HPC Instant作业管理技能
技能概述
通过阿里云CLI(优先)或SDK工具,实现对E-HPC Instant计算平台作业及计算资源的全生命周期管理。
交互原则
- 用户友好:使用"您"而非"你",保持专业而友好的语调
- 透明操作:所有关键配置信息必须向用户展示并获得确认
- 安全第一:遵循最小权限原则,避免意外操作
- 错误处理:提供清晰的错误信息和解决方案
- 格式规范:使用简单、清晰、易读的输出格式
执行流程
- Step1: 配置预加载
- Step2: 前置条件校验
- Step3: 作业管理执行
- Step4: 作业任务执行结果输出
Step 1: 配置预加载
[MUST] 必须首先尝试读取 ./jobconfig/pre-config.json 文件,严禁跳过此检查步骤。- 文件存在且读取成功:加载其中的参数值,向用户提示预配置已加载并展示关键参数摘要,然后进入 Step 2。
- 文件不存在:向用户提示未检测到预配置文件,将在 Step 2 中通过交互方式获取必要参数,然后进入 Step 2。
- 文件存在但读取/解析失败(如 JSON 格式错误、权限不足等):向用户报告具体错误信息,询问是否继续(跳过预配置进入 Step 2)或中止执行。
Step 2: 前置条件校验
所有作业管理任务通用校验
1. 阿里云CLI配置:验证CLI已安装并配置AccessKey
- CLI版本要求 >= 3.3.3:运行
aliyun version验证版本 >= 3.3.3。若未安装或版本过低,参考 references/aliyun-cli.md 中的安装说明进行安装或更新。 - [MUST] 运行
aliyun configure set --auto-plugin-install true启用自动插件安装。 - [MUST] 运行
aliyun plugin update确保已安装插件始终为最新版本。 - 若无配置,引导用户交互式安装和配置
- 参考:references/aliyun-cli.md
- [MUST] CLI User-Agent — 每个
aliyunCLI 命令调用必须包含:--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill - 启用阿里云CLI AI模式:运行以下初始化命令,附加本Skill执行的AI身份信息:
```bash
aliyun configure ai-mode enable
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill"
aliyun plugin update
```
阿里云CLI提供了AI模式。启用后,CLI会自动附加AI身份信息,使服务端能够识别并优化Agent调用链路。
[MUST] 在每个退出点禁用AI模式 — 在因任何原因交付最终响应之前,务必先禁用AI模式。这适用于所有退出路径:工作流成功、工作流失败、错误/异常、用户取消、会话结束,或任何不再执行CLI命令的场景。
AI模式仅用于Agent Skill调用场景,技能停止运行后必须保持禁用状态。
```bash
aliyun configure ai-mode disable
```
2. 地域信息:获取用户指定区域或使用默认区域cn-shanghai 3. 权限验证:确保AccessKey具备E-HPC Instant相关权限
创建作业任务专项校验
1. 镜像准备:容器/VM镜像已添加至E-HPC Instant平台
- 若无镜像,引导用户交互式添加
- 参考:references/instant-image.md
2. 网络配置:vSwitch已创建并可用
- 若无vSwitch,引导用户交互式创建
- 参考:references/vswitch.md
3. 存储配置:NAS挂载路径已准备(如需要)
- 若需NAS,引导用户交互式配置
- 参考:references/storage.md
4. 计算资源配置:Cores/Memory或InstanceType规格已指定
- 引导用户选择合适的资源配置
- 参考:references/resource.md
5. 执行命令:作业执行命令行已指定
- 确保命令格式正确(特别是JSON数组格式)
- 参考:references/job-command.md
Step 3: 作业管理执行
根据用户需求执行相应的作业管理操作
创建作业
1. Container容器作业
aliyun ehpcinstant CreateJob \
--region cn-shanghai \
--JobName 'container-job' \
--Tasks '[{
"TaskSpec": {
"TaskExecutor": [{
"Container": {
"Image": "registry.cn-shanghai.aliyuncs.com/registry/image:tag",
"Command": "[\"/bin/sh\", \"-c\", \"python /app/main.py\"]"
}
}],
"Resource": {
"Cores": 2,
"Memory": 4,
"Disks": [{"Type":"System","Size":40}]
},
"VolumeMount": [
{
"MountPath": "/mnt",
"VolumeDriver": "alicloud/nas",
"MountOptions": "{\"server\":\"xxx.cn-shanghai.nas.aliyuncs.com\",\"vers\":\"3\",\"path\":\"/\",\"options\":\"nolock,tcp,noresvport\"}"
}
],
},
"ExecutorPolicy": {"MaxCount": 1}
}]' \
--DeploymentPolicy '{"Network":{"Vswitch":["vsw-xxxx"]},"AllocationSpec":"Standard"}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill2. VM虚拟机作业
aliyun ehpcinstant CreateJob \
--region cn-shanghai \
--JobName 'longrunning-job' \
--JobDescription 'Long-running VM job' \
--Tasks '[{
"TaskSpec": {
"TaskExecutor": [{
"VM": {
"Image": "m-xxxx",
"Script": "base64_encoded_script"
}
}],
"Resource": {
"Disks": [{"Type":"System","Size":50}],
"InstanceTypes": ["ecs.c6.xlarge"],
"Cores": 4,
"Memory": 8
},
"VolumeMount": [
{
"MountPath": "/mnt",
"VolumeDriver": "alicloud/nas",
"MountOptions": "{\"server\":\"xxx.cn-shanghai.nas.aliyuncs.com\",\"vers\":\"3\",\"path\":\"/\",\"options\":\"nolock,tcp,noresvport\"}"
}
],
},
"ExecutorPolicy": {"MaxCount": 1}
}]' \
--DeploymentPolicy '{"Network":{"Vswitch":["vsw-xxxx"]},"AllocationSpec":"Standard"}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill查询作业列表
# 基本列表查询
aliyun ehpcinstant ListJobs --region cn-shanghai \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill
# 分页查询(推荐用于大量作业)
aliyun ehpcinstant ListJobs --region cn-shanghai --PageSize 10 --PageNumber 1 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill
# 条件过滤(按状态、时间等)
aliyun ehpcinstant ListJobs --region cn-shanghai --Filter '{"Status":"Running"}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill获取作业详情
aliyun ehpcinstant GetJob --region cn-shanghai --JobId 'job-xxxx' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill查询作业日志
aliyun ehpcinstant DescribeJobResults --region cn-shanghai --JobId 'job-sh145rw47pegztzdpu7s' --TaskName Task0 --ArrayIndex 0 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill删除作业
# 删除单个作业
aliyun ehpcinstant DeleteJobs --region cn-shanghai --JobSpec '[{"JobId":"job-xxxx"}]' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill
# 批量删除(安全方式)
aliyun ehpcinstant DeleteJobs --region cn-shanghai --JobSpec '[{"JobId":"job-xxxx"},{"JobId":"job-yyyy"}]' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill[MUST] 幂等删除原则 — 当用户请求删除作业时,即使通过 GetJob 或 ListJobs 查询确认作业已不存在,Agent 仍必须调用 DeleteJobs API 并传入对应 JobId。DeleteJobs API 具备幂等性:作业存在时执行删除,作业不存在时返回标准 NotFound 响应。严禁 Agent 以"作业已不存在"为由自行跳过 API 调用 — 必须让服务端确认最终状态。
Step 4: 结果输出与后续建议
- 格式化输出执行结果
- 提供后续操作建议(如监控、日志查看等)
- 记录关键信息供后续参考
作业管理参考执行脚本
路径:/home/admin/.openclaw/workspace/skills/ehpcinstant-job-skill/scripts/
CLI脚本:
create_container_job.sh- 创建容器作业create_vm_job_batch.sh- 创建VM作业create_vm_job_longrunning.sh- 创建长期运行的VM作业list_jobs.sh- 列出作业(支持分页)get_job.sh- 获取作业详情delete_jobs.sh- 删除作业
SDK脚本:
- 对应的Python SDK版本脚本,位于
scripts/sdk/目录 create_container_job.py- 创建容器作业create_vm_job_batch.py- 创建VM作业create_vm_job_longrunning.py- 创建长期运行的VM作业list_jobs.py- 列出作业(支持分页)get_job.py- 获取作业详情delete_jobs.py- 删除作业
注意事项
1. CLI命令准确性:E-HPC Instant使用aliyun ehpcinstant命令,不是aliyun ehpc! 2. 区域一致性:所有资源必须在同一区域,跨区域操作会失败 3. 配额限制:注意账户配额限制,避免操作失败 4. 成本意识:作业运行会产生费用,及时清理不需要的资源 5. 权限最小化:为AccessKey配置最小必要权限,提高安全性
故障排查与最佳实践
常见问题解决方案
| 问题 | 根本原因 | 解决方案 |
|---|---|---|
| InvalidCommand错误 | Command参数格式不正确 | 使用正确的JSON数组格式:["/bin/sh", "-c", "command"] |
| 认证失败 | AccessKey配置错误或权限不足 | 检查~/.aliyun/config.json配置,确保具备E-HPC Instant权限 |
| 镜像不存在 | 镜像ID错误或区域不匹配 | 确认镜像ID正确且在相同区域,参考references/instant-image.md |
| 网络配置错误 | VSwitch ID错误或不可用 | 检查VSwitch ID和安全组配置,参考references/vswitch.md |
| 资源配额不足 | 账户配额限制 | 联系阿里云增加配额,或调整资源配置 |
| 命令执行失败 | 容器内命令路径错误 | 确保命令在镜像环境中可执行,使用绝对路径 |
最佳实践指南
1. 命名规范:
- 作业名称:
应用-算例-时间戳(如:prod-training-20260411) - 资源名称:包含用途、环境、区域信息
2. 资源配置优化:
- 根据应用特性选择合适的实例规格
- 避免过度配置造成资源浪费
3. 成本控制:
- 及时清理已完成的作业
- 使用适当的作业超时设置
- 监控资源使用情况
4. 可靠性保障:
- 实现作业状态监控和重试机制
- 配置适当的错误处理和告警
- 定期备份重要配置和数据
5. 安全性增强:
- 使用私有镜像仓库
- 配置最小权限的AccessKey
- 启用网络访问控制和加密
参考资料与扩展
完整API参考
如仍有作业管理执行参数不确定,可参考如下链接:
- references/ehpcinstant.md - E-HPC Instant完整CLI命令手册
- CLI帮助命令:
aliyun ehpcinstant <ApiName> --help
专项配置指南
- references/aliyun-cli.md - 阿里云CLI配置指南
- references/instant-image.md - 镜像管理指南
- references/vswitch.md - 网络vSwitch管理指南
- references/storage.md - NAS存储管理指南
- references/resource.md - 计算资源配置指南
- references/job-command.md - 作业命令配置指南
官方文档
- 阿里云E-HPC Instant产品文档:https://help.aliyun.com/product/ehpcinstant.html
- E-HPC Instant API文档:https://api.aliyun.com/document/EhpcInstant/2023-07-01/overview
- 阿里云CLI官方文档:https://help.aliyun.com/document_detail/121529.html
安全策略与风险控制
操作风险等级分类
| 风险级别 | 操作类型 | Agent行为准则 |
|---|---|---|
| 低风险 | 查询类操作 (list, get, check, describe) | 直接执行,无需额外确认 |
| 中风险 | 配置类操作 (configure, modify, update) | 提示影响范围,获得用户确认后执行 |
| 高风险 | 创建/删除类操作 (create, delete, remove) | 必须完整展示所有配置信息,用户明确确认后执行 |
[MUST] 禁止跳过 API 调用 — Agent 在执行删除等操作时,不得基于查询结果(如 GetJob 返回 NotFound)自行判定"无需操作"而跳过实际的 API 调用。查询与变更之间存在时间窗口,服务端状态可能已变化。Agent 必须始终执行用户请求的目标 API(如 DeleteJobs),由服务端返回权威的最终结果。
安全检查清单
- ✅ 区域一致性:确保所有资源在同一区域
- ✅ 配额检查:验证资源配额是否充足
- ✅ 依赖验证:确认依赖资源(镜像、网络、存储)存在且可用
- ✅ 权限验证:确保AccessKey具备必要权限
- ✅ 成本提醒:对于可能产生较高费用的操作给予提醒
敏感操作确认流程
1. 信息汇总:展示所有关键配置参数 2. 影响说明:说明操作的影响范围和潜在风险 3. 用户确认:等待用户明确确认("是"、"确认"、"继续"等) 4. 执行操作:执行确认后的操作 5. 结果反馈:提供详细的操作结果和后续建议
阿里云CLI配置指南
版本要求
阿里云 CLI >= 3.3.3。运行 aliyun version 查看当前版本。
安装阿里云CLI
Linux/macOS(推荐:分步安装)
# 1. 下载安装包
curl -fsSL -o /tmp/aliyun-cli.tgz https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
# 2. 校验文件完整性(确保下载未被篡改)
# 获取官方 SHA256 校验和
curl -fsSL -o /tmp/aliyun-cli.tgz.sha256 https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz.sha256
# 执行校验
cd /tmp && shasum -a 256 -c aliyun-cli.tgz.sha256
# 3. 解压并安装
tar xzf /tmp/aliyun-cli.tgz -C /tmp
sudo mv /tmp/aliyun /usr/local/bin/
# 4. 验证安装
aliyun versionmacOS (Homebrew)
brew install aliyun-cli
aliyun versionWindows (PowerShell)
Invoke-WebRequest -Uri "https://aliyuncli.alicdn.com/aliyun-cli-windows-latest-amd64.zip" -OutFile "$env:TEMP\aliyun-cli.zip"
Expand-Archive -Path "$env:TEMP\aliyun-cli.zip" -DestinationPath "$env:TEMP\aliyun-cli" -Force
Move-Item "$env:TEMP\aliyun-cli\aliyun.exe" "$env:LOCALAPPDATA\Microsoft\WindowsApps\" -Force
aliyun version配置AccessKey
aliyun configure
# 按提示输入:
# Access Key ID: [您的AccessKey ID]
# Access Key Secret: [您的AccessKey Secret]
# Default Region Id: cn-shanghai
# Default Output Format: json配置 AI-Mode
阿里云 CLI 提供了 AI 模式。启用后,CLI 会自动附加Skill身份信息,使服务端能够识别并优化技能调用链路。
# Enable AI-Mode
aliyun configure ai-mode enable
# Set AI-Mode user-agent identifier
aliyun configure ai-mode set-user-agent --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill
# View AI-Mode configuration
aliyun configure ai-mode show
# Aliyun CLI Plugin Update
aliyun plugin update
# Disable AI-Mode
aliyun configure ai-mode disable验证配置
aliyun configure list
aliyun ehpcinstant ListJobs --region cn-shanghai \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill常见问题
- 认证失败:检查
~/.aliyun/config.json文件中的 AccessKey 配置 - 区域错误:确保使用正确的区域(如 cn-shanghai)
- 权限不足:确保 AccessKey 具有 E-HPC Instant 相关权限
SDK 凭证配置说明
本目录下的 Python SDK 脚本使用 默认凭证链(AcsClient(region_id='cn-shanghai')),SDK 会按以下优先级自动查找凭证:
凭证解析顺序
1. 环境变量 — 设置以下环境变量即可:
export ALIBABA_CLOUD_ACCESS_KEY_ID=<your-access-key-id>
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<your-access-key-secret>如需使用 STS 临时凭证,额外设置:
export ALIBABA_CLOUD_SECURITY_TOKEN=<your-security-token>2. 配置文件 — 通过 aliyun configure 命令生成的 ~/.aliyun/config.json:
aliyun configure
# 按提示输入 Access Key ID、Access Key Secret、默认区域(cn-shanghai)配置完成后 SDK 会自动读取该文件中的凭证信息。
3. ECS RAM 角色 — 在 ECS 实例上运行时,SDK 自动通过实例元数据获取关联 RAM 角色的临时凭证,无需任何配置。
推荐方式
| 场景 | 推荐方式 |
|---|---|
| 本地开发/调试 | 方式 2:aliyun configure 配置文件 |
| CI/CD 流水线 | 方式 1:环境变量 |
| ECS 实例上运行 | 方式 3:ECS RAM 角色(零配置) |
| 临时/跨账号访问 | 方式 1:环境变量 + STS Token |
注意事项
- 所有脚本默认使用
cn-shanghai区域,如需修改请调整AcsClient(region_id='...')参数 - 禁止在代码中硬编码 AccessKey,应始终使用上述凭证链机制
- 确保 AccessKey 对应的 RAM 用户/角色具备 E-HPC Instant 相关权限(参考
references/ram-policies.md)
阿里云E-HPC Instant CLI完整命令参考手册
概述
阿里云E-HPC Instant(弹性高性能计算即时版)提供按需、弹性的高性能计算服务。本手册详细介绍使用阿里云 CLI 进行 E-HPC Instant 计算平台的完整命令参考。
前置条件
1. 安装阿里云CLI:确保已安装并配置阿里云 CLI 2. 权限配置:AccessKey 需要具备 E-HPC Instant 相关权限 3. 区域选择:确认操作的区域(如 cn-shanghai) 4. User-Agent标识:所有命令均应附加 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill 参数,用于服务端识别调用来源。如已通过 aliyun configure ai-mode set-user-agent 配置,则会自动附加,无需手动添加。
1. 作业管理(Job Management)
创建作业(CreateJob)
容器作业(Container Job)
# 基本容器作业
aliyun ehpcinstant CreateJob \
--region cn-shanghai \
--JobName "container-job" \
--Tasks '[{
"TaskSpec": {
"TaskExecutor": [{
"Container": {
"Image": "registry.cn-shanghai.aliyuncs.com/registry/image:tag",
"Command": "[\"/bin/sh\", \"-c\", \"python /app/main.py\"]"
}
}],
"Resource": {
"Cores": 2,
"Memory": 4,
"Disks": [{"Type":"System","Size":40}]
}
},
"ExecutorPolicy": {"MaxCount": 1}
}]'
# 容器作业带网络及存储NAS配置
aliyun ehpcinstant CreateJob \
--region cn-shanghai \
--JobName "container-job-with-network" \
--DeploymentPolicy '{"Network":{"Vswitch":["vsw-xxxxxx"]},"AllocationSpec":"Standard"}' \
--Tasks '[{
"TaskSpec": {
"TaskExecutor": [{
"Container": {
"Image": "registry.cn-shanghai.aliyuncs.com/registry/image:tag",
"Command": "[\"/bin/sh\", \"-c\", \"echo hello\"]",
}
}],
"Resource": {
"Cores": 4,
"Memory": 8
},
"VolumeMount": [
{
"MountPath": "/mnt",
"VolumeDriver": "alicloud/nas",
"MountOptions": "{\"server\":\"xxx.cn-shanghai.nas.aliyuncs.com\",\"vers\":\"3\",\"path\":\"/\",\"options\":\"nolock,tcp,noresvport\"}"
}
],
},
"ExecutorPolicy": {"MaxCount": 1}
}]'虚拟机作业(VM Job)
# 基本VM作业
aliyun ehpcinstant CreateJob \
--region cn-shanghai \
--JobName "vm-job" \
--JobDescription "Long-running VM job" \
--Tasks '[{
"TaskSpec": {
"TaskExecutor": [{
"VM": {
"Image": "m-xxxxxx",
"Script": "IyEvYmluL2Jhc2gKZWNobyAiSGVsbG8gZnJvbSBWTSBqb2IhIgo="
}
}],
"Resource": {
"Disks": [{"Type":"System","Size":50}],
"InstanceTypes": ["ecs.c6.xlarge"],
"Cores": 4,
"Memory": 8
}
},
"ExecutorPolicy": {"MaxCount": 1}
}]' \
--DeploymentPolicy '{"Network":{"Vswitch":["vsw-xxxxxx"]},"AllocationSpec":"Standard"}'参数说明
- JobName: 作业名称(2-64字符,支持字母、数字、中文、连字符、下划线)
- Tasks: 任务列表(目前只支持一个任务)
- DeploymentPolicy: 资源部署策略(网络配置、分配规格)
- JobDescription: 作业描述(可选)
- JobScheduler: 作业调度器类型(HPC/K8S,默认HPC)
查询作业列表(ListJobs)
# 基本查询
aliyun ehpcinstant ListJobs --region cn-shanghai
# 分页查询
aliyun ehpcinstant ListJobs \
--PageSize 10 \
--PageNumber 1 \
--region cn-shanghai
# 条件过滤
aliyun ehpcinstant ListJobs \
--Filter '{"Status":"Running"}' \
--region cn-shanghai
# 排序查询
aliyun ehpcinstant ListJobs \
--SortBy "CreateTime DESC" \
--region cn-shanghai获取作业详情(GetJob)
# 查询特定作业详情
aliyun ehpcinstant GetJob \
--JobId "job-xxxxxx" \
--region cn-shanghai删除作业(DeleteJobs)
# 删除单个作业
aliyun ehpcinstant DeleteJobs \
--JobSpec '[{"JobId":"job-xxxxxx"}]' \
--region cn-shanghai
# 批量删除作业
aliyun ehpcinstant DeleteJobs \
--JobSpec '[{"JobId":"job-xxxxxx"},{"JobId":"job-yyyyyy"}]' \
--region cn-shanghai
# 删除执行器(按执行器ID)
aliyun ehpcinstant DeleteJobs \
--ExecutorIds '["job-xxxxxx-Task0-0"]' \
--region cn-shanghai查询作业日志(DescribeJobResults)
# 查询作业日志
aliyun ehpcinstant DescribeJobResults \
--JobId "job-xxxxxx" \
--TaskName "Task0" \
--ArrayIndex 0 \
--region cn-shanghai
# 限制日志大小
aliyun ehpcinstant DescribeJobResults \
--JobId "job-xxxxxx" \
--LimitBytes "1048576" \
--region cn-shanghai
# 指定时间范围
aliyun ehpcinstant DescribeJobResults \
--JobId "job-xxxxxx" \
--StartTime "2026-04-11T10:00:00Z" \
--region cn-shanghai2. 镜像管理(Image Management)
添加自定义镜像(AddImage)
容器镜像
# 添加容器镜像
aliyun ehpcinstant AddImage \
--region cn-shanghai \
--Name "custom-container-image" \
--Description "Custom container image for E-HPC" \
--ImageType "Container" \
--ContainerImageSpec '{"RegistryUrl":"registry.cn-shanghai.aliyuncs.com/registry/image:tag"}'虚拟机镜像
# 添加VM镜像
aliyun ehpcinstant AddImage \
--region cn-shanghai \
--Name "custom-vm-image" \
--Description "Custom VM image for E-HPC" \
--ImageType "VM" \
--VMImageSpec '{"ImageId":"m-xxxxxx"}'查询镜像列表(ListImages)
# 查询所有镜像
aliyun ehpcinstant ListImages --region cn-shanghai
# 查询容器镜像
aliyun ehpcinstant ListImages \
--ImageType "Container" \
--region cn-shanghai
# 查询自定义镜像
aliyun ehpcinstant ListImages \
--ImageCategory "Custom" \
--region cn-shanghai
# 分页查询
aliyun ehpcinstant ListImages \
--PageSize 20 \
--PageNumber 1 \
--region cn-shanghai
# 合并版本查询(最新版本)
aliyun ehpcinstant ListImages \
--Mode "Merge" \
--region cn-shanghai获取镜像详情(GetImage)
# 查询镜像详情
aliyun ehpcinstant GetImage \
--ImageId "img-xxxxxx" \
--region cn-shanghai删除镜像(RemoveImage)
# 删除自定义镜像
aliyun ehpcinstant RemoveImage \
--ImageId "img-xxxxxx" \
--region cn-shanghai3. 资源池管理(Pool Management)
创建资源池(CreatePool)
# 创建基本资源池
aliyun ehpcinstant CreatePool \
--region cn-shanghai \
--PoolName "compute-pool" \
--PoolDescription "Resource pool for compute jobs" \
--PoolSpec '{"InstanceTypes":["ecs.c6.xlarge"],"MaxCapacity":10}'查询资源池列表(ListPools)
# 查询资源池列表
aliyun ehpcinstant ListPools --region cn-shanghai获取资源池详情(GetPool)
# 查询资源池详情
aliyun ehpcinstant GetPool \
--PoolId "pool-xxxxxx" \
--region cn-shanghai更新资源池(UpdatePool)
# 更新资源池配置
aliyun ehpcinstant UpdatePool \
--PoolId "pool-xxxxxx" \
--PoolSpec '{"InstanceTypes":["ecs.c6.2xlarge"],"MaxCapacity":20}' \
--region cn-shanghai删除资源池(DeletePool)
# 删除资源池
aliyun ehpcinstant DeletePool \
--PoolId "pool-xxxxxx" \
--region cn-shanghai4. 执行计划管理(Action Plan Management)
创建执行计划(CreateActionPlan)
# 创建执行计划
aliyun ehpcinstant CreateActionPlan \
--region cn-shanghai \
--PlanName "scheduled-plan" \
--PlanDescription "Scheduled execution plan" \
--PlanSpec '{"Schedule":"0 0 * * *","JobTemplate":{...}}'查询执行计划列表(ListActionPlans)
# 查询执行计划列表
aliyun ehpcinstant ListActionPlans --region cn-shanghai获取执行计划详情(GetActionPlan)
# 查询执行计划详情
aliyun ehpcinstant GetActionPlan \
--PlanId "plan-xxxxxx" \
--region cn-shanghai查询执行计划活动(ListActionPlanActivities)
# 查询执行计划活动状态
aliyun ehpcinstant ListActionPlanActivities \
--PlanId "plan-xxxxxx" \
--region cn-shanghai更新执行计划(UpdateActionPlan)
# 更新执行计划
aliyun ehpcinstant UpdateActionPlan \
--PlanId "plan-xxxxxx" \
--PlanSpec '{"Schedule":"0 1 * * *","JobTemplate":{...}}' \
--region cn-shanghai删除执行计划(DeleteActionPlan)
# 删除执行计划
aliyun ehpcinstant DeleteActionPlan \
--PlanId "plan-xxxxxx" \
--region cn-shanghai5. 监控和指标(Monitoring & Metrics)
查询作业监控数据(DescribeJobMetricData)
# 查询作业监控指标
aliyun ehpcinstant DescribeJobMetricData \
--JobId "job-xxxxxx" \
--ArrayIndex 0 \
--MetricName "CPUUtilization" \
--StartTime "2026-04-11T10:00:00Z" \
--EndTime "2026-04-11T11:00:00Z" \
--region cn-shanghai查询作业最新指标(DescribeJobMetricLast)
# 查询作业最新监控指标
aliyun ehpcinstant DescribeJobMetricLast \
--JobId "job-xxxxxx" \
--ArrayIndex 0 \
--region cn-shanghai6. 执行器管理(Executor Management)
查询全局执行器信息(ListExecutors)
# 查询所有执行器
aliyun ehpcinstant ListExecutors --region cn-shanghai查询作业执行器信息(ListJobExecutors)
# 查询特定作业的执行器
aliyun ehpcinstant ListJobExecutors \
--JobId "job-xxxxxx" \
--region cn-shanghai查询执行器事件(ListExecutorEvents)
# 查询执行器运行事件
aliyun ehpcinstant ListExecutorEvents \
--ExecutorIds '["job-xxxxxx-Task0-0"]' \
--region cn-shanghai7. 标签管理(Tag Management)
绑定标签(TagResources)
# 为资源绑定标签
aliyun ehpcinstant TagResources \
--RegionId cn-shanghai \
--ResourceType "Job" \
--ResourceId.1 "job-xxxxxx" \
--Tag.1.Key "Environment" \
--Tag.1.Value "Production" \
--Tag.2.Key "Project" \
--Tag.2.Value "E-HPC"查询标签(ListTagResources)
# 查询资源标签
aliyun ehpcinstant ListTagResources \
--RegionId cn-shanghai \
--ResourceType "Job" \
--ResourceId.1 "job-xxxxxx"解绑标签(UnTagResources)
# 解绑资源标签
aliyun ehpcinstant UnTagResources \
--RegionId cn-shanghai \
--ResourceType "Job" \
--ResourceId.1 "job-xxxxxx" \
--TagKey.1 "Environment"8. 应用管理(Application Management)
同步应用(SynchronizeApp)
# 应用跨区域同步
aliyun ehpcinstant SynchronizeApp \
--RegionId cn-shanghai \
--AppName "my-app" \
--TargetRegion "cn-beijing"获取应用版本(GetAppVersions)
# 获取应用版本列表
aliyun ehpcinstant GetAppVersions \
--RegionId cn-shanghai \
--AppName "my-app"9. 实用脚本示例
作业提交完整流程
#!/bin/bash
# E-HPC Instant 作业提交脚本
REGION="cn-shanghai"
JOB_NAME="e-hpc-job-$(date +%Y%m%d-%H%M%S)"
CONTAINER_IMAGE="registry.cn-shanghai.aliyuncs.com/test/test:v1.0"
COMMAND='["/bin/sh", "-c", "sleep 1000"]'
USER_AGENT="AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill"
# 创建作业
JOB_ID=$(aliyun ehpcinstant CreateJob \
--region $REGION \
--JobName "$JOB_NAME" \
--Tasks "[{\"TaskSpec\":{\"TaskExecutor\":[{\"Container\":{\"Image\":\"$CONTAINER_IMAGE\",\"Command\":$COMMAND}}],\"Resource\":{\"Cores\":4,\"Memory\":8}}},\"ExecutorPolicy\":{\"MaxCount\":1}}]" \
--user-agent $USER_AGENT \
--output cols=JobId rows=1)
echo "Created Job: $JOB_ID"
# 等待作业启动
sleep 10
# 查询作业状态
aliyun ehpcinstant GetJob \
--JobId $JOB_ID \
--region $REGION \
--user-agent $USER_AGENT
# 查询作业日志
aliyun ehpcinstant DescribeJobResults \
--JobId $JOB_ID \
--TaskName "Task0" \
--ArrayIndex 0 \
--region $REGION \
--user-agent $USER_AGENT作业监控脚本
#!/bin/bash
# 作业监控脚本
JOB_ID=$1
REGION=${2:-cn-shanghai}
USER_AGENT="AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill"
while true; do
# 获取作业状态
STATUS=$(aliyun ehpcinstant GetJob \
--JobId $JOB_ID \
--region $REGION \
--user-agent $USER_AGENT \
--output cols=Status rows=1)
echo "Job $JOB_ID status: $STATUS"
if [[ "$STATUS" == "Succeeded" || "$STATUS" == "Failed" ]]; then
break
fi
sleep 30
done
# 获取最终日志
aliyun ehpcinstant DescribeJobResults \
--JobId $JOB_ID \
--TaskName "Task0" \
--ArrayIndex 0 \
--region $REGION \
--user-agent $USER_AGENT批量作业管理
# 批量查询运行中的作业
aliyun ehpcinstant ListJobs \
--Filter '{"Status":"Running"}' \
--region cn-shanghai \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill \
--output cols=JobId,JobName,Status,CreateTime
# 批量删除已完成的作业
COMPLETED_JOBS=$(aliyun ehpcinstant ListJobs \
--Filter '{"Status":"Succeeded"}' \
--region cn-shanghai \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill \
--output cols=JobId | tail -n +2)
if [ -n "$COMPLETED_JOBS" ]; then
JOB_ARRAY=""
for job in $COMPLETED_JOBS; do
if [ -z "$JOB_ARRAY" ]; then
JOB_ARRAY="{\"JobId\":\"$job\"}"
else
JOB_ARRAY="$JOB_ARRAY,{\"JobId\":\"$job\"}"
fi
done
aliyun ehpcinstant DeleteJobs \
--JobSpec "[$JOB_ARRAY]" \
--region cn-shanghai \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill
fi10. 故障排查
常见错误及解决方案
| 错误 | 解决方案 |
|---|---|
| InvalidCommand | 确保Command参数使用正确的JSON数组格式 |
| ImageNotFound | 确认镜像ID正确且在相同区域 |
| QuotaExceeded | 联系阿里云增加配额 |
| NetworkError | 检查VSwitch ID和安全组配置 |
| AuthenticationFailed | 检查AccessKey配置 |
调试技巧
# 查看详细错误信息
aliyun ehpcinstant CreateJob --debug ...
# 验证JSON格式
echo '{"TaskSpec":{...}}' | python -m json.tool11. 最佳实践
1. 作业命名规范:
- 包含用途、环境、时间戳信息
- 示例:
prod-training-20260411-1000
2. 资源配置优化:
- 根据应用需求选择合适的实例规格
- 使用InstanceTypes优先于Cores/Memory配置
3. 错误处理:
- 检查作业状态后再进行后续操作
- 实现重试机制处理临时性错误
4. 成本控制:
- 及时删除已完成的作业
- 使用适当的资源规格避免浪费
5. 安全性:
- 使用私有镜像仓库
- 配置适当的网络访问控制
12. 参考文档
E-HPC Instant Image镜像管理
通过阿里云CLI(优先)或SDK工具,实现对E-HPC Instant计算平台镜像资源的管理。主要操作包括添加镜像、查询镜像列表、获取镜像详情、移除镜像等,支持VM虚拟机及Container容器镜像类型。
添加镜像
VM虚拟机镜像
aliyun ehpcinstant AddImage \
--region cn-shanghai \
--Name 'Custom-VM-Image' \
--ImageVersion '1.0' \
--Description 'Custom VM image for E-HPC Instant' \
--ImageType 'VM' \
--VMImageSpec '{"ImageId":"m-xxxx"}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skillContainer容器镜像
aliyun ehpcinstant AddImage \
--region cn-shanghai \
--Name 'Custom-Container-Image' \
--ImageVersion '1.0' \
--Description 'Custom container image for E-HPC Instant' \
--ImageType 'Container' \
--ContainerImageSpec '{"RegistryUrl":"registry.cn-shanghai.aliyuncs.com/namespace/image:tag"}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill查询镜像列表
aliyun ehpcinstant ListImages --region cn-shanghai \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill获取镜像详情
aliyun ehpcinstant GetImage --region cn-shanghai --ImageId 'm-xxxx' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill移除镜像
aliyun ehpcinstant RemoveImage --region cn-shanghai --ImageId 'm-xxxx' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill
**注意:** 移除镜像操作前,必须与用户确认后方可执行。E-HPC Instant 作业命令配置
容器作业命令配置
容器作业通过Command参数指定要执行的命令:
单命令执行
"Container": {
"Image": "registry.cn-shanghai.aliyuncs.com/registry/image:tag",
"Command": "python /app/main.py"
}多参数命令
"Container": {
"Image": "registry.cn-shanghai.aliyuncs.com/registry/image:tag",
"Command": "bash -c 'echo hello && sleep 100'"
}带参数的命令数组
对于复杂命令,可以使用数组格式:
"Container": {
"Image": "registry.cn-shanghai.aliyuncs.com/registry/image:tag",
"Command": ["python", "/app/main.py", "--param1", "value1", "--param2", "value2"]
}VM作业脚本配置
VM作业通过Script参数指定初始化脚本(Base64编码):
脚本编码示例
# 原始脚本
echo '#!/bin/bash
echo "Starting job..."
python /app/main.py
' | base64 -w 0
# 在API中使用
"VM": {
"Image": "m-xxxx",
"Script": "IyEvYmluL2Jhc2gKZWNobyAiU3RhcnRpbmcgam9iLi4uIgpweXRob24gL2FwcC9tYWluLnB5Cg=="
}命令配置最佳实践
- 容器作业:使用绝对路径指定可执行文件
- 环境变量:在命令中直接设置或通过镜像预配置
- 工作目录:确保命令路径与镜像内路径一致
- 退出码:作业成功要求命令正常退出(exit code 0)
常见命令示例
数据处理作业
python /app/process_data.py --input /data/input.csv --output /data/output.csv机器学习训练
python /app/train.py --epochs 100 --batch-size 32 --learning-rate 0.001长期运行服务
sleep 1000 # 或其他长期运行命令注意事项
- 命令必须在镜像环境中可执行
- 避免使用交互式命令(如需要用户输入)
- 对于长时间运行的作业,确保命令不会意外退出[
E-HPC Instant作业技能所需的 RAM 权限策略
E-HPC Instant作业技能所需的 RAM 权限说明。
权限列表
| 权限 | 操作类型 | 描述 |
|---|---|---|
ehpc:AddImage | 写入 | 添加自定义镜像 |
ehpc:CreateJob | 写入 | 创建作业 |
ehpc:CreateImageByExecutor | 写入 | 通过执行器创建镜像 |
ehpc:DeleteJobs | 写入 | 删除作业 |
ehpc:DeleteJobRecords | 写入 | 删除作业记录 |
ehpc:DescribeJobMetricData | 查询 | 查询作业监控数据 |
ehpc:DescribeJobMetricLast | 查询 | 查询作业最新监控指标 |
ehpc:DescribeJobResults | 查询 | 查询作业结果 |
ehpc:GetAppVersions | 查询 | 获取应用版本信息 |
ehpc:GetImage | 查询 | 获取镜像详情 |
ehpc:GetJob | 查询 | 获取作业详情 |
ehpc:GetLoginUrlForExecutor | 查询 | 获取执行器登录 URL |
ehpc:GetGlobalResourceLast | 查询 | 获取全局资源最新状态 |
ehpc:GetGlobalResourceStatistic | 查询 | 获取全局资源统计信息 |
ehpc:ListImages | 查询 | 列出镜像 |
ehpc:ListJobExecutors | 查询 | 列出作业执行器 |
ehpc:ListJobs | 查询 | 列出作业 |
ehpc:RemoveImage | 写入 | 移除镜像 |
ehpc:SynchronizeApp | 写入 | 同步应用 |
ehpc:ListRegions | 查询 | 列出可用地域 |
ehpc:ListAvailableFileSystems | 查询 | 列出可用文件系统 |
ecs:DescribeImages | 查询 | 查询 ECS 镜像列表 |
ecs:DescribeSecurityGroups | 查询 | 查询安全组列表 |
vpc:DescribeVpcs | 查询 | 查询 VPC 列表 |
vpc:DescribeVSwitches | 查询 | 查询交换机列表 |
vpc:DescribeEipAddresses | 查询 | 查询弹性公网 IP 列表 |
tag:ListTagKeys | 查询 | 列出标签键 |
tag:ListTagValues | 查询 | 列出标签值 |
cms:QueryMetricList | 查询 | 查询云监控指标数据 |
oss:ListBuckets | 查询 | 列出 OSS 存储桶 |
ram:GetRole | 查询 | 获取 RAM 角色信息 |
最小权限策略
当您仅需要即时作业功能时,使用此策略:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ehpc:AddImage",
"ehpc:CreateJob",
"ehpc:CreateImageByExecutor",
"ehpc:DeleteJobs",
"ehpc:DeleteJobRecords",
"ehpc:DescribeJobMetricData",
"ehpc:DescribeJobMetricLast",
"ehpc:DescribeJobResults",
"ehpc:GetAppVersions",
"ehpc:GetImage",
"ehpc:GetJob",
"ehpc:GetLoginUrlForExecutor",
"ehpc:GetGlobalResourceLast",
"ehpc:GetGlobalResourceStatistic",
"ehpc:ListImages",
"ehpc:ListJobExecutors",
"ehpc:ListJobs",
"ehpc:RemoveImage",
"ehpc:SynchronizeApp",
"ehpc:ListRegions",
"ehpc:ListAvailableFileSystems"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ecs:DescribeImages",
"ecs:DescribeSecurityGroups",
"vpc:DescribeVpcs",
"vpc:DescribeVSwitches",
"vpc:DescribeEipAddresses"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"tag:ListTagKeys",
"tag:ListTagValues"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "cms:QueryMetricList",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "oss:ListBuckets",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ram:GetRole",
"Resource": "*"
}
]
}完整权限策略(推荐)
推荐在生产环境中使用,包含额外的查询和监控权限:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ehpc:AddImage",
"ehpc:CreateJob",
"ehpc:CreateImageByExecutor",
"ehpc:DeleteJobs",
"ehpc:DeleteJobRecords",
"ehpc:DescribeJobMetricData",
"ehpc:DescribeJobMetricLast",
"ehpc:DescribeJobResults",
"ehpc:GetAppVersions",
"ehpc:GetImage",
"ehpc:GetJob",
"ehpc:GetLoginUrlForExecutor",
"ehpc:GetGlobalResourceLast",
"ehpc:GetGlobalResourceStatistic",
"ehpc:ListImages",
"ehpc:ListJobExecutors",
"ehpc:ListJobs",
"ehpc:RemoveImage",
"ehpc:SynchronizeApp",
"ehpc:ListRegions",
"ehpc:ListAvailableFileSystems"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ecs:DescribeImages",
"ecs:DescribeSecurityGroups",
"vpc:DescribeVpcs",
"vpc:DescribeVSwitches",
"vpc:DescribeEipAddresses"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"tag:ListTagKeys",
"tag:ListTagValues"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "cms:QueryMetricList",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "oss:ListBuckets",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ram:GetRole",
"Resource": "*"
}
]
}注意:ehpc:DescribeJobMetricData和ehpc:DescribeJobMetricLast用于查询作业运行时的监控数据,有助于跟踪作业执行进度和资源使用情况。ehpc:GetGlobalResourceLast和ehpc:GetGlobalResourceStatistic用于查看全局资源的使用状态和统计信息。ecs:DescribeImages和ecs:DescribeSecurityGroups用于创建作业时选择镜像和安全组。vpc:DescribeVpcs、vpc:DescribeVSwitches和vpc:DescribeEipAddresses用于配置作业的网络环境。cms:QueryMetricList用于查询云监控指标数据。oss:ListBuckets用于列出可用的 OSS 存储桶。ram:GetRole用于获取服务关联角色信息。
权限验证命令
附加策略后,验证权限是否正确:
# 验证 E-HPC 作业列表查询权限
aliyun ehpcinstant ListJobs \
--region-id cn-hangzhou \
--PageSize 10 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill
# 验证 E-HPC 镜像列表查询权限
aliyun ehpcinstant ListImages \
--region-id cn-hangzhou \
--PageSize 10 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill如果所有命令均成功返回数据,则说明权限已正确配置。
常见权限错误与排查
错误:Forbidden.RAM / NoPermission
原因: RAM 用户没有所需的权限。
解决方案: 1. 登录 RAM 控制台 2. 找到目标 RAM 用户 3. 点击"添加权限" 4. 选择"自定义策略"并粘贴上述最小权限策略 JSON 5. 或选择系统策略:AliyunEHPCFullAccess + AliyunECSReadOnlyAccess + AliyunVPCReadOnlyAccess(更宽泛的权限)
错误:ehpc:CreateJob 上的 Forbidden
原因: 缺少 E-HPC 作业创建权限。
解决方案: 确保策略中包含 ehpc:CreateJob 操作。
错误:ehpc:ListJobs 上的 Forbidden
原因: 缺少 E-HPC 作业查询权限。
解决方案: 确保策略中包含 ehpc:ListJobs 和 ehpc:GetJob 操作。作业管理流程需要这些权限来查询和获取作业状态。
错误:InvalidAccount.NotFound
原因: AccessKey 不正确或账号不存在。
解决方案:
- 检查 AccessKey ID 是否正确
- 在 RAM 控制台中验证 AccessKey 是否处于启用状态
- 在当前会话外使用
aliyun configure交互式配置或通过环境变量重新配置凭据
使用预定义系统策略
如果自定义策略不方便,可以直接附加以下系统策略:
| 系统策略 | 描述 |
|---|---|
AliyunEHPCFullAccess | E-HPC 完整权限(包括 CreateJob、ListJobs、ListImages 等) |
AliyunECSReadOnlyAccess | ECS 只读权限(包括 DescribeImages、DescribeSecurityGroups 等) |
AliyunVPCReadOnlyAccess | VPC 只读权限(包括 DescribeVpcs、DescribeVSwitches 等) |
附加方法:
# 通过 RAM 控制台或 CLI 附加
aliyun ram attach-policy-to-user \
--policy-type System \
--policy-name AliyunEHPCFullAccess \
--user-name <你的RAM用户名> \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill安全建议: 在生产环境中,建议使用自定义最小权限策略而非完整访问的系统策略,以遵循最小权限原则。
E-HPC Instant 计算资源配置
资源配置选项
E-HPC Instant支持两种资源配置方式: 1. 按规格配置:指定实例规格(InstanceType) 2. 按资源配置:指定CPU核数和内存大小
实例规格配置(推荐)
# 使用实例规格(高优先级)
"Resource": {
"InstanceTypes": ["ecs.c6.xlarge"],
"Disks": [{"Type":"System","Size":50}]
}CPU/内存配置
# 指定CPU核数和内存(GB)
"Resource": {
"Cores": 4,
"Memory": 8,
"Disks": [{"Type":"System","Size":40}]
}常用实例规格参考
| 规格类型 | CPU核数 | 内存(GB) | 适用场景 |
|---|---|---|---|
| ecs.c7.large | 2 | 4 | 轻量计算 |
| ecs.c7.xlarge | 4 | 8 | 通用计算 |
| ecs.c7.2xlarge | 8 | 16 | 中等计算 |
| ecs.gn7i-c8g1.2xlarge | 8 | 30 | GPU计算 |
| ecs.r7.xlarge | 4 | 32 | 内存密集 |
磁盘配置
- 系统盘:必需,最小40GB(容器)/40GB(VM)
- 数据盘:可选,格式:
{"Type":"Data","Size":100}
完整资源配置示例
容器作业
"Resource": {
"Cores": 4,
"Memory": 8,
"InstanceTypes": ["ecs.c6.xlarge"],
"Disks": [{"Type":"System","Size":40}]
}VM作业
"Resource": {
"Cores": 4,
"Memory": 8,
"InstanceTypes": ["ecs.c6.xlarge"],
"Disks": [
{"Type":"System","Size":50},
{"Type":"Data","Size":100}
]
}注意事项
- InstanceType配置优先级高于Cores/Memory配置
- 确保所选规格在目标区域可用
- GPU实例需要特殊镜像支持
阿里云文件存储NAS管理手册(CLI版本)
概述
阿里云文件存储NAS(Network Attached Storage)提供共享文件存储服务,支持 NFS 和 SMB 协议。本手册介绍使用阿里云 CLI 进行 NAS 文件系统的增删改查操作。
前置条件
1. 安装阿里云CLI:确保已安装并配置阿里云 CLI 2. 权限配置:AccessKey 需要具备 NAS 相关权限 3. 区域选择:确认操作的区域(如 cn-shanghai) 4. User-Agent标识:所有命令均应附加 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill 参数,用于服务端识别调用来源。如已通过 aliyun configure ai-mode set-user-agent 配置,则会自动附加,无需手动添加。
1. 创建文件系统(Create)
创建通用型NAS文件系统
# 创建容量型通用NAS(NFS协议)
aliyun nas CreateFileSystem \
--ProtocolType NFS \
--StorageType Capacity \
--Description "E-HPC Instant NAS for compute jobs" \
--RegionId cn-shanghai
# 创建性能型通用NAS(NFS协议)
aliyun nas CreateFileSystem \
--ProtocolType NFS \
--StorageType Performance \
--Description "E-HPC Instant NAS for compute jobs" \
--RegionId cn-shanghai
# 创建容量型通用NAS(SMB协议)
aliyun nas CreateFileSystem \
--ProtocolType SMB \
--StorageType Capacity \
--Description "SMB file system for Windows workloads" \
--RegionId cn-shanghai参数说明
- ProtocolType: 协议类型(NFS/SMB/cpfs)
- StorageType: 存储类型(Performance/Capacity/Premium/standard/advance)
- FileSystemType: 文件系统类型(standard/extreme/cpfs/cpfsse)
- Capacity: 容量(GiB),极速型和CPFS必需
- ZoneId: 可用区ID,极速型和CPFS必需
- EncryptType: 加密类型(0=不加密,1=NAS托管密钥,2=KMS托管密钥)
创建注意事项
- 默认创建规格:因涉及到成本及性价比因素,在用户未指定的情况下默认创建通用容量型NAS文件存储,NFS协议。
- 执行前与用户确认:配置明确后进一步与用户确认,用户同意后执行创建。
2. 查询文件系统(Read/List)
查询所有文件系统
# 查询所有类型的文件系统
aliyun nas DescribeFileSystems --RegionId cn-shanghai
# 分页查询(每页10条,第1页)
aliyun nas DescribeFileSystems \
--PageSize 10 \
--PageNumber 1 \
--RegionId cn-shanghai
# 查询特定类型的文件系统
aliyun nas DescribeFileSystems \
--FileSystemType standard \
--RegionId cn-shanghai
# 查询特定文件系统
aliyun nas DescribeFileSystems \
--FileSystemId 31a8e4xxxx \
--RegionId cn-shanghai查询结果字段说明
- FileSystemId: 文件系统ID
- ProtocolType: 协议类型
- StorageType: 存储类型
- MeteredSize: 已使用容量(Byte)
- CreateTime: 创建时间
- Status: 状态(Active/Creating/Stopping等)
3. 创建挂载点(Mount Target)
为VPC网络创建挂载点
# 为通用NAS创建VPC挂载点
aliyun nas CreateMountTarget \
--FileSystemId 31a8e4xxxx \
--NetworkType Vpc \
--VpcId vpc-xxxx \
--VSwitchId vsw-xxxx \
--AccessGroupName DEFAULT_VPC_GROUP_NAME \
--RegionId cn-shanghai
# 为极速NAS创建挂载点(自动使用默认权限组)
aliyun nas CreateMountTarget \
--FileSystemId extreme-xxxx \
--NetworkType Vpc \
--VpcId vpc-xxxx \
--VSwitchId vsw-xxxx \
--RegionId cn-shanghai查询挂载点
# 查询文件系统的所有挂载点
aliyun nas DescribeMountTargets \
--FileSystemId 31a8e4xxxx \
--RegionId cn-shanghai
# 查询特定挂载点
aliyun nas DescribeMountTargets \
--FileSystemId 31a8e4xxxx \
--MountTargetDomain 31a8e4xxxx.cn-shanghai.nas.aliyuncs.com \
--RegionId cn-shanghai挂载点关键信息
- MountTargetDomain: 挂载地址(用于实际挂载)
- VpcId: 关联的VPC ID
- VSwitchId: 关联的交换机ID
- Status: 挂载点状态(Active/Inactive)
4. 修改文件系统(Update)
修改文件系统描述
aliyun nas ModifyFileSystem \
--FileSystemId 31a8e4xxxx \
--Description "Updated description for E-HPC jobs" \
--RegionId cn-shanghai修改挂载点(仅支持修改描述)
aliyun nas ModifyMountTarget \
--FileSystemId 31a8e4xxxx \
--MountTargetDomain 31a8e4xxxx.cn-shanghai.nas.aliyuncs.com \
--Description "Updated mount target description" \
--RegionId cn-shanghai扩容文件系统(仅极速型和CPFS)
# 扩容极速型NAS
aliyun nas UpgradeFileSystem \
--FileSystemId extreme-xxxx \
--Capacity 1000 \
--RegionId cn-shanghai5. 删除文件系统(Delete)
删除挂载点(必需先删除)
# 注意:NAS CLI没有直接删除挂载点的命令
# 需要通过控制台或等待文件系统删除时自动清理删除文件系统
# 删除通用型NAS文件系统
aliyun nas DeleteFileSystem \
--FileSystemId 31a8e4xxxx \
--RegionId cn-shanghai
# 删除极速型NAS文件系统
aliyun nas DeleteFileSystem \
--FileSystemId extreme-xxxx \
--RegionId cn-shanghai删除注意事项
- 必须先卸载:确保没有客户端正在使用文件系统
- 数据不可恢复:删除后数据无法恢复,请谨慎操作
- 挂载点自动清理:删除文件系统时,关联的挂载点会自动删除
6. E-HPC Instant 作业中的NAS使用
在容器作业中挂载NAS
aliyun ehpcinstant CreateJob \
--region cn-shanghai \
--JobName 'job-with-nas' \
--Tasks '[{
"TaskSpec": {
"TaskExecutor": [{
"Container": {
"Image": "registry.cn-shanghai.aliyuncs.com/registry/image:tag",
"Command": "[\"/bin/sh\", \"-c\", \"echo hello > /mnt/nas/output.txt\"]",
}
}],
"Resource": {
"Cores": 2,
"Memory": 4
},
"VolumeMount": [
{
"MountPath": "/mnt",
"VolumeDriver": "alicloud/nas",
"MountOptions": "{\"server\":\"xxx.cn-shanghai.nas.aliyuncs.com\",\"vers\":\"3\",\"path\":\"/\",\"options\":\"nolock,tcp,noresvport\"}"
}
],
},
"ExecutorPolicy": {"MaxCount": 1}
}]' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skillNAS挂载参数说明
- Server: NAS服务器地址(挂载点域名)
- Path: NAS文件系统中的路径(通常为"/")
- MountPath: 容器内的挂载路径
- ReadOnly: 是否只读挂载(true/false)
7. 常用操作示例
完整创建流程示例
#!/bin/bash
# 1. 创建文件系统
FILESYSTEM_ID=$(aliyun nas CreateFileSystem \
--ProtocolType NFS \
--StorageType Performance \
--Description "E-HPC NAS" \
--RegionId cn-shanghai \
--output cols=FileSystemId rows=1)
echo "Created FileSystem: $FILESYSTEM_ID"
# 2. 等待文件系统激活(实际使用中需要检查状态)
sleep 60
# 3. 创建挂载点
aliyun nas CreateMountTarget \
--FileSystemId $FILESYSTEM_ID \
--NetworkType Vpc \
--VpcId your-vpc-id \
--VSwitchId your-vswitch-id \
--RegionId cn-shanghai
# 4. 获取挂载地址
MOUNT_DOMAIN=$(aliyun nas DescribeMountTargets \
--FileSystemId $FILESYSTEM_ID \
--RegionId cn-shanghai \
--output cols=MountTargetDomain rows=1)
echo "Mount Domain: $MOUNT_DOMAIN"查询和监控脚本
# 查询文件系统使用情况
aliyun nas DescribeFileSystems \
--FileSystemId 31a8e4xxxx \
--RegionId cn-shanghai \
--output cols=FileSystemId,MeteredSize,TotalSize
# 列出所有活跃的文件系统
aliyun nas DescribeFileSystems \
--RegionId cn-shanghai \
--output cols=FileSystemId,ProtocolType,StorageType,Status,CreateTime8. 故障排查
常见问题及解决方案
| 问题 | 解决方案 |
|---|---|
| 创建失败:配额不足 | 联系阿里云增加NAS配额 |
| 挂载失败:网络不通 | 检查VPC、VSwitch、安全组配置 |
| 权限拒绝 | 检查权限组(Access Group)规则 |
| 性能不佳 | 选择合适的存储类型和规格 |
| 跨区域访问 | 确保ECS实例和NAS在同一区域 |
权限组配置
通用型NAS需要配置权限组来控制访问权限:
# 创建权限组
aliyun nas CreateAccessGroup \
--AccessGroupName e-hpc-access-group \
--NetworkType Vpc \
--RegionId cn-shanghai
# 添加访问规则
aliyun nas CreateAccessRule \
--AccessGroupName e-hpc-access-group \
--SourceCidrIp 192.168.0.0/16 \
--RWAccessMode RW \
--UserAccessType no_squash \
--Priority 1 \
--RegionId cn-shanghai9. 最佳实践
1. 区域一致性:NAS文件系统与E-HPC Instant作业在同一区域 2. 可用区优化:极速型NAS选择与计算资源相同的可用区 3. 存储类型选择:
- 通用计算:通用型NAS(性能型)
- 高性能计算:极速型NAS
- 大规模并行:CPFS
4. 安全配置:启用加密保护敏感数据 5. 监控告警:设置容量和性能监控
10. 参考文档
阿里云网络vSwitch管理手册(CLI版本)
概述
虚拟交换机(vSwitch)是阿里云专有网络VPC中的基础网络组件,用于连接云资源(如ECS实例、容器等)。本手册介绍使用阿里云 CLI 进行 vSwitch 的增删改查操作。
前置条件
1. 安装阿里云CLI:确保已安装并配置阿里云 CLI 2. 权限配置:AccessKey 需要具备 VPC 相关权限 3. 区域选择:确认操作的区域(如 cn-shanghai) 4. VPC准备:vSwitch 必须关联到现有的 VPC 5. User-Agent标识:所有命令均应附加 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill 参数,用于服务端识别调用来源。如已通过 aliyun configure ai-mode set-user-agent 配置,则会自动附加,无需手动添加。
1. 创建vSwitch(Create)
基本创建命令
# 创建基本vSwitch
aliyun vpc CreateVSwitch \
--VpcId vpc-xxxxxx \
--ZoneId cn-shanghai-a \
--CidrBlock 192.168.1.0/24 \
--VSwitchName "e-hpc-compute-vswitch" \
--Description "VSwitch for E-HPC Instant compute jobs" \
--RegionId cn-shanghai高级创建选项
# 创建支持IPv6的vSwitch
aliyun vpc CreateVSwitch \
--VpcId vpc-xxxxxx \
--ZoneId cn-shanghai-b \
--CidrBlock 192.168.2.0/24 \
--Ipv6CidrBlock 255 \
--VSwitchName "ipv6-enabled-vswitch" \
--Description "IPv6 enabled vSwitch for high-performance computing" \
--RegionId cn-shanghai
# 带标签的vSwitch创建
aliyun vpc CreateVSwitch \
--VpcId vpc-xxxxxx \
--ZoneId cn-shanghai-c \
--CidrBlock 192.168.3.0/24 \
--VSwitchName "tagged-vswitch" \
--Tag.1.Key Environment \
--Tag.1.Value Production \
--Tag.2.Key Project \
--Tag.2.Value E-HPC \
--RegionId cn-shanghai参数说明
- VpcId: 关联的VPC ID(必需)
- ZoneId: 可用区ID(必需),可通过
aliyun ecs DescribeZones查询 - CidrBlock: vSwitch网段(必需),必须在VPC网段范围内,子网掩码16-29位
- VSwitchName: vSwitch名称(可选),1-128字符
- Description: 描述信息(可选),1-256字符
- Ipv6CidrBlock: IPv6网段最后8位(0-255),仅当VPC启用IPv6时可用
- RegionId: 区域ID(可选),默认使用配置的区域
CIDR规划建议
- E-HPC场景:建议使用 /24 或 /25 网段(256或128个IP)
- 避免冲突:确保不与VPC路由表中的目标网段冲突
- 预留空间:为未来扩展预留IP地址空间
2. 查询vSwitch(Read/List)
查询所有vSwitch
# 查询指定区域的所有vSwitch
aliyun vpc DescribeVSwitches --RegionId cn-shanghai
# 分页查询(每页20条,第1页)
aliyun vpc DescribeVSwitches \
--PageSize 20 \
--PageNumber 1 \
--RegionId cn-shanghai条件查询
# 查询指定VPC下的vSwitch
aliyun vpc DescribeVSwitches \
--VpcId vpc-xxxxxx \
--RegionId cn-shanghai
# 查询指定可用区的vSwitch
aliyun vpc DescribeVSwitches \
--ZoneId cn-shanghai-a \
--RegionId cn-shanghai
# 查询特定名称的vSwitch
aliyun vpc DescribeVSwitches \
--VSwitchName "e-hpc-compute-vswitch" \
--RegionId cn-shanghai
# 查询特定vSwitch详情
aliyun vpc DescribeVSwitches \
--VSwitchId vsw-xxxxxx \
--RegionId cn-shanghai查询结果字段说明
- VSwitchId: vSwitch ID(如 vsw-uf6wc3sfmxo6rsubsozcd)
- VpcId: 关联的VPC ID
- ZoneId: 所在可用区
- CidrBlock: 网段CIDR
- Status: 状态(Available/Deleting等)
- AvailableIpAddressCount: 可用IP数量
- CreationTime: 创建时间
3. 修改vSwitch(Update)
修改基本信息
# 修改vSwitch名称和描述
aliyun vpc ModifyVSwitchAttribute \
--VSwitchId vsw-xxxxxx \
--VSwitchName "updated-e-hpc-vswitch" \
--Description "Updated description for E-HPC jobs" \
--RegionId cn-shanghai启用IPv6功能
# 为vSwitch启用IPv6(需要VPC已启用IPv6)
aliyun vpc ModifyVSwitchAttribute \
--VSwitchId vsw-xxxxxx \
--EnableIPv6 true \
--Ipv6CidrBlock 200 \
--RegionId cn-shanghai参数说明
- VSwitchId: 要修改的vSwitch ID(必需)
- VSwitchName: 新名称(可选)
- Description: 新描述(可选)
- EnableIPv6: 是否启用IPv6(true/false)
- Ipv6CidrBlock: IPv6网段最后8位(仅当启用IPv6时需要)
4. 删除vSwitch(Delete)
删除vSwitch
# 删除vSwitch(确保没有关联资源)
aliyun vpc DeleteVSwitch \
--VSwitchId vsw-xxxxxx \
--RegionId cn-shanghai删除前检查(Dry Run)
# 执行删除前的预检查
aliyun vpc DeleteVSwitch \
--VSwitchId vsw-xxxxxx \
--DryRun true \
--RegionId cn-shanghai删除注意事项
- 资源清理:确保vSwitch上没有运行的ECS实例、ENI等资源
- E-HPC依赖:如果vSwitch被E-HPC Instant作业使用,需先删除相关作业
- 不可恢复:删除后无法恢复,请谨慎操作
- 异步操作:删除操作可能需要几分钟完成
5. VPC管理基础(vSwitch依赖)
查询VPC列表
# 查询区域内的VPC
aliyun vpc DescribeVpcs --RegionId cn-shanghai
# 查询特定VPC
aliyun vpc DescribeVpcs \
--VpcId vpc-xxxxxx \
--RegionId cn-shanghai创建VPC(如果需要)
# 创建基本VPC
aliyun vpc CreateVpc \
--CidrBlock 192.168.0.0/16 \
--VpcName "e-hpc-vpc" \
--Description "VPC for E-HPC Instant" \
--RegionId cn-shanghai6. E-HPC Instant 作业中的vSwitch使用
在作业中指定vSwitch
# 容器作业指定vSwitch
aliyun ehpcinstant CreateJob \
--region cn-shanghai \
--JobName 'job-with-specific-vswitch' \
--DeploymentPolicy '{"Network":{"Vswitch":["vsw-xxxxxx"]},"AllocationSpec":"Standard"}' \
--Tasks '[{
"TaskSpec": {
"TaskExecutor": [{
"Container": {
"Image": "registry.cn-shanghai.aliyuncs.com/registry/image:tag",
"Command": "[\"/bin/sh\", \"-c\", \"echo hello\"]"
}
}],
"Resource": {
"Cores": 2,
"Memory": 4
}
},
"ExecutorPolicy": {"MaxCount": 1}
}]' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill多vSwitch高可用配置
# 指定多个vSwitch实现高可用
aliyun ehpcinstant CreateJob \
--region cn-shanghai \
--DeploymentPolicy '{"Network":{"Vswitch":["vsw-xxxxxx","vsw-yyyyyy"]},"AllocationSpec":"Standard"}' \
--Tasks '[{...}]' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill7. 常用操作示例
完整vSwitch创建流程
#!/bin/bash
# 1. 查询可用区
ZONE_ID=$(aliyun ecs DescribeZones \
--RegionId cn-shanghai \
--output cols=ZoneId rows=1)
echo "Selected Zone: $ZONE_ID"
# 2. 查询VPC(假设已有VPC)
VPC_ID=$(aliyun vpc DescribeVpcs \
--RegionId cn-shanghai \
--output cols=VpcId rows=1)
echo "Using VPC: $VPC_ID"
# 3. 创建vSwitch
VSWITCH_ID=$(aliyun vpc CreateVSwitch \
--VpcId $VPC_ID \
--ZoneId $ZONE_ID \
--CidrBlock 192.168.10.0/24 \
--VSwitchName "auto-created-vswitch" \
--Description "Auto created for E-HPC" \
--RegionId cn-shanghai \
--output cols=VSwitchId rows=1)
echo "Created vSwitch: $VSWITCH_ID"
# 4. 验证创建结果
aliyun vpc DescribeVSwitches \
--VSwitchId $VSWITCH_ID \
--RegionId cn-shanghaivSwitch监控脚本
# 检查vSwitch可用IP数量
aliyun vpc DescribeVSwitches \
--VSwitchId vsw-xxxxxx \
--RegionId cn-shanghai \
--output cols=VSwitchId,AvailableIpAddressCount,CidrBlock
# 列出所有活跃的vSwitch
aliyun vpc DescribeVSwitches \
--RegionId cn-shanghai \
--output cols=VSwitchId,VSwitchName,ZoneId,CidrBlock,AvailableIpAddressCount批量操作示例
# 批量查询多个vSwitch
VSWITCH_IDS="vsw-xxxxxx,vsw-yyyyyy,vsw-zzzzzz"
aliyun vpc DescribeVSwitches \
--VSwitchId $VSWITCH_IDS \
--RegionId cn-shanghai8. 故障排查
常见问题及解决方案
| 问题 | 解决方案 |
|---|---|
| CIDR冲突 | 确保vSwitch CIDR在VPC范围内且不与路由冲突 |
| 可用区不支持 | 使用 DescribeZones 查询支持的可用区 |
| 配额不足 | 联系阿里云增加vSwitch配额 |
| 删除失败 | 检查是否有资源仍在使用该vSwitch |
| 网络不通 | 检查安全组、路由表和ACL配置 |
网络连通性检查
# 检查vSwitch状态
aliyun vpc DescribeVSwitches \
--VSwitchId vsw-xxxxxx \
--RegionId cn-shanghai
# 检查关联的路由表
aliyun vpc DescribeRouteTables \
--VpcId vpc-xxxxxx \
--RegionId cn-shanghai
# 检查安全组规则
aliyun ecs DescribeSecurityGroupAttribute \
--SecurityGroupId sg-xxxxxx \
--RegionId cn-shanghai9. 最佳实践
1. 可用区选择:
- 选择与计算资源相同的可用区减少延迟
- 多可用区部署提高可用性
2. CIDR规划:
- 使用连续的网段便于管理
- 为不同用途的vSwitch分配不同网段
- 预留足够的IP地址空间
3. 命名规范:
- 包含用途、环境、区域信息
- 示例:
prod-cn-shanghai-a-e-hpc-compute
4. 标签管理:
- 使用标签进行资源分类和成本分摊
- 标签示例:Environment=Production, Project=E-HPC, Owner=TeamA
5. 安全配置:
- 配置适当的网络安全组规则
- 使用网络ACL进行额外的安全控制
- 定期审查网络配置
10. 参考文档
#!/bin/bash
# ====================================================================
# E-HPC Instant CLI - 通用输入校验库
# ====================================================================
# 目的:
# 防止环境变量/参数中的恶意字符(双引号、反斜杠、控制字符等)
# 被直接拼接进 JSON 字符串后引发 JSON/命令注入。
#
# 用法:
# 在脚本中执行: source "$(dirname "$0")/_lib_validate.sh"
# 然后调用各 validate_* 函数对输入参数进行校验。
#
# 校验失败行为:
# 打印中文错误提示后以非 0 状态退出(exit 1)。
# ====================================================================
# 颜色码(若调用方未定义则提供默认值,避免未绑定变量错误)
: "${RED:=\033[0;31m}"
: "${YELLOW:=\033[1;33m}"
: "${NC:=\033[0m}"
# ---- 内部辅助 ----
# _validate_fail <错误信息> [<提示信息>]
_validate_fail() {
echo -e "${RED}❌ 错误: $1${NC}" >&2
if [ -n "${2:-}" ]; then
echo -e "${YELLOW}$2${NC}" >&2
fi
exit 1
}
# 通用:按正则校验
# validate_pattern <字段名> <值> <bash正则> <格式提示>
validate_pattern() {
local name="$1" value="$2" regex="$3" hint="$4"
if [[ -z "$value" ]]; then
_validate_fail "$name 不能为空" "格式: $hint"
fi
if [[ ! "$value" =~ $regex ]]; then
_validate_fail "$name 格式无效: '$value'" "正确格式: $hint"
fi
}
# ---- 资源 ID 校验(严格白名单字符)----
validate_job_id() {
validate_pattern "JobId" "$1" '^job-[a-zA-Z0-9]+$' "job- 后跟字母数字"
}
validate_job_name() {
# 阿里云作业名约束:1-64 位,字母/数字/下划线/连字符,必须以字母或数字开头
validate_pattern "JobName" "$1" '^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$' "1-64 位字母/数字/下划线/连字符"
}
validate_image_id() {
validate_pattern "ImageId" "$1" '^m-[a-zA-Z0-9]+$' "m- 后跟字母数字"
}
validate_vswitch_id() {
validate_pattern "VSwitchId" "$1" '^vsw-[a-zA-Z0-9]+$' "vsw- 后跟字母数字"
}
validate_security_group_id() {
validate_pattern "SecurityGroupId" "$1" '^sg-[a-zA-Z0-9]+$' "sg- 后跟字母数字"
}
validate_region() {
validate_pattern "Region" "$1" '^[a-z][a-z0-9-]*[a-z0-9]$' "小写字母/数字/连字符,如 cn-shanghai"
}
# ---- 域名/主机名(NAS Server 等)----
validate_hostname() {
# 长度 1-253,仅含字母数字、点、连字符;不允许以连字符开头/结尾
local name="$1" value="$2"
if [[ -z "$value" ]]; then
_validate_fail "$name 不能为空"
fi
if [[ ${#value} -gt 253 ]]; then
_validate_fail "$name 长度超过 253"
fi
if [[ ! "$value" =~ ^[a-zA-Z0-9]([a-zA-Z0-9.-]*[a-zA-Z0-9])?$ ]]; then
_validate_fail "$name 格式无效: '$value'" "合法的主机名/域名(字母数字、点、连字符)"
fi
}
# ---- 容器镜像引用 ----
# 仅允许 registry/repo[:tag][@digest] 中常见字符;拒绝空格、引号、反斜杠等
validate_container_image() {
local value="$1"
if [[ -z "$value" ]]; then
_validate_fail "ContainerImage 不能为空"
fi
if [[ ${#value} -gt 512 ]]; then
_validate_fail "ContainerImage 长度超过 512"
fi
if [[ ! "$value" =~ ^[a-zA-Z0-9][a-zA-Z0-9._:/@-]*$ ]]; then
_validate_fail "ContainerImage 包含非法字符: '$value'" "仅允许 字母数字 . _ : / @ -"
fi
}
# ---- 自由文本字段(JOB_DESCRIPTION/VM_PASSWORD 等)----
# 拒绝任何控制字符、双引号、反斜杠,避免破坏 JSON 字符串
# 用法: validate_json_safe_text <字段名> <值> [最大长度,默认 256]
validate_json_safe_text() {
local name="$1" value="$2" maxlen="${3:-256}"
if [[ -z "$value" ]]; then
_validate_fail "$name 不能为空"
fi
if [[ ${#value} -gt $maxlen ]]; then
_validate_fail "$name 长度超过 $maxlen"
fi
if [[ "$value" == *\"* ]]; then
_validate_fail "$name 不允许包含双引号 (\")"
fi
if [[ "$value" == *\\* ]]; then
_validate_fail "$name 不允许包含反斜杠 (\\)"
fi
# 拒绝任何 ASCII 控制字符 (0x00-0x1F, 0x7F)
if [[ "$value" =~ [[:cntrl:]] ]]; then
_validate_fail "$name 包含非法控制字符"
fi
}
# ---- VM 登录密码 ----
# Aliyun ECS 密码规则:8-30 位,字母/数字/常见符号;禁止双引号与反斜杠
validate_vm_password() {
local value="$1"
if [[ -z "$value" ]]; then
_validate_fail "VM_PASSWORD 不能为空" "请先 export VM_PASSWORD=<your-password>"
fi
if [[ ${#value} -lt 8 || ${#value} -gt 30 ]]; then
_validate_fail "VM_PASSWORD 长度必须为 8-30"
fi
if [[ "$value" == *\"* || "$value" == *\\* ]]; then
_validate_fail "VM_PASSWORD 不允许包含 \" 或 \\"
fi
if [[ "$value" =~ [[:cntrl:]] ]]; then
_validate_fail "VM_PASSWORD 包含非法控制字符"
fi
}
#!/bin/bash
# ====================================================================
# E-HPC Instant - 容器作业创建脚本 (CLI模式)
# 映射自: create_container_job.py
# ====================================================================
# 功能: 使用阿里云CLI创建E-HPC Instant容器作业
# 配置: 支持NAS挂载、环境变量、GPU实例等高级配置
# ====================================================================
set -e
# ANSI颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 加载共享输入校验库
source "$(dirname "$0")/_lib_validate.sh"
# 脚本信息
SCRIPT_NAME="create_container_job.sh"
VERSION="1.0"
# 显示帮助信息
show_help() {
cat << EOF
${BLUE}E-HPC Instant 容器作业创建工具 v$VERSION${NC}
${YELLOW}功能说明:${NC}
创建支持NAS挂载、环境变量、GPU实例的容器作业
${YELLOW}环境变量配置:${NC}
ALIBABA_CLOUD_REGION_ID - 地域ID (默认: cn-shanghai)
JOB_NAME - 作业名称 (默认: testX)
JOB_DESCRIPTION - 作业描述 (默认: container job test)
CONTAINER_IMAGE - 容器镜像 (默认: registry-vpc.cn-shanghai.aliyuncs.com/demo/xxx:v1.2)
VSWITCH_ID - 虚拟交换机ID (默认: vsw-xxx)
SECURITY_GROUP_ID - 安全组ID (默认: sg-xxx)
NAS_SERVER - NAS服务器地址 (默认: xxx.cn-shanghai.nas.aliyuncs.com)
${YELLOW}示例:${NC}
# 使用默认配置
./$SCRIPT_NAME
# 自定义配置
JOB_NAME=my-container-job CONTAINER_IMAGE=my-registry/image:tag ./$SCRIPT_NAME
EOF
}
# 参数解析
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
*)
echo "未知参数: $1"
show_help
exit 1
;;
esac
done
echo -e "${BLUE}🚀 E-HPC Instant 容器作业创建工具${NC}"
echo -e "${BLUE}=================================${NC}"
# 验证阿里云CLI
ALIYUN_CLI="aliyun"
if ! command -v "$ALIYUN_CLI" &> /dev/null; then
echo -e "${RED}❌ 错误: 未找到 aliyun CLI${NC}"
echo -e "${YELLOW}请先安装并配置阿里云CLI${NC}"
exit 1
fi
# 获取配置参数
REGION="${ALIBABA_CLOUD_REGION_ID:-cn-shanghai}"
JOB_NAME="${JOB_NAME:-testX-$(date +%Y%m%d-%H%M)}"
JOB_DESCRIPTION="${JOB_DESCRIPTION:-container job test}"
CONTAINER_IMAGE="${CONTAINER_IMAGE:-registry-vpc.cn-shanghai.aliyuncs.com/demo/xxx:v1.2}"
VSWITCH_ID="${VSWITCH_ID:-vsw-xxx}"
SECURITY_GROUP_ID="${SECURITY_GROUP_ID:-sg-xxx}"
NAS_SERVER="${NAS_SERVER:-xxx.cn-shanghai.nas.aliyuncs.com}"
# 输入校验:所有外部输入必须通过白名单校验后才允许拼接进 JSON
validate_region "$REGION"
validate_job_name "$JOB_NAME"
validate_json_safe_text "JOB_DESCRIPTION" "$JOB_DESCRIPTION" 256
validate_container_image "$CONTAINER_IMAGE"
validate_vswitch_id "$VSWITCH_ID"
validate_security_group_id "$SECURITY_GROUP_ID"
validate_hostname "NAS_SERVER" "$NAS_SERVER"
# 构建Tasks JSON (映射自Python SDK)
TASKS_JSON="[{
\"TaskSpec\": {
\"TaskExecutor\": [{
\"Container\": {
\"Image\": \"$CONTAINER_IMAGE\",
\"AppId\": \"ci-ctn-xxx\",
\"Command\": [\"sleep\", \"180000\"],
\"EnvironmentVars\": [
{
\"Name\": \"RUN_PY_PATH\",
\"Value\": \"/mnt/test.py\"
},
{
\"Name\": \"OUTPUT_PATH\",
\"Value\": \"/mnt/output/\"
},
{
\"Name\": \"INPUT_PDB_PATH\",
\"Value\": \"/mnt/input/test.pdb\"
},
{
\"Name\": \"LOG_PATH\",
\"Value\": \"/mnt/logs\"
}
]
}
}],
\"VolumeMount\": [{
\"MountPath\": \"/mnt\",
\"VolumeDriver\": \"alicloud/nas\",
\"MountOptions\": \"{\\\"server\\\":\\\"$NAS_SERVER\\\",\\\"vers\\\":\\\"3\\\",\\\"path\\\":\\\"/\\\",\\\"options\\\":\\\"nolock,tcp,noresvport\\\"}\"
}],
\"Resource\": {
\"Disks\": [{\"Type\": \"System\", \"Size\": 40}],
\"Cores\": 8,
\"Memory\": 32,
\"InstanceTypes\": [\"ecs.gn6v-c8g1.2xlarge\"]
}
},
\"ExecutorPolicy\": {\"MaxCount\": 1},
\"TaskSustainable\": false
}]"
# 构建DeploymentPolicy JSON
DEPLOYMENT_POLICY_JSON="{
\"Network\": {
\"Vswitch\": [\"$VSWITCH_ID\"],
\"EnableExternalIpAddress\": false
},
\"AllocationSpec\": \"Standard\",
\"Level\": \"General\"
}"
# 构建SecurityPolicy JSON
SECURITY_POLICY_JSON="{
\"SecurityGroup\": {
\"SecurityGroupIds\": [\"$SECURITY_GROUP_ID\"]
}
}"
# 显示配置摘要
echo -e "${YELLOW}📋 作业配置摘要:${NC}"
echo -e " ${BLUE}作业名称:${NC} $JOB_NAME"
echo -e " ${BLUE}作业描述:${NC} $JOB_DESCRIPTION"
echo -e " ${BLUE}地域:${NC} $REGION"
echo -e " ${BLUE}容器镜像:${NC} $CONTAINER_IMAGE"
echo -e " ${BLUE}实例规格:${NC} ecs.gn6v-c8g1.2xlarge (V100 GPU, 8核32GB)"
echo -e " ${BLUE}网络配置:${NC} vSwitch=$VSWITCH_ID"
echo -e " ${BLUE}安全组:${NC} $SECURITY_GROUP_ID"
echo -e " ${BLUE}NAS挂载:${NC} $NAS_SERVER"
# 用户确认
echo ""
read -p "$(echo -e "${YELLOW}❓ 确认提交作业? (y/N): ${NC}")" -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}❌ 操作已取消${NC}"
exit 0
fi
# 提交作业
echo -e "${BLUE}📤 正在提交作业...${NC}"
if $ALIYUN_CLI ehpcinstant CreateJob \
--JobName "$JOB_NAME" \
--JobDescription "$JOB_DESCRIPTION" \
--Tasks "$TASKS_JSON" \
--DeploymentPolicy "$DEPLOYMENT_POLICY_JSON" \
--SecurityPolicy "$SECURITY_POLICY_JSON" \
--region "$REGION" \
--connect-timeout 5 \
--read-timeout 10 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill; then
echo -e "${GREEN}✅ 容器作业提交成功!${NC}"
echo -e "${GREEN}💡 后续操作建议:${NC}"
echo -e " • 查看作业状态: ./list_jobs.sh"
echo -e " • 获取详细信息: ./get_job.sh <JobId>"
else
echo -e "${RED}❌ 作业提交失败!${NC}"
exit 1
fi
#!/bin/bash
# ====================================================================
# E-HPC Instant - 批处理VM作业创建脚本 (CLI模式)
# ====================================================================
# 基于SDK脚本: create_vm_job_batch.py
# 功能: 创建批处理虚拟机作业,适用于一次性计算任务
# ====================================================================
set -e
# ANSI颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 加载共享输入校验库
source "$(dirname "$0")/_lib_validate.sh"
# 显示帮助信息
show_help() {
cat << EOF
${BLUE}E-HPC Instant 批处理VM作业创建工具${NC}
${YELLOW}功能说明:${NC}
创建批处理虚拟机作业,适用于一次性计算任务
${YELLOW}环境变量配置:${NC}
JOB_NAME - 作业名称 (默认: create_vm_job)
JOB_DESCRIPTION - 作业描述 (默认: E-HPC Instant VM批处理作业提交)
IMAGE_ID - VM镜像ID (默认: m-xxx)
VSWITCH_ID - 虚拟交换机ID (默认: vsw-xxx)
SECURITY_GROUP_ID - 安全组ID (默认: sg-xxx)
REGION - 地域 (默认: cn-shanghai)
VM_PASSWORD - VM登录密码 (必填,避免明文硬编码)
${YELLOW}使用方式:${NC}
./create_vm_job_batch.sh [选项]
${YELLOW}选项:${NC}
-h, --help 显示此帮助信息
--dry-run 仅显示配置,不实际提交
EOF
}
# 参数解析
DRY_RUN=false
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
--dry-run)
DRY_RUN=true
shift
;;
*)
echo "未知参数: $1"
show_help
exit 1
;;
esac
done
# 验证阿里云CLI
ALIYUN_CLI="aliyun"
if ! command -v "$ALIYUN_CLI" &> /dev/null; then
echo -e "${RED}❌ 错误: 未找到 aliyun CLI${NC}"
echo -e "${YELLOW}请先安装阿里云CLI: https://help.aliyun.com/document_detail/121529.html${NC}"
exit 1
fi
# 获取配置参数
JOB_NAME="${JOB_NAME:-create_vm_job}"
JOB_DESCRIPTION="${JOB_DESCRIPTION:-E-HPC Instant VM批处理作业提交}"
IMAGE_ID="${IMAGE_ID:-m-xxx}"
VSWITCH_ID="${VSWITCH_ID:-vsw-xxx}"
SECURITY_GROUP_ID="${SECURITY_GROUP_ID:-sg-xxx}"
REGION="${REGION:-cn-shanghai}"
# 输入校验:所有外部输入必须通过白名单校验后才允许拼接进 JSON
validate_region "$REGION"
validate_job_name "$JOB_NAME"
validate_json_safe_text "JOB_DESCRIPTION" "$JOB_DESCRIPTION" 256
validate_image_id "$IMAGE_ID"
validate_vswitch_id "$VSWITCH_ID"
validate_security_group_id "$SECURITY_GROUP_ID"
validate_vm_password "$VM_PASSWORD"
# Base64编码的测试脚本
TEST_SCRIPT_BASE64="IyEvYmluL2Jhc2gKCnNsZWVwIDE4MAo="
echo -e "${BLUE}⚡ 创建批处理VM作业${NC}"
echo -e "${BLUE}====================${NC}"
# 显示配置摘要
echo -e "${YELLOW}📋 作业配置:${NC}"
echo -e " ${BLUE}作业名称:${NC} $JOB_NAME"
echo -e " ${BLUE}作业描述:${NC} $JOB_DESCRIPTION"
echo -e " ${BLUE}地域:${NC} $REGION"
echo -e " ${BLUE}VM镜像:${NC} $IMAGE_ID"
echo -e " ${BLUE}实例规格:${NC} ecs.c7.xlarge (4 CPU, 8GB内存)"
echo -e " ${BLUE}vSwitch ID:${NC} $VSWITCH_ID"
echo -e " ${BLUE}安全组 ID:${NC} $SECURITY_GROUP_ID"
echo -e " ${BLUE}作业类型:${NC} 批处理 (TaskSustainable: false)"
if [ "$DRY_RUN" = true ]; then
echo -e "${YELLOW}📝 模拟模式: 仅显示配置,不提交作业${NC}"
echo -e "${GREEN}✅ 配置验证通过!${NC}"
exit 0
fi
# 用户确认
echo ""
read -p "$(echo -e "${YELLOW}❓ 确认提交批处理作业? (y/N): ${NC}")" -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}❌ 操作已取消${NC}"
exit 0
fi
# 构建Tasks JSON
TASKS_JSON="[{
\"TaskSpec\": {
\"TaskExecutor\": [{
\"VM\": {
\"Image\": \"$IMAGE_ID\",
\"Script\": \"$TEST_SCRIPT_BASE64\",
\"Password\": \"$VM_PASSWORD\"
}
}],
\"VolumeMount\": [{
\"MountPath\": \"/mnt\",
\"VolumeDriver\": \"alicloud/nas\",
\"MountOptions\": \"{\\\"server\\\":\\\"xxx.cn-hangzhou.nas.aliyuncs.com\\\",\\\"vers\\\":\\\"3\\\",\\\"path\\\":\\\"/\\\",\\\"options\\\":\\\"nolock,tcp,noresvport\\\"}\"
}],
\"Resource\": {
\"Disks\": [{
\"Type\": \"System\",
\"Size\": 40
}],
\"Cores\": 4,
\"Memory\": 8,
\"InstanceTypes\": [\"ecs.c7.xlarge\"]
}
},
\"ExecutorPolicy\": {
\"MaxCount\": 1
},
\"TaskSustainable\": false
}]"
# 构建DeploymentPolicy JSON
DEPLOYMENT_POLICY_JSON="{
\"Network\": {
\"Vswitch\": [\"$VSWITCH_ID\"],
\"EnableExternalIpAddress\": false
},
\"AllocationSpec\": \"Standard\",
\"Level\": \"General\"
}"
# 构建SecurityPolicy JSON
SECURITY_POLICY_JSON="{
\"SecurityGroup\": {
\"SecurityGroupIds\": [\"$SECURITY_GROUP_ID\"]
}
}"
echo -e "${BLUE}📤 正在提交批处理作业...${NC}"
# 提交作业
if $ALIYUN_CLI ehpcinstant CreateJob \
--JobName "$JOB_NAME" \
--JobDescription "$JOB_DESCRIPTION" \
--Tasks "$TASKS_JSON" \
--DeploymentPolicy "$DEPLOYMENT_POLICY_JSON" \
--SecurityPolicy "$SECURITY_POLICY_JSON" \
--region "$REGION" \
--connect-timeout 5 \
--read-timeout 10 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill; then
echo -e "${GREEN}✅ 批处理VM作业提交成功!${NC}"
echo -e "${GREEN}💡 后续操作:${NC}"
echo -e " • 查看作业状态: ./list_jobs.sh"
echo -e " • 获取详情: ./get_job.sh <JobId>"
else
echo -e "${RED}❌ 批处理作业提交失败!${NC}"
exit 1
fi
#!/bin/bash
# ====================================================================
# E-HPC Instant - 长期运行VM作业创建脚本 (CLI模式)
# ====================================================================
# 基于SDK脚本: create_vm_job_longrunning.py
# 功能: 创建长期运行的虚拟机作业,适用于后台服务场景
# ====================================================================
set -e
# ANSI颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 加载共享输入校验库
source "$(dirname "$0")/_lib_validate.sh"
# 显示帮助信息
show_help() {
cat << EOF
${BLUE}E-HPC Instant 长期运行VM作业创建工具${NC}
${YELLOW}功能说明:${NC}
创建长期运行的虚拟机作业,适用于后台服务、监控等场景
${YELLOW}环境变量配置:${NC}
JOB_NAME - 作业名称 (默认: create_vm_job)
JOB_DESCRIPTION - 作业描述 (默认: E-HPC Instant VM 后台服务作业提交)
IMAGE_ID - VM镜像ID (默认: m-xxx)
VSWITCH_ID - 虚拟交换机ID (默认: vsw-xxx)
SECURITY_GROUP_ID - 安全组ID (默认: sg-xxx)
REGION - 地域 (默认: cn-shanghai)
VM_PASSWORD - VM登录密码 (必填,避免明文硬编码)
${YELLOW}使用方式:${NC}
./create_vm_job_longrunning.sh [选项]
${YELLOW}选项:${NC}
-h, --help 显示此帮助信息
--dry-run 仅显示配置,不实际提交
EOF
}
# 参数解析
DRY_RUN=false
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
--dry-run)
DRY_RUN=true
shift
;;
*)
echo "未知参数: $1"
show_help
exit 1
;;
esac
done
# 验证阿里云CLI
ALIYUN_CLI="aliyun"
if ! command -v "$ALIYUN_CLI" &> /dev/null; then
echo -e "${RED}❌ 错误: 未找到 aliyun CLI${NC}"
echo -e "${YELLOW}请先安装阿里云CLI: https://help.aliyun.com/document_detail/121529.html${NC}"
exit 1
fi
# 获取配置参数
JOB_NAME="${JOB_NAME:-create_vm_job}"
JOB_DESCRIPTION="${JOB_DESCRIPTION:-E-HPC Instant VM 后台服务作业提交}"
IMAGE_ID="${IMAGE_ID:-m-xxx}"
VSWITCH_ID="${VSWITCH_ID:-vsw-xxx}"
SECURITY_GROUP_ID="${SECURITY_GROUP_ID:-sg-xxx}"
REGION="${REGION:-cn-shanghai}"
# 输入校验:所有外部输入必须通过白名单校验后才允许拼接进 JSON
validate_region "$REGION"
validate_job_name "$JOB_NAME"
validate_json_safe_text "JOB_DESCRIPTION" "$JOB_DESCRIPTION" 256
validate_image_id "$IMAGE_ID"
validate_vswitch_id "$VSWITCH_ID"
validate_security_group_id "$SECURITY_GROUP_ID"
validate_vm_password "$VM_PASSWORD"
# Base64编码的测试脚本
TEST_SCRIPT_BASE64="IyEvYmluL2Jhc2gKCnNsZWVwIDE4MAo="
echo -e "${BLUE}🚀 创建长期运行VM作业${NC}"
echo -e "${BLUE}======================${NC}"
# 显示配置摘要
echo -e "${YELLOW}📋 作业配置:${NC}"
echo -e " ${BLUE}作业名称:${NC} $JOB_NAME"
echo -e " ${BLUE}作业描述:${NC} $JOB_DESCRIPTION"
echo -e " ${BLUE}地域:${NC} $REGION"
echo -e " ${BLUE}VM镜像:${NC} $IMAGE_ID"
echo -e " ${BLUE}vSwitch ID:${NC} $VSWITCH_ID"
echo -e " ${BLUE}安全组 ID:${NC} $SECURITY_GROUP_ID"
echo -e " ${BLUE}资源配置:${NC} 4 CPU核心, 8GB内存, 40GB系统盘"
if [ "$DRY_RUN" = true ]; then
echo -e "${YELLOW}📝 模拟模式: 仅显示配置,不提交作业${NC}"
echo -e "${GREEN}✅ 配置验证通过!${NC}"
exit 0
fi
# 用户确认
echo ""
read -p "$(echo -e "${YELLOW}❓ 确认提交作业? (y/N): ${NC}")" -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}❌ 操作已取消${NC}"
exit 0
fi
# 构建Tasks JSON
TASKS_JSON="[{
\"TaskSpec\": {
\"TaskExecutor\": [{
\"VM\": {
\"Image\": \"$IMAGE_ID\",
\"Script\": \"$TEST_SCRIPT_BASE64\",
\"Password\": \"$VM_PASSWORD\"
}
}],
\"VolumeMount\": [{
\"MountPath\": \"/mnt\",
\"VolumeDriver\": \"alicloud/nas\",
\"MountOptions\": \"{\\\"server\\\":\\\"xxx.cn-hangzhou.nas.aliyuncs.com\\\",\\\"vers\\\":\\\"3\\\",\\\"path\\\":\\\"/\\\",\\\"options\\\":\\\"nolock,tcp,noresvport\\\"}\"
}],
\"Resource\": {
\"Disks\": [{
\"Type\": \"System\",
\"Size\": 40
}],
\"Cores\": 4,
\"Memory\": 8
}
},
\"ExecutorPolicy\": {
\"MaxCount\": 1
},
\"TaskSustainable\": true
}]"
# 构建DeploymentPolicy JSON
DEPLOYMENT_POLICY_JSON="{
\"Network\": {
\"Vswitch\": [\"$VSWITCH_ID\"],
\"EnableExternalIpAddress\": true
},
\"AllocationSpec\": \"Standard\",
\"Level\": \"General\"
}"
# 构建SecurityPolicy JSON
SECURITY_POLICY_JSON="{
\"SecurityGroup\": {
\"SecurityGroupIds\": [\"$SECURITY_GROUP_ID\"]
}
}"
echo -e "${BLUE}📤 正在提交作业...${NC}"
# 提交作业
if $ALIYUN_CLI ehpcinstant CreateJob \
--JobName "$JOB_NAME" \
--JobDescription "$JOB_DESCRIPTION" \
--Tasks "$TASKS_JSON" \
--DeploymentPolicy "$DEPLOYMENT_POLICY_JSON" \
--SecurityPolicy "$SECURITY_POLICY_JSON" \
--region "$REGION" \
--connect-timeout 5 \
--read-timeout 10 \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill; then
echo -e "${GREEN}✅ 长期运行VM作业提交成功!${NC}"
echo -e "${GREEN}💡 后续操作:${NC}"
echo -e " • 查看作业状态: ./list_jobs.sh"
echo -e " • 获取详情: ./get_job.sh <JobId>"
else
echo -e "${RED}❌ 作业提交失败!${NC}"
exit 1
fi
#!/bin/bash
# ====================================================================
# E-HPC Instant - 作业删除脚本 (CLI模式)
# ====================================================================
# 基于SDK脚本: delete_jobs.py
# 功能: 删除指定的E-HPC Instant作业
# ====================================================================
set -e
# ANSI颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 加载共享输入校验库
source "$(dirname "$0")/_lib_validate.sh"
# 显示帮助信息
show_help() {
cat << EOF
${BLUE}E-HPC Instant 作业删除工具${NC}
${YELLOW}功能说明:${NC}
删除指定的E-HPC Instant作业
${YELLOW}环境变量配置:${NC}
REGION - 地域 (默认: cn-shanghai)
${YELLOW}使用方式:${NC}
./delete_jobs.sh <JobId>
${YELLOW}参数:${NC}
JobId - 要删除的作业ID (必需)
EOF
}
# 参数验证
if [[ $# -eq 0 ]] || [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
if [[ $# -eq 0 ]]; then
echo -e "${RED}❌ 错误: 请提供作业ID${NC}"
fi
show_help
exit 1
fi
JOB_ID="$1"
# 输入校验
validate_job_id "$JOB_ID"
# 验证阿里云CLI
ALIYUN_CLI="aliyun"
if ! command -v "$ALIYUN_CLI" &> /dev/null; then
echo -e "${RED}❌ 错误: 未找到 aliyun CLI${NC}"
echo -e "${YELLOW}请先安装阿里云CLI: https://help.aliyun.com/document_detail/121529.html${NC}"
exit 1
fi
REGION="${REGION:-cn-shanghai}"
validate_region "$REGION"
echo -e "${BLUE}🗑️ 删除作业${NC}"
echo -e "${BLUE}============${NC}"
echo -e "作业ID: ${CYAN}$JOB_ID${NC}"
echo -e "地域: ${CYAN}$REGION${NC}"
echo ""
# 安全确认
read -p "$(echo -e "${RED}❓ 确认删除作业 $JOB_ID? 此操作不可逆! (y/N): ${NC}")" -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}❌ 操作已取消${NC}"
exit 0
fi
# 构建JobSpec JSON
JOB_SPEC_JSON="[{\"JobId\":\"$JOB_ID\"}]"
echo -e "${BLUE}📤 正在删除...${NC}"
# 执行删除
if $ALIYUN_CLI ehpcinstant DeleteJobs --JobSpec "$JOB_SPEC_JSON" --region "$REGION" --connect-timeout 5 --read-timeout 10 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill; then
echo -e "${GREEN}✅ 作业删除成功!${NC}"
echo -e "${GREEN}💡 提示:${NC}"
echo -e " • 验证结果: ./list_jobs.sh"
else
echo -e "${RED}❌ 删除失败!${NC}"
exit 1
fi
#!/bin/bash
# ====================================================================
# E-HPC Instant - 作业详情查询脚本 (CLI模式)
# ====================================================================
# 基于SDK脚本: get_job.py
# 功能: 获取指定作业的详细信息
# ====================================================================
set -e
# ANSI颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 加载共享输入校验库
source "$(dirname "$0")/_lib_validate.sh"
# 显示帮助信息
show_help() {
cat << EOF
${BLUE}E-HPC Instant 作业详情查询工具${NC}
${YELLOW}功能说明:${NC}
获取指定作业的详细配置和状态信息
${YELLOW}环境变量配置:${NC}
REGION - 地域 (默认: cn-shanghai)
${YELLOW}使用方式:${NC}
./get_job.sh <JobId>
${YELLOW}参数:${NC}
JobId - 要查询的作业ID (必需)
EOF
}
# 参数验证
if [[ $# -eq 0 ]] || [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
if [[ $# -eq 0 ]]; then
echo -e "${RED}❌ 错误: 请提供作业ID${NC}"
fi
show_help
exit 1
fi
JOB_ID="$1"
# 输入校验
validate_job_id "$JOB_ID"
# 验证阿里云CLI
ALIYUN_CLI="aliyun"
if ! command -v "$ALIYUN_CLI" &> /dev/null; then
echo -e "${RED}❌ 错误: 未找到 aliyun CLI${NC}"
echo -e "${YELLOW}请先安装阿里云CLI: https://help.aliyun.com/document_detail/121529.html${NC}"
exit 1
fi
REGION="${REGION:-cn-shanghai}"
validate_region "$REGION"
echo -e "${BLUE}🔍 查询作业详情${NC}"
echo -e "${BLUE}================${NC}"
echo -e "作业ID: ${CYAN}$JOB_ID${NC}"
echo -e "地域: ${CYAN}$REGION${NC}"
echo ""
# 执行查询
echo -e "${BLUE}📤 正在获取详情...${NC}"
if RESULT=$($ALIYUN_CLI ehpcinstant GetJob --JobId "$JOB_ID" --region "$REGION" --connect-timeout 5 --read-timeout 10 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill); then
echo -e "${GREEN}✅ 查询成功!${NC}"
echo ""
echo "$RESULT"
echo -e "${GREEN}💡 提示:${NC}"
echo -e " • 列出所有作业: ./list_jobs.sh"
echo -e " • 删除作业: ./delete_jobs.sh $JOB_ID"
else
echo -e "${RED}❌ 查询失败!${NC}"
exit 1
fi
#!/bin/bash
# ====================================================================
# E-HPC Instant - 作业列表查询脚本 (CLI模式)
# ====================================================================
# 基于SDK脚本: list_jobs.py
# 功能: 查询E-HPC Instant作业列表,支持过滤条件
# ====================================================================
set -e
# ANSI颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 加载共享输入校验库
source "$(dirname "$0")/_lib_validate.sh"
# 显示帮助信息
show_help() {
cat << EOF
${BLUE}E-HPC Instant 作业列表查询工具${NC}
${YELLOW}功能说明:${NC}
查询E-HPC Instant作业列表,支持按作业ID或名称过滤
${YELLOW}环境变量配置:${NC}
JOB_ID - 按作业ID过滤 (可选)
JOB_NAME - 按作业名称过滤 (可选)
REGION - 地域 (默认: cn-shanghai)
${YELLOW}使用方式:${NC}
./list_jobs.sh [选项]
${YELLOW}选项:${NC}
-h, --help 显示此帮助信息
EOF
}
# 参数解析
if [[ $# -gt 0 ]] && ([[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]); then
show_help
exit 0
fi
# 验证阿里云CLI
ALIYUN_CLI="aliyun"
if ! command -v "$ALIYUN_CLI" &> /dev/null; then
echo -e "${RED}❌ 错误: 未找到 aliyun CLI${NC}"
echo -e "${YELLOW}请先安装阿里云CLI: https://help.aliyun.com/document_detail/121529.html${NC}"
exit 1
fi
REGION="${REGION:-cn-shanghai}"
# 输入校验:防止 JSON 注入
validate_region "$REGION"
if [[ -n "$JOB_ID" ]]; then
validate_job_id "$JOB_ID"
fi
if [[ -n "$JOB_NAME" ]]; then
validate_job_name "$JOB_NAME"
fi
echo -e "${BLUE}🔍 查询作业列表${NC}"
echo -e "${BLUE}================${NC}"
# 构建过滤条件(输入已通过白名单校验,可安全拼接)
FILTER_JSON=""
if [[ -n "$JOB_ID" ]] || [[ -n "$JOB_NAME" ]]; then
FILTER_JSON="{"
if [[ -n "$JOB_ID" ]]; then
FILTER_JSON+="\"JobId\":\"$JOB_ID\""
if [[ -n "$JOB_NAME" ]]; then
FILTER_JSON+=","
fi
fi
if [[ -n "$JOB_NAME" ]]; then
FILTER_JSON+="\"JobName\":\"$JOB_NAME\""
fi
FILTER_JSON+="}"
echo -e "${YELLOW}📋 过滤条件:${NC}"
if [[ -n "$JOB_ID" ]]; then
echo -e " ${BLUE}作业ID:${NC} $JOB_ID"
fi
if [[ -n "$JOB_NAME" ]]; then
echo -e " ${BLUE}作业名称:${NC} $JOB_NAME"
fi
fi
echo -e " ${BLUE}地域:${NC} $REGION"
# 执行查询
echo -e "${BLUE}📤 正在查询...${NC}"
QUERY_ARGS=(--region "$REGION" --connect-timeout 5 --read-timeout 10 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill)
if [[ -n "$FILTER_JSON" ]]; then
QUERY_ARGS+=(--Filter "$FILTER_JSON")
fi
if RESULT=$($ALIYUN_CLI ehpcinstant ListJobs "${QUERY_ARGS[@]}"); then
echo -e "${GREEN}✅ 查询成功!${NC}"
echo ""
echo "$RESULT"
echo -e "${GREEN}💡 提示:${NC}"
echo -e " • 获取详情: ./get_job.sh <JobId>"
echo -e " • 删除作业: ./delete_jobs.sh <JobId>"
else
echo -e "${RED}❌ 查询失败!${NC}"
exit 1
fi
#!/usr/bin/env python
# coding=utf-8
# ====================================================================
# E-HPC Instant SDK - 通用输入校验库
# ====================================================================
# 目的:
# 与 scripts/cli/_lib_validate.sh 保持一致的白名单校验逻辑,
# 防止来自 sys.argv / 环境变量等不可信来源的恶意字符(双引号、
# 反斜杠、控制字符等)被直接拼接进 JSON 字符串后引发 JSON/命令注入。
#
# 用法:
# from _lib_validate import validate_job_id, validate_vm_password, ...
# job_id = validate_job_id(sys.argv[1])
#
# 校验失败行为:
# 抛出 ValidationError,调用方可用 require_argv 等包装函数自动退出。
# ====================================================================
import re
import sys
class ValidationError(ValueError):
"""输入校验失败时抛出的异常。"""
def _fail(message, hint=None):
msg = "❌ 输入校验失败: {0}".format(message)
if hint:
msg += "\n 正确格式: {0}".format(hint)
raise ValidationError(msg)
def validate_pattern(name, value, regex, hint):
"""通用:按正则白名单校验。"""
if value is None or value == "":
_fail("{0} 不能为空".format(name), hint)
if not isinstance(value, str):
_fail("{0} 类型必须为字符串".format(name), hint)
if not re.match(regex, value):
_fail("{0} 格式无效: '{1}'".format(name, value), hint)
return value
# ---- 资源 ID 校验(严格白名单字符)----
def validate_job_id(value):
return validate_pattern(
"JobId", value, r"^job-[a-zA-Z0-9]+$", "job- 后跟字母数字"
)
def validate_job_name(value):
return validate_pattern(
"JobName", value, r"^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$",
"1-64 位字母/数字/下划线/连字符",
)
def validate_image_id(value):
return validate_pattern(
"ImageId", value, r"^m-[a-zA-Z0-9]+$", "m- 后跟字母数字"
)
def validate_vswitch_id(value):
return validate_pattern(
"VSwitchId", value, r"^vsw-[a-zA-Z0-9]+$", "vsw- 后跟字母数字"
)
def validate_security_group_id(value):
return validate_pattern(
"SecurityGroupId", value, r"^sg-[a-zA-Z0-9]+$", "sg- 后跟字母数字"
)
def validate_region(value):
return validate_pattern(
"Region", value, r"^[a-z][a-z0-9-]*[a-z0-9]$",
"小写字母/数字/连字符,如 cn-shanghai",
)
# ---- 域名/主机名(NAS Server 等)----
def validate_hostname(name, value):
if value is None or value == "":
_fail("{0} 不能为空".format(name))
if not isinstance(value, str):
_fail("{0} 类型必须为字符串".format(name))
if len(value) > 253:
_fail("{0} 长度超过 253".format(name))
if not re.match(r"^[a-zA-Z0-9]([a-zA-Z0-9.-]*[a-zA-Z0-9])?$", value):
_fail(
"{0} 格式无效: '{1}'".format(name, value),
"合法的主机名/域名(字母数字、点、连字符)",
)
return value
# ---- 容器镜像引用 ----
def validate_container_image(value):
if value is None or value == "":
_fail("ContainerImage 不能为空")
if not isinstance(value, str):
_fail("ContainerImage 类型必须为字符串")
if len(value) > 512:
_fail("ContainerImage 长度超过 512")
if not re.match(r"^[a-zA-Z0-9][a-zA-Z0-9._:/@-]*$", value):
_fail(
"ContainerImage 包含非法字符: '{0}'".format(value),
"仅允许 字母数字 . _ : / @ -",
)
return value
# ---- 自由文本字段(JOB_DESCRIPTION 等)----
_CTRL_RE = re.compile(r"[\x00-\x1f\x7f]")
def validate_json_safe_text(name, value, maxlen=256):
if value is None or value == "":
_fail("{0} 不能为空".format(name))
if not isinstance(value, str):
_fail("{0} 类型必须为字符串".format(name))
if len(value) > maxlen:
_fail("{0} 长度超过 {1}".format(name, maxlen))
if '"' in value:
_fail("{0} 不允许包含双引号 (\")".format(name))
if "\\" in value:
_fail("{0} 不允许包含反斜杠 (\\)".format(name))
if _CTRL_RE.search(value):
_fail("{0} 包含非法控制字符".format(name))
return value
# ---- VM 登录密码 ----
def validate_vm_password(value):
if value is None or value == "":
_fail("VM_PASSWORD 不能为空", "请先 export VM_PASSWORD=<your-password>")
if not isinstance(value, str):
_fail("VM_PASSWORD 类型必须为字符串")
if len(value) < 8 or len(value) > 30:
_fail("VM_PASSWORD 长度必须为 8-30")
if '"' in value or "\\" in value:
_fail("VM_PASSWORD 不允许包含 \" 或 \\")
if _CTRL_RE.search(value):
_fail("VM_PASSWORD 包含非法控制字符")
return value
# ---- 命令行包装 ----
def require_argv(argv, index, validator, usage):
"""从 sys.argv 取第 index 个参数并交给 validator 校验,失败时打印用法并退出。"""
if len(argv) <= index:
sys.stderr.write("❌ 错误: 缺少参数\n")
sys.stderr.write(usage + "\n")
sys.exit(2)
try:
return validator(argv[index])
except ValidationError as e:
sys.stderr.write(str(e) + "\n")
sys.stderr.write(usage + "\n")
sys.exit(2)
#!/usr/bin/env python
#coding=utf-8
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
# 使用默认凭证链:自动从环境变量、配置文件(~/.aliyun/config.json)、ECS RAM角色等来源获取凭证
client = AcsClient(region_id='cn-shanghai')
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('ehpcinstant.cn-shanghai.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https')
request.set_version('2023-07-01')
request.set_action_name('CreateJob')
request.set_connect_timeout(5000) # 连接超时 5 秒
request.set_read_timeout(10000) # 读取超时 10 秒
request.add_header('User-Agent', 'AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill')
tasks = [
{
"TaskSpec": {
"TaskExecutor": [
{
"Container": {
"Image":"registry-vpc.cn-shanghai.aliyuncs.com/demo/xxx:v1.2",
"AppId":"ci-ctn-xxx",
"Command": [
"sleep","180000",
],
"EnvironmentVars": [
{
"Name": "RUN_PY_PATH",
"Value": "/mnt/test.py"
},
{
"Name": "OUTPUT_PATH",
"Value": "/mnt/output/"
},
{
"Name": "INPUT_PDB_PATH",
"Value": "/mnt/input/test.pdb"
},
{
"Name": "LOG_PATH",
"Value": "/mnt/logs"
}
]
}
}
],
"VolumeMount": [
{
"MountPath": "/mnt",
"VolumeDriver": "alicloud/nas",
"MountOptions": "{\"server\":\"xxx.cn-shanghai.nas.aliyuncs.com\",\"vers\":\"3\",\"path\":\"/\",\"options\":\"nolock,tcp,noresvport\"}"
}
],
"Resource": {
"Disks": [
{
"Type": "System",
"Size": 40
}
],
"Cores": 8,
"Memory": 32,
"InstanceTypes":[
"ecs.gn6v-c8g1.2xlarge"
]
}
},
"ExecutorPolicy": {
"MaxCount": 1
},
"TaskSustainable": False
}
]
deploymentPolicy = {
"Network": {
"Vswitch": [
"vsw-xxx"
],
"EnableExternalIpAddress": False,
},
"AllocationSpec": "Standard",
"Level":"General"
}
securityPolicy = {
"SecurityGroup": {
"SecurityGroupIds": [
"sg-xxx"
]
}
}
tasksStr = json.dumps(tasks)
deploymentPolicyStr = json.dumps(deploymentPolicy)
securityPolicyStr = json.dumps(securityPolicy)
request.add_query_param('JobName', "testX")
request.add_query_param('JobDescription', "container job test")
request.add_query_param('Tasks', tasksStr)
request.add_query_param('DeploymentPolicy', deploymentPolicyStr)
request.add_query_param('SecurityPolicy', securityPolicyStr)
response = client.do_action(request)
print(str(response, encoding='utf-8'))
#!/usr/bin/env python
#coding=utf-8
import os
import json
import base64
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
# 使用默认凭证链:自动从环境变量、配置文件(~/.aliyun/config.json)、ECS RAM角色等来源获取凭证
client = AcsClient(region_id='cn-shanghai')
# VM 登录密码从环境变量读取,避免明文硬编码
vm_password = os.environ.get('VM_PASSWORD')
if not vm_password:
raise EnvironmentError("环境变量 VM_PASSWORD 未设置,请先 export VM_PASSWORD=<your-password>")
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('ehpcinstant.cn-shanghai.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https')
request.set_version('2023-07-01')
request.set_action_name('CreateJob')
request.set_connect_timeout(5000) # 连接超时 5 秒
request.set_read_timeout(10000) # 读取超时 10 秒
request.add_header('User-Agent', 'AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill')
# Step 1: 定义 Shell 脚本字符串
shell_script = """#!/bin/bash
sleep 180
"""
# Step 2: 将字符串转换为 Base64 编码
# 注意:Base64 编码需要将字符串转换为字节格式
encoded_script = base64.b64encode(shell_script.encode('utf-8')).decode('utf-8')
tasks = [
{
"TaskSpec": {
"TaskExecutor": [
{
"VM": {
"Image": "m-xxx",
"Script": encoded_script,
"Password": vm_password
}
}
],
"VolumeMount": [
{
"MountPath": "/mnt",
"VolumeDriver": "alicloud/nas",
"MountOptions": "{\"server\":\"xxx.cn-hangzhou.nas.aliyuncs.com\",\"vers\":\"3\",\"path\":\"/\",\"options\":\"nolock,tcp,noresvport\"}"
}
],
"Resource": {
"Disks": [
{
"Type": "System",
"Size": 40
}
],
"Cores": 4,
"Memory": 8,
"InstanceTypes":[
"ecs.c7.xlarge"
]
}
},
"ExecutorPolicy": {
"MaxCount": 1
},
"TaskSustainable": False
}
],
deploymentPolicy = {
"Network": {
"Vswitch": [
"vsw-xxx"
],
"EnableExternalIpAddress": False,
},
"AllocationSpec": "Standard",
"Level":"General"
}
securityPolicy = {
"SecurityGroup": {
"SecurityGroupIds": [
"sg-xxx"
]
}
}
tasksStr = json.dumps(tasks)
deploymentPolicyStr = json.dumps(deploymentPolicy)
securityPolicyStr = json.dumps(securityPolicy)
request.add_query_param('JobName', "create_vm_job")
request.add_query_param('JobDescription', "E-HPC Instant VM批处理作业提交")
request.add_query_param('Tasks', tasksStr)
request.add_query_param('DeploymentPolicy', deploymentPolicyStr)
request.add_query_param('SecurityPolicy', securityPolicyStr)
response = client.do_action(request)
print(str(response, encoding='utf-8'))
#!/usr/bin/env python
#coding=utf-8
import os
import json
import base64
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
# 使用默认凭证链:自动从环境变量、配置文件(~/.aliyun/config.json)、ECS RAM角色等来源获取凭证
client = AcsClient(region_id='cn-shanghai')
# VM 登录密码从环境变量读取,避免明文硬编码
vm_password = os.environ.get('VM_PASSWORD')
if not vm_password:
raise EnvironmentError("环境变量 VM_PASSWORD 未设置,请先 export VM_PASSWORD=<your-password>")
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('ehpcinstant.cn-shanghai.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https')
request.set_version('2023-07-01')
request.set_action_name('CreateJob')
request.set_connect_timeout(5000) # 连接超时 5 秒
request.set_read_timeout(10000) # 读取超时 10 秒
request.add_header('User-Agent', 'AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill')
# Step 1: 定义 Shell 脚本字符串
shell_script = """#!/bin/bash
sleep 180
"""
# Step 2: 将字符串转换为 Base64 编码
# 注意:Base64 编码需要将字符串转换为字节格式
encoded_script = base64.b64encode(shell_script.encode('utf-8')).decode('utf-8')
tasks = [
{
"TaskSpec": {
"TaskExecutor": [
{
"VM": {
"Image": "m-xxx",
#"Script": encoded_script,
"Password": vm_password
}
}
],
"VolumeMount": [
{
"MountPath": "/mnt",
"VolumeDriver": "alicloud/nas",
"MountOptions": "{\"server\":\"xxx.cn-hangzhou.nas.aliyuncs.com\",\"vers\":\"3\",\"path\":\"/\",\"options\":\"nolock,tcp,noresvport\"}"
}
],
"Resource": {
"Disks": [
{
"Type": "System",
"Size": 40
}
],
"Cores": 4,
"Memory": 8
}
},
"ExecutorPolicy": {
"MaxCount": 1
},
"TaskSustainable": True
}
],
deploymentPolicy = {
"Network": {
"Vswitch": [
"vsw-xxx"
],
"EnableExternalIpAddress": True,
},
"AllocationSpec": "Standard",
"Level":"General"
}
securityPolicy = {
"SecurityGroup": {
"SecurityGroupIds": [
"sg-xxx"
]
}
}
tasksStr = json.dumps(tasks)
deploymentPolicyStr = json.dumps(deploymentPolicy)
securityPolicyStr = json.dumps(securityPolicy)
request.add_query_param('JobName', "create_vm_job")
request.add_query_param('JobDescription', "E-HPC Instant VM 后台服务作业提交")
request.add_query_param('Tasks', tasksStr)
request.add_query_param('DeploymentPolicy', deploymentPolicyStr)
request.add_query_param('SecurityPolicy', securityPolicyStr)
response = client.do_action(request)
print(str(response, encoding='utf-8'))
#!/usr/bin/env python
#coding=utf-8
import sys
import os
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
# 引入与 CLI 端 _lib_validate.sh 对齐的输入校验库
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from _lib_validate import require_argv, validate_job_id
# 输入校验:JobId 必须符合 ^job-[a-zA-Z0-9]+$ 白名单
job_id = require_argv(
sys.argv, 1, validate_job_id,
"用法: python delete_jobs.py <JobId> (JobId 形如 job-xxxxxxxx)"
)
# 使用默认凭证链:自动从环境变量、配置文件(~/.aliyun/config.json)、ECS RAM角色等来源获取凭证
client = AcsClient(region_id='cn-shanghai')
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('ehpcinstant.cn-shanghai.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https')
request.set_version('2023-07-01')
request.set_action_name('DeleteJobs')
request.set_connect_timeout(5000) # 连接超时 5 秒
request.set_read_timeout(10000) # 读取超时 10 秒
request.add_header('User-Agent', 'AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill')
jobSpec = [
{
"JobId": job_id
}
]
jobSpecStr = json.dumps(jobSpec)
request.add_query_param('JobSpec', jobSpecStr)
response = client.do_action(request)
print(str(response, encoding='utf-8'))#!/usr/bin/env python
#coding=utf-8
import sys
import os
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
# 引入与 CLI 端 _lib_validate.sh 对齐的输入校验库
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from _lib_validate import require_argv, validate_job_id
# 输入校验:JobId 必须符合 ^job-[a-zA-Z0-9]+$ 白名单
job_id = require_argv(
sys.argv, 1, validate_job_id,
"用法: python get_job.py <JobId> (JobId 形如 job-xxxxxxxx)"
)
# 使用默认凭证链:自动从环境变量、配置文件(~/.aliyun/config.json)、ECS RAM角色等来源获取凭证
client = AcsClient(region_id='cn-shanghai')
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('ehpcinstant.cn-shanghai.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https')
request.set_version('2023-07-01')
request.set_action_name('GetJob')
request.set_connect_timeout(5000) # 连接超时 5 秒
request.set_read_timeout(10000) # 读取超时 10 秒
request.add_header('User-Agent', 'AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill')
jobSpec = [
{
"JobId": job_id
}
]
jobSpecStr = json.dumps(jobSpec)
request.add_query_param('JobSpec', jobSpecStr)
response = client.do_action(request)
print(str(response, encoding='utf-8'))#!/usr/bin/env python
#coding=utf-8
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
# 使用默认凭证链:自动从环境变量、配置文件(~/.aliyun/config.json)、ECS RAM角色等来源获取凭证
client = AcsClient(region_id='cn-shanghai')
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('ehpcinstant.cn-shanghai.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https')
request.set_version('2023-07-01')
request.set_action_name('ListJobs')
request.set_connect_timeout(5000) # 连接超时 5 秒
request.set_read_timeout(10000) # 读取超时 10 秒
request.add_header('User-Agent', 'AlibabaCloud-Agent-Skills/alibabacloud-ehpc-instant-job-skill')
filter = {
"JobId": "test",
"JobName": "test"
}
filterStr = json.dumps(filter)
request.add_query_param('Filter', filterStr)
response = client.do_action(request)
print(str(response, encoding='utf-8'))Related skills
FAQ
What job types are supported?
Both container jobs and VM jobs, each with resource, network, and storage configuration.
What is the default region?
It uses the user-specified region or the default region cn-shanghai.