huawei-cloud-sac-dify について
TerraformでHuawei CloudにDify LLMアプリ開発プラットフォームをデプロイするスキルです。クラウド上のDify環境を構成・検証するユーザー向けで、テンプレートからネットワーク、ECS、EIPを作成し、cloud-initでサービスを導入します。複数のDifyバージョンとflexus-ai-agentモードに対応します。
主な機能
- 01ソリューション情報と見積価格の抽出
- 02Terraformテンプレートの取得と正規化
- 03Huawei Cloudパラメーターの設定
- 04Terraformによるリソースの作成と削除
- 05デプロイ状態とサービス到達性の検証
活用シーン
- 01Huawei 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詳細
Huawei Cloud Dify LLM アプリケーション開発プラットフォーム
概要
Terraform を使用して、Huawei Cloud 上に「Building a Dify LLM Application Development Platform」SAC ソリューションをエンドツーエンドでデプロイします。
アーキテクチャ: VPC + サブネット + セキュリティグループ(ICMP/HTTP/HTTPS のインバウンド)、ECS インスタンス 1 台、EIP 1 つ(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 インストールガイドを参照
- 環境変数(
HW_ACCESS_KEY、HW_SECRET_KEY)を使用した Huawei Cloud の AK/SK。設定されていない場合は、ユーザーに<temp_dir>/dify-workdir/terraform.auto.tfvars.jsonを手動で編集して AK/SK を入力するよう依頼します - 十分な権限を持つ IAM ユーザー、または
rf_admin_trust委任 — IAM ポリシーを参照
セキュリティ
- 🚫 AK/SK を会話や出力に決して表示しないでください
- 🚫 チャットで AK/SK を入力するようユーザーに決して求めないでください
- ✅ プライマリアカウントより IAM ユーザーを優先してください
- ✅ 変更操作(
apply、destroy)には、ユーザーの明示的な確認が必要です
基本コマンド
プレースホルダーの値(OS ごとの解決方法は「パラメーター」を参照):
| プレースホルダー | 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 または同等の方法を使用)。
自動で apply を実行しないでください。ユーザーの明示的な確認を得てから進めてください。
5. 検証する
6. クリーンアップする
terraform destroy を実行して、管理対象のリソースを削除します。
terraform.auto.tfvars.json は、terraform destroy が成功してから削除してください。これにより、削除に失敗した場合も、既存の認証情報ファイルを再利用して再試行できます。
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 UI:
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ですべての想定リソースが表示されることを確認します - サービスへの接続確認 — cloud-init の完了まで 10~15 分待ち、その後
curl -s http://<EIP>が 200 を返すことを確認します
詳細については、検証方法 と 受け入れ基準 を参照してください。
ベストプラクティス
applyの前に必ずterraform planを実行してください- 最初は
charging_unit=monthで開始し、検証後にyearに切り替えてください - デプロイ後、cloud-init の完了まで 10~15 分待ってください
参考ドキュメント
| ドキュメント | 説明 |
|---|---|
| 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 は使用しません