mcpField
H
huawei-cloud-eip-cost-optimizer

huawei-cloud-eip-cost-optimizer

github.com/huaweicloudクラウド・DevOps59200 回インストール2 日前に更新
リポジトリ

huawei-cloud-eip-cost-optimizer について

hcloud CLI で Huawei Cloud の EIP(Elastic Public IP)を照会・分析し、クラウド運用担当者による未使用リソースの特定と費用推定を支援するスキルです。複数リージョンのレポート、監視、監査ログに対応し、スクリプトは読み取り専用で帯域変更や EIP 解放は行いません。

主な機能

  1. 01複数リージョンの EIP 照会と絞り込み
  2. 02未使用 EIP の特定と費用推定
  3. 03テキスト・HTML・JSON レポート生成
  4. 04Webhook またはメールによる監視と通知
  5. 05操作監査ログの記録とエクスポート

活用シーン

  1. 01指定日数以上未バインドの EIP を特定
  2. 02複数リージョンの EIP 状態を集計
  3. 03費用分析と削減提案のレポート作成
  4. 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.md
cli-installation-guide.md
eip-api-guide.md
iam-policies.md
test-vars.json
verification-method.md
scripts/
analyze_idle_eips.sh
check_env.sh
config.sh
eip_audit_log.sh
eip_cost_report.sh
list_eips.sh
monitor_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:listEIP の一覧表示すべての EIP とそのステータスを照会する
vpc:publicIps:getEIP の詳細取得個々の EIP 情報を表示する

ワークフロー

主な手順
  1. 環境確認 → hcloud CLI、jq、認証情報を確認します
  2. EIP の照会 → hcloud CLI を使用してリージョン全体の EIP を一覧表示します
  3. アイドル状態の分析 → アイドルしきい値を超えている未バインドの EIP を特定します
  4. コストレポート → HTML/JSON のコスト分析レポートを生成します
  5. 監視の設定 → アイドル EIP のアラート(Webhook/メール)を設定します
  6. 監査ログ記録 → コンプライアンスのために操作を記録します
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.shHTML/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/jsontext
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

ベストプラクティス

  1. シェルスクリプトのみを使用:すべてのスクリプトは Shell と hcloud CLI を使用します。Python SDK への依存はありません。
  2. 定期的な監視:monitor_idle_eips.sh --setup-cron で毎日の cron ジョブを設定し、アイドル状態の EIP を早期に検出します
  3. コストレポート:eip_cost_report.sh --format html で週次のコストレポートを生成し、最適化の進捗を追跡します
  4. 監査ログ:eip_audit_log.sh を使用して、すべての EIP 操作の監査ログを有効にします
  5. 複数リージョンの一覧表示:list_eips.sh は、リージョンをカンマ区切りで指定する --region cn-north-4,cn-east-3 に対応しており、複数リージョンをまたいだ一覧表示が可能です。注:analyze_idle_eips.sh、eip_cost_report.sh、monitor_idle_eips.sh はそれぞれ単一のリージョンを処理します(複数リージョンを分析する場合は、リージョンごとに実行してください)。
  6. Webhook アラート:アイドル状態の EIP をリアルタイムで通知するように Webhook を設定します
  7. 環境の検証:hcloud CLI と依存関係を確認するため、必ず最初に check_env.sh を実行します
  8. アイドル日数の一貫性:analyze_idle_eips.sh と monitor_idle_eips.sh はどちらも --idle-days パラメーターを使用し、タイムゾーンの処理方法も統一されています

参考資料

ドキュメント説明
IAM Permission Policies必要な権限とポリシー JSON
EIP API GuideEIP API リファレンス(hcloud CLI)
CLI Installation Guidehcloud 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: hcloudKooCLI をインストールする
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呼び出しの間に遅延を追加する

コメント