关于 huawei-cloud-sac-dify
这是一个使用 Terraform 在 Huawei Cloud 部署 Dify LLM 应用开发平台的技能,面向需要配置并验证云端 Dify 环境的用户。它通过模板创建网络、ECS 和 EIP,并以 cloud-init 安装服务;支持多个 Dify 版本及 flexus-ai-agent 模式。
主要功能
- 01提取解决方案信息与估价
- 02下载并规范化 Terraform 模板
- 03配置 Huawei Cloud 参数
- 04通过 Terraform 部署和清理资源
- 05验证部署状态与服务可达性
适用场景
- 01在 Huawei Cloud 配置 Dify 平台
- 02检查部署方案信息和预计价格
- 03部署后检查 Terraform 资源及服务响应
- 04移除已部署资源并清理凭据文件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ huaweicloud/ huaweicloud-skills --skill huawei-cloud-sac-dify安装后在 Claude Code 中输入/huawei-cloud-sac-dify确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/acceptance-criteria.mdcli-installation-guide.mdiam-policies.mdrelated-commands.mdverification-method.mdscripts/extract_sac_deploy_info.pylist_tf_variables.pynormalize_tf_providers.pyplaywright_utils.pyscripts/templates/extract_sac_deploy_info.js详细介绍
华为云 Dify LLM 应用开发平台
概述
使用 Terraform 在华为云上端到端部署“构建 Dify LLM 应用开发平台” SAC 解决方案。
架构: VPC + 子网 + 安全组(允许 ICMP/HTTP/HTTPS 入站),一台 ECS 实例和一个 EIP(1-300 Mbit/s)。Cloud-init 会在 Ubuntu 上安装并启动 Dify 服务。模板支持 Dify 社区版本和 flexus-ai-agent 模式(由 dify_version 控制)。
工具链: Playwright CLI(提取价格/解决方案元数据)+ Python 3.8+(辅助脚本)+ Terraform(基础设施预配)。不使用 KooCLI;部署和生命周期操作仅通过 Terraform 处理。
前提条件
- Python 3.8+、Playwright CLI、Terraform 1.15.4+ — 参见CLI 安装指南
- 通过环境变量提供华为云 AK/SK(
HW_ACCESS_KEY、HW_SECRET_KEY);如果未设置,请提示用户手动编辑<temp_dir>/dify-workdir/terraform.auto.tfvars.json并填写 AK/SK - 具有足够权限的 IAM 用户或
rf_admin_trust委托 — 参见 IAM 策略
安全
- 🚫 切勿在对话或输出中暴露 AK/SK
- 🚫 切勿要求用户在聊天中输入 AK/SK
- ✅ 优先使用 IAM 用户,而非主账号
- ✅ 修改操作(
apply、destroy)需要用户明确确认
核心命令
占位符值(按操作系统解析,参见参数):
| 占位符 | Linux / macOS | Windows |
|---|---|---|
<python> | python3 | python |
<script_dir> | ./scripts | ./scripts |
<temp_dir> | /tmp | $env:TEMP |
# 1. Extract solution info
<python> <script_dir>/extract_sac_deploy_info.py \
--url "https://www.huaweicloud.com/solution/implementations/building-a-dify-llm-application-development-platform.html" \
--out <temp_dir>/sac_selected.json
# 2. Download and normalize template
mkdir -p <temp_dir>/dify-workdir
curl -fsSL "https://documentation-samples.obs.cn-north-4.myhuaweicloud.com/solution-as-code-publicbucket/solution-as-code-moudle/flexus/dify-ecs.tf" \
-o <temp_dir>/dify-workdir/dify-ecs.tf
<python> <script_dir>/normalize_tf_providers.py <temp_dir>/dify-workdir \
--region "cn-north-4"
# 3. List variables for review
<python> <script_dir>/list_tf_variables.py <temp_dir>/dify-workdir
# 4. Deploy
terraform init
terraform plan
# ⛔ STOP — Review the plan output above. Do NOT auto-apply.
# Confirm with the user (AskUserQuestion or equivalent) before proceeding.
# Only after explicit user confirmation:
terraform apply
# 5. Verify
terraform state list
terraform output -json
# 6. Cleanup
terraform destroy
# Only after terraform destroy succeeds:
# Linux / macOS
rm -f <temp_dir>/dify-workdir/terraform.auto.tfvars.json
# Windows PowerShell
Remove-Item -Force <temp_dir>/dify-workdir/terraform.auto.tfvars.json
工作流
1. 提取解决方案信息
<python> <script_dir>/extract_sac_deploy_info.py \
--url "<solution_detail_page_url>" \
--out <temp_dir>/sac_selected.json
提取完成后,向用户展示结果:
- 解决方案名称:输出 JSON 中的
title字段 - 预估价格:
estimated_price_text字段 - 如果
title或estimated_price_text为空,请警告用户,并建议在解决方案页面手动核实
2. 下载并规范化模板
mkdir -p <temp_dir>/dify-workdir
curl -fsSL "https://documentation-samples.obs.cn-north-4.myhuaweicloud.com/solution-as-code-publicbucket/solution-as-code-moudle/flexus/dify-ecs.tf" \
-o <temp_dir>/dify-workdir/dify-ecs.tf
<python> <script_dir>/normalize_tf_providers.py <temp_dir>/dify-workdir \
--region "cn-north-4"
优先从上方明确指定的 Dify Terraform URL 下载模板。仅当该 URL 不可用时,才将提取出的模板候选项用作备用。
normalize_tf_providers.py 会写入 <temp_dir>/dify-workdir/terraform.auto.tfvars.json(包括区域和其他参数)。
如果未设置环境变量 HW_ACCESS_KEY/HW_SECRET_KEY,则 AK/SK 字段会留空。
提示用户手动编辑文件并填写 AK/SK,然后继续下一步。
3. 确认变量
<python> <script_dir>/list_tf_variables.py <temp_dir>/dify-workdir
与用户一起检查。如果敏感变量为空或强度不足,则阻止执行 apply。
对密码等敏感值进行部分遮蔽,避免将其泄露到 LLM 上下文中。
4. 部署
⛔ 停止 — 运行 terraform apply 前,请检查 terraform plan 输出并与用户确认(使用 AskUserQuestion 或等效方式)。
切勿自动应用。仅在获得用户明确确认后继续。
5. 验证
6. 清理
运行 terraform destroy 以移除受管理的资源。
仅在 terraform destroy 成功后删除 <temp_dir>/dify-workdir/terraform.auto.tfvars.json,这样销毁失败时仍可复用现有凭据文件重试。
Linux / macOS:
rm -f <temp_dir>/dify-workdir/terraform.auto.tfvars.json
Windows PowerShell:
Remove-Item -Force <temp_dir>/dify-workdir/terraform.auto.tfvars.json
参数
| 参数 | 必填 | 默认值 | 约束 |
|---|---|---|---|
access_key | 是 | <NO_DEFAULT> | 来自环境变量 HW_ACCESS_KEY 或本地文件 <temp_dir>/dify-workdir/terraform.auto.tfvars.json;切勿在聊天中打印 |
secret_key | 是 | <NO_DEFAULT> | 来自环境变量 HW_SECRET_KEY 或本地文件 <temp_dir>/dify-workdir/terraform.auto.tfvars.json;切勿在聊天中打印 |
solution_name | 否 | dify-ecs-demo | 4-24 个字符,仅限小写字母、数字和连字符,且必须以小写字母开头 |
region_id | 是 | cn-north-4 | 主区域参数。允许的值:cn-north-4,cn-southwest-2,cn-north-12,ap-southeast-3,cn-east-3,cn-north-9,cn-south-2,cn-south-1,tr-west-1,cn-south-4,ap-southeast-1,cn-north-2,cn-north-1,cn-east-4。确保 normalize_tf_providers.py --region 与此值一致 |
dify_version | 否 | 1.11.4 | 允许的值:1.11.4,1.8.1,1.6.0,1.4.1,1.1.3,0.15.8,flexus-ai-agent |
ecs_flavor | 否 | t6.xlarge.2 | ECS/Flexus 规格格式必须符合模板的正则表达式验证 |
ecs_password | 是 | "" | 8-26 个字符,且至少包含大写字母、小写字母、数字、特殊字符中的 3 种 |
dify_admin_password | 有条件必填 | "" | 当 dify_version=flexus-ai-agent 时生效;8-26 个字符,且包含字母和数字 |
system_disk_size | 否 | 100 | 40-1024(GB) |
bandwidth_size | 否 | 300 | 1-300(Mbit/s) |
charging_mode | 否 | postPaid | postPaid 或 prePaid |
charging_unit | 有条件必填 | month | 当 charging_mode=prePaid 时必填;month 或 year |
charging_period | 有条件必填 | 1 | 当 charging_mode=prePaid 时必填;按月:1-9,按年:1-3 |
部署后输出
terraform output -json— 包含 Dify 平台 URL 的access_instructions- Dify 界面:
http://<EIP>(cloud-init 大约需要 10 分钟)
输出格式
所有脚本输出均为 JSON 格式:extract_sac_deploy_info.py 输出解决方案信息 JSON,list_tf_variables.py 输出变量列表 JSON。
验证
按步骤验证部署结果:
- 提取模板 — 检查
<temp_dir>/sac_selected.json是否包含solution_name、price字段 - 下载模板 — 确认
<temp_dir>/sac-workdir下存在.tf文件,且terraform validate通过 - 确认变量 —
list_tf_variables.py的输出中敏感变量(AK/SK、密码)不为空 - 部署 —
terraform plan无错误;用户已确认部署;执行apply后,terraform state list显示所有预期资源 - 服务可访问性 — 等待 10-15 分钟让 cloud-init 完成,然后
curl -s http://<EIP>返回 200
最佳实践
- 始终先执行
terraform plan,再执行apply - 先使用
charging_unit=month;验证通过后再切换为year - 部署后预留 10-15 分钟让 cloud-init 完成
参考文档
| 文档 | 说明 |
|---|---|
| CLI 安装指南 | 安装 Python、Playwright CLI、Terraform |
| IAM 策略 | 权限、委托配置、故障处理 |
| 验证方法 | 按工作流步骤逐步验证 |
| 验收标准 | 完整的部署验收清单 |
| 相关命令 | Terraform、脚本、远程访问参考 |
注意事项
<temp_dir>/dify-workdir/terraform.auto.tfvars.json包含敏感信息,切勿提交到 VCS- 成功执行
terraform destroy后,删除<temp_dir>/dify-workdir/terraform.auto.tfvars.json,避免凭据留在磁盘上 normalize_tf_providers.py会将区域写入 tfvars;如果未设置环境变量,AK/SK 将留空,用户必须手动填写- 工具链:Playwright CLI + Python + Terraform — 不使用 KooCLI