huawei-cloud-eip-cost-optimizer について
hcloud CLI で Huawei Cloud の EIP(Elastic Public IP)を照会・分析し、クラウド運用担当者による未使用リソースの特定と費用推定を支援するスキルです。複数リージョンのレポート、監視、監査ログに対応し、スクリプトは読み取り専用で帯域変更や EIP 解放は行いません。
主な機能
- 01複数リージョンの EIP 照会と絞り込み
- 02未使用 EIP の特定と費用推定
- 03テキスト・HTML・JSON レポート生成
- 04Webhook またはメールによる監視と通知
- 05操作監査ログの記録とエクスポート
活用シーン
- 01指定日数以上未バインドの EIP を特定
- 02複数リージョンの EIP 状態を集計
- 03費用分析と削減提案のレポート作成
- 04未使用リソースの通知設定と操作ログ確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ huaweicloud/ huaweicloud-skills --skill huawei-cloud-eip-cost-optimizerインストール後、Claude Code で/huawei-cloud-eip-cost-optimizerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/acceptance-criteria.mdcli-installation-guide.mdeip-api-guide.mdiam-policies.mdtest-vars.jsonverification-method.mdscripts/analyze_idle_eips.shcheck_env.shconfig.sheip_audit_log.sheip_cost_report.shlist_eips.shmonitor_idle_eips.sh詳細
Huawei Cloud EIP コストオプティマイザー
概要
このスキルは、Huawei Cloud のエラスティックパブリック IP(EIP)の一括管理とコスト最適化機能を提供します。
アーキテクチャ:シェル + hcloud CLI(KooCLI)→ EIP サービス API → VPC/帯域幅リソース
関連スキル:ECS、EVS、OBS など、すべてのリソースタイプを対象とした幅広いコスト最適化については、アーカイブ済みの huaweicloud-cost-optimizer スキルを参照してください。このスキルは EIP の最適化に特化しており、より高度な機能と 100% の hcloud CLI 準拠を実現します。
- 使用されていない EIP を定期的にクリーンアップして、保有コストを削減
- コスト分析と最適化の推奨事項
- 複数リージョンの一元管理
- アイドル状態のリソースの自動監視とアラート
- コンプライアンス対応の操作監査ログ
一般的なユースケース:
- 「使用されていない EIP を特定して、最適化レポートを作成してください」
- 「高コストのリソースを特定するために、EIP コスト分析レポートを作成してください」
- 「Webhook またはメールによる自動アラート付きで、使用されていない EIP の監視を設定してください」
- 「すべてのリージョンにわたる EIP の分布とステータスの概要を表示してください」
- 「過去 30 日間の EIP 操作の監査ログを表示してください」
- 「cn-north-4 のすべての EIP を詳細情報付きで一覧表示してください」
前提条件
1. CLI 環境要件(必須)
- hcloud CLI(KooCLI) v7.0 以降 — Huawei Cloud のコマンドラインツール
- jq — API レスポンスを解析するための JSON プロセッサー
- bc — コスト見積もり用の任意精度計算機
- curl — Webhook 通知用の HTTP クライアント
hcloud CLI のインストール:
# Linux/macOS one-click install
curl -sSL https://hwcloudcli.obs.cn-north-1.myhuaweicloud.com/cli/latest/hcloud_install.sh | bash
# Verify installation
hcloud --version
jq、bc、curl のインストール:
# Ubuntu/Debian
sudo apt install -y jq bc curl
# CentOS/RHEL
sudo yum install -y jq bc curl
# macOS
brew install jq bc curl
利用可能なシェルスクリプト:
scripts/config.sh- 共通設定(認証情報、リージョン、プロキシ)scripts/list_eips.sh- リージョン内のすべての EIP を一覧表示(フィルタリングと概要表示に対応)scripts/analyze_idle_eips.sh- 使用されていない EIP を分析し、最適化レポートを作成(読み取り専用)scripts/eip_cost_report.sh- EIP コスト分析レポートを作成(テキスト/HTML/JSON)scripts/monitor_idle_eips.sh- 使用されていない EIP を監視し、Webhook/メールでアラートを送信。cron に対応scripts/check_env.sh- 環境の確認と検証(hcloud CLI、ツール、API)scripts/eip_audit_log.sh- 操作監査ログ(JSONL + CSV/JSON エクスポート)
注:すべてのスクリプトは読み取り専用です。このスキルは、帯域幅の調整、タグ管理、EIP の解放/削除は行いません。
2. 認証の設定
このスキルでは、環境変数を使用する 1 つの認証方法に対応しています。
環境変数
export HW_ACCESS_KEY=<your-ak>
export HW_SECRET_KEY=<your-sk>
export HW_REGION_NAME=cn-north-4
注:コマンドライン引数ではなくプロンプトを通じて認証情報を入力し、すでに
hcloud configureを対話形式で設定している場合も、このスキルは認証情報を検出して使用します。
環境変数:
| 変数 | 必須 | 説明 |
|---|---|---|
HW_ACCESS_KEY | 任意 | Huawei Cloud Access Key ID(hcloud configure が未設定の場合のみ必須) |
HW_SECRET_KEY | 任意 | Huawei Cloud Secret Access Key(hcloud configure が未設定の場合のみ必須) |
HW_REGION_NAME | 任意 | デフォルトのリージョン(デフォルト:cn-north-4) |
HW_SECURITY_TOKEN | 任意 | 一時的な認証情報用のセキュリティトークン |
セキュリティに関する注意事項:
- 認証情報をバージョン管理にコミットしないでください
- AK/SK の値をコード、会話、コマンド内で公開しないでください
- AK/SK の値をコマンドライン引数として渡さないでください(シェルの履歴や
ps auxに認証情報が表示されます) - 必要最小限の権限を持つ IAM ユーザーを使用してください
- 機密性の高い操作には MFA を有効にしてください
- AK/SK を定期的にローテーションしてください
- スクリプトを実行する前に
./scripts/check_env.shを使用して認証情報を検証してください
3. クイックスタート
# Step 1: Configure authentication via environment variables
export HW_ACCESS_KEY=<your-ak>
export HW_SECRET_KEY=<your-sk>
export HW_REGION_NAME=cn-north-4
# Step 2: Run environment check
bash scripts/check_env.sh
# Step 3: Run scripts
bash scripts/list_eips.sh --region cn-north-4
bash scripts/analyze_idle_eips.sh --idle-days 7
bash scripts/eip_cost_report.sh --format html
4. IAM 権限要件
注:このスキルは EIP リソースに対して読み取り専用です。書き込み操作は一切実行しません。
| API アクション | 権限 | 目的 |
|---|---|---|
vpc:publicIps:list | EIP の一覧表示 | すべての EIP とそのステータスを照会する |
vpc:publicIps:get | EIP の詳細取得 | 個々の EIP 情報を表示する |
ワークフロー
主な手順
- 環境確認 → hcloud CLI、jq、認証情報を確認します
- EIP の照会 → hcloud CLI を使用してリージョン全体の EIP を一覧表示します
- アイドル状態の分析 → アイドルしきい値を超えている未バインドの EIP を特定します
- コストレポート → HTML/JSON のコスト分析レポートを生成します
- 監視の設定 → アイドル EIP のアラート(Webhook/メール)を設定します
- 監査ログ記録 → コンプライアンスのために操作を記録します
EIP 照会ワークフロー
リージョン全体の EIP を一覧表示し、ステータスでフィルタリングして、JSON/テーブル形式で出力します。
アイドル EIP 分析ワークフロー
しきい値を超えてアイドル状態の未バインド EIP を検出し、保有コストを計算して、最適化レポートを生成します。
コストレポートワークフロー
EIP のコストデータを集計し、節約に関する推奨事項を含む HTML または JSON レポートを生成します。
アイドル EIP 監視ワークフロー
アイドル EIP がないか定期的に確認し、検出した場合は Webhook またはメールでアラートを送信します。
監査ログワークフロー
すべての EIP 操作(一覧表示/分析/レポート/監視)は、コンプライアンスのために監査ログファイルへ自動的に書き込まれます。各スクリプトは終了時に自身の操作を記録します。--action query-log --days N を使用して履歴を照会します。
すべての EIP 操作では、hcloud CLI コマンドを使用します。
| Python SDK メソッド | hcloud CLI コマンド | 説明 |
|---|---|---|
EipClient.list_publicips() | hcloud EIP ListPublicips/v2 --cli-region=<region> | すべての EIP を一覧表示します |
EipClient.show_publicip() | hcloud EIP ShowPublicip/v2 --publicip_id=<id> | EIP の詳細を取得します |
IamClient.keystone_list_projects() | hcloud IAM KeystoneListProjects | プロジェクトを一覧表示します |
出力形式:すべてのコマンドで機械可読な出力形式として --cli-output=json を使用し、jq で解析します。
主なコマンド
| コマンド | 説明 | バックエンド |
|---|---|---|
list_eips.sh | リージョン全体の EIP を一覧表示して照会します | hcloud CLI |
analyze_idle_eips.sh | コスト分析を行い、アイドル状態/未バインドの EIP を特定します | hcloud CLI |
eip_cost_report.sh | HTML/JSON のコスト分析レポートを生成します | hcloud CLI |
monitor_idle_eips.sh | アラート付きのアイドル EIP 監視を設定します | hcloud CLI |
eip_audit_log.sh | 操作監査ログを管理します | Shell |
check_env.sh | 環境の前提条件を確認します | Shell |
config.sh | 設定と認証情報を読み込みます | Shell |
EIP の照会
# List all EIPs in a region
bash scripts/list_eips.sh --region cn-north-4
# List EIPs with status filter
bash scripts/list_eips.sh --region cn-north-4 --status DOWN
# List EIPs across multiple regions
bash scripts/list_eips.sh --region cn-north-4,cn-east-3,cn-south-1
アイドル EIP の分析
# Analyze idle EIPs (default threshold: 0 days = all unbound)
bash scripts/analyze_idle_eips.sh
# Custom idle threshold (14 days)
bash scripts/analyze_idle_eips.sh --idle-days 14
# Analyze specific region with JSON output
bash scripts/analyze_idle_eips.sh --region cn-north-4 --idle-days 7 --json
コストレポート
# Generate text cost report (default)
bash scripts/eip_cost_report.sh
# Generate HTML report
bash scripts/eip_cost_report.sh --format html
# Generate JSON report
bash scripts/eip_cost_report.sh --format json
# Custom region
bash scripts/eip_cost_report.sh --region cn-east-3 --format html
コストモデル:帯域幅ベースの料金(cn-north-4 のオンデマンドでは約 3 CNY/Mbps/月)+ IP 保持料金(未バインド EIP では約 0.02 CNY/時間)。API は charge_mode を返さないため、すべての見積もりで帯域幅課金モデルを使用します。
アイドル EIP の監視
# Monitor idle EIPs (default threshold: 7 days)
bash scripts/monitor_idle_eips.sh
# Custom threshold
bash scripts/monitor_idle_eips.sh --idle-days 14
# Monitor with webhook alert (only DingTalk/WeCom/Slack HTTPS URLs are allowed)
bash scripts/monitor_idle_eips.sh --idle-days 7 --webhook "https://oapi.dingtalk.com/robot/send?access_token=YOUR_ACCESS_TOKEN"
# Monitor with email alert
bash scripts/monitor_idle_eips.sh --idle-days 7 --email [email protected]
# Set up daily cron job (9:00 AM) - REQUIRES webhook or email, otherwise it's rejected.
# The cron line embeds the alert parameters so scheduled runs actually notify.
bash scripts/monitor_idle_eips.sh --region cn-north-4 --idle-days 7 --setup-cron \
--webhook "https://oapi.dingtalk.com/robot/send?access_token=YOUR_ACCESS_TOKEN"
# Remove cron job
bash scripts/monitor_idle_eips.sh --remove-cron
環境確認
# Full environment validation (CLI + tools + API)
bash scripts/check_env.sh
# Verbose mode (show versions)
bash scripts/check_env.sh --verbose
# Auto-fix missing dependencies
bash scripts/check_env.sh --fix
操作監査ログ記録
# Log an EIP list operation
bash scripts/eip_audit_log.sh --action list --detail "Queried all EIPs"
# Log an analyze operation
bash scripts/eip_audit_log.sh --action analyze --detail "Idle EIP analysis for cn-north-4"
# Export audit logs to CSV
bash scripts/eip_audit_log.sh --action list --export csv
# Export audit logs to JSON
bash scripts/eip_audit_log.sh --action list --export json
# Custom log directory (must NOT be a system dir; will be created if missing)
bash scripts/eip_audit_log.sh --action list --log-dir ~/eip_audit_logs
# Query audit history for the last 30 days
bash scripts/eip_audit_log.sh --action query-log --days 30
# Query audit history for a specific action type
bash scripts/eip_audit_log.sh --action query-log --days 7
監査ログエントリ形式(JSONL、タイムゾーン対応のタイムスタンプ):
{
"timestamp": "2026-07-16T10:30:00+08:00",
"region": "cn-north-4",
"action": "list",
"detail": "Queried all EIPs",
"user": "root"
}
KooCLI コマンド形式
# General format
hcloud <Service> <Operation> --cli-region=<region> --param1=value1 --param2=value2
# EIP list example
hcloud EIP ListPublicips/v2 --cli-region=cn-north-4
# EIP show detail
hcloud EIP ShowPublicip/v2 --cli-region=cn-north-4 --publicip_id=<id>
| 機能 | 説明 | 例 |
|---------|-------------|---------||
| サービス名 | 大文字始まりの PascalCase | EIP、VPC、IAM |
| 操作名 | バージョン付き PascalCase | ListPublicips/v2、ShowPublicip/v2 |
| リージョンパラメーター | --cli-region=<value> | --cli-region=cn-north-4 |
| 単純なパラメーター | --key=value | --publicip_id=xxx |
| 出力形式 | --cli-output=json | プログラムによる解析用の JSON 出力 |
パラメーター
シェルスクリプトのパラメーター
| スクリプト | パラメーター | 必須/任意 | 説明 | デフォルト |
|---|---|---|---|---|
list_eips.sh | --region | 任意 | リージョン(カンマ区切り) | HW_REGION_NAME または cn-north-4 |
list_eips.sh | --status | 任意 | ステータスでフィルター(ACTIVE/DOWN/ERROR) | すべて |
analyze_idle_eips.sh | --region | 任意 | 対象リージョン | HW_REGION_NAME または cn-north-4 |
analyze_idle_eips.sh | --idle-days | 任意 | アイドル状態と判定する日数 | 0(すべての未バインド EIP) |
analyze_idle_eips.sh | --json | 任意 | JSON 形式のレポートを出力 | false |
eip_cost_report.sh | --region | 任意 | 対象リージョン | HW_REGION_NAME または cn-north-4 |
eip_cost_report.sh | --format | 任意 | 出力形式:text/html/json | text |
monitor_idle_eips.sh | --region | 任意 | 対象リージョン | HW_REGION_NAME または cn-north-4 |
monitor_idle_eips.sh | --idle-days | 任意 | アイドル状態と判定する日数 | 7 |
monitor_idle_eips.sh | --webhook | 任意 | Webhook アラート URL | - |
monitor_idle_eips.sh | --email | 任意 | アラート送信先メールアドレス | - |
monitor_idle_eips.sh | --setup-cron | 任意 | cron による監視を設定 | - |
monitor_idle_eips.sh | --remove-cron | 任意 | cron による監視を削除 | - |
check_env.sh | --verbose | 任意 | 詳細なチェック情報を表示 | false |
check_env.sh | --fix | 任意 | 不足している依存関係を自動修復 | false |
eip_audit_log.sh | --action | 必須 | 操作の種類(list/query/analyze/monitor/report) | - |
eip_audit_log.sh | --detail | 任意 | 操作の詳細な説明 | - |
eip_audit_log.sh | --export | 任意 | エクスポート形式:csv/json | - |
eip_audit_log.sh | --log-dir | 任意 | ログディレクトリのパス | ./eip_audit_logs |
環境変数
| 変数 | 必須 | 説明 | デフォルト |
|---|---|---|---|
HW_ACCESS_KEY | 任意* | Huawei Cloud AK(hcloud configure が未設定の場合のみ必要) | - |
HW_SECRET_KEY | 任意* | Huawei Cloud SK(hcloud configure が未設定の場合のみ必要) | - |
HW_REGION_NAME | 任意 | デフォルトのリージョン | cn-north-4 |
HW_SECURITY_TOKEN | 任意 | 一時的な認証情報トークン | - |
*hcloud configure がすでに設定されている場合、HW_ACCESS_KEY と HW_SECRET_KEY は不要です。両方が設定されている場合は、環境変数が優先されます。
出力形式
EIP リストの出力
========================================
Huawei Cloud EIP List (Region: cn-north-4)
========================================
EIP ID: eip-xxx1, IP: 123.45.67.89, BW: 5 Mbps, Status: BOUND (ECS: ecs-xxx)
EIP ID: eip-xxx2, IP: 98.76.54.32, BW: 10 Mbps, Status: UNBOUND ⚠️
========================================
Total: 2 EIPs, Idle: 1
コストレポートの出力
scripts/eip_cost_report.sh によって生成され、以下が含まれます:
- 概要統計(EIP の総数、アイドル状態、アクティブ状態、合計帯域幅、コスト)
- EIP ごとのコスト見積もりを含む詳細テーブル
- text、HTML、JSON 形式で利用可能
料金モデル:帯域幅ベース(約 3 CNY/Mbps/月 + 未バインド EIP の IP 維持料金 0.02 CNY/時)
検証
環境準拠チェック
# Run full environment check (CLI + tools + API)
bash scripts/check_env.sh
# Exit codes:
# 0 - All checks passed
# 1 - Missing dependencies or API errors
ベストプラクティス
- シェルスクリプトのみを使用:すべてのスクリプトは Shell と hcloud CLI を使用します。Python SDK への依存はありません。
- 定期的な監視:
monitor_idle_eips.sh --setup-cronで毎日の cron ジョブを設定し、アイドル状態の EIP を早期に検出します - コストレポート:
eip_cost_report.sh --format htmlで週次のコストレポートを生成し、最適化の進捗を追跡します - 監査ログ:
eip_audit_log.shを使用して、すべての EIP 操作の監査ログを有効にします - 複数リージョンの一覧表示:
list_eips.shは、リージョンをカンマ区切りで指定する--region cn-north-4,cn-east-3に対応しており、複数リージョンをまたいだ一覧表示が可能です。注:analyze_idle_eips.sh、eip_cost_report.sh、monitor_idle_eips.shはそれぞれ単一のリージョンを処理します(複数リージョンを分析する場合は、リージョンごとに実行してください)。 - Webhook アラート:アイドル状態の EIP をリアルタイムで通知するように Webhook を設定します
- 環境の検証:hcloud CLI と依存関係を確認するため、必ず最初に
check_env.shを実行します - アイドル日数の一貫性:
analyze_idle_eips.shとmonitor_idle_eips.shはどちらも--idle-daysパラメーターを使用し、タイムゾーンの処理方法も統一されています
参考資料
| ドキュメント | 説明 |
|---|---|
| IAM Permission Policies | 必要な権限とポリシー JSON |
| EIP API Guide | EIP API リファレンス(hcloud CLI) |
| CLI Installation Guide | hcloud CLI のインストール、設定、トラブルシューティング |
| Verification Method | 検証手順 |
| Acceptance Criteria | 本番環境への準備状況を確認する受け入れテスト |
注意事項
- コストの見積もりは参考値です — cn-north-4 のオンデマンド料金に基づいています(帯域幅モデル:月額約 3 CNY/Mbps + IP 保持料金 0.02 CNY/時)。実際のコストは、リージョンや課金モードによって異なる場合があります。
- API は charge_mode を返しません — スクリプトでは帯域幅課金とトラフィック課金を区別できないため、すべての見積もりで帯域幅モデルを使用します。
- このスキルは読み取り専用です — アイドル状態の EIP を分析して報告しますが、リソースの解放や削除は行いません。EIP を解放するには、コンソールで手動操作する必要があります。
- EIP の解放は取り消せません — 分析レポートに基づいてアイドル状態の EIP を解放すると、パブリック IP アドレスは回収され、復元できません。
- AK/SK をハードコードしてはいけません — 認証情報は環境変数(
HW_ACCESS_KEY、HW_SECRET_KEY)またはhcloud configureの対話モード(コマンドライン引数ではなく、プロンプトから入力)でのみ取得してください。 - サポート対象の方法は hcloud CLI のみです — すべてのスクリプトで、hcloud CLI(KooCLI)をネイティブに使用します。
- 認証:環境変数(
HW_ACCESS_KEY、HW_SECRET_KEY)を主な方法として使用してください。hcloud configureが対話形式ですでに設定されている場合、このスキルはその認証情報を検出して使用します。認証情報をコマンドライン引数として渡さないでください。 - 一時的な認証情報をサポート:このスキルは、IAM STS で取得した一時的な AK/SK+Token をサポートします。一時的な認証情報を使用する場合は、
HW_SECURITY_TOKENを設定してください。 - 環境変数の標準:他の Huawei Cloud スキルとの一貫性を保つため、
HW_*プレフィックスを使用します。 - すべてのスクリプトで jq が必要です。hcloud CLI の JSON 出力を解析するために使用します。
- アイドル日数の計算ではタイムゾーンが統一されています — analyze スクリプトと monitor スクリプトの両方で、エポック時刻の計算に
dateコマンドを使用し、UTC オフセットに関する問題を解消しています。 - 監査ログのタイムスタンプはタイムゾーンを考慮します —
Zサフィックスではなく、YYYY-MM-DDTHH:MM:SS+HH:MM形式(例:+08:00)を使用します。Zサフィックスは誤解を招くためです。
よくある問題
| 問題 | 症状 | 簡単な解決方法 |
|---|---|---|
| hcloud がインストールされていない | command not found: hcloud | KooCLI をインストールする |
| jq がインストールされていない | JSON の解析エラー | sudo apt install jq |
| bc がインストールされていない | コスト計算エラー | sudo apt install bc |
| AK/SK が設定されていない | API 401/認証情報エラー | HW_ACCESS_KEY/HW_SECRET_KEY をエクスポートするか、hcloud を対話形式で設定する |
| リージョンが間違っている | ❌ API 返回异常 | 有効なリージョン ID(例:cn-north-4)を使用する |
| 形式が無効 | ❌ 不支持的格式 | --format に text/html/json を指定する |
| API のレート制限 | 429 Too Many Requests | 呼び出しの間に遅延を追加する |