Communityコーディング&開発github.com

huaweicloud/huawei-cloud-obs-website-host

Huawei Cloud OBS の静的ウェブサイトホスティングをPython SDKで設定し、カスタムドメインを構成します。バケットの静的ウェブサイトホスティングを有効化/修復する際や、インデックスページ/エラーページの設定、カスタムドメイン経由での公開アクセス、Huawei Cloud DNSとの連携が必要な場合に使用します。

huawei-cloud-obs-website-host とは?

このスキルは、Huawei Cloud OBS (Object Storage Service) のバケットに対して静的ウェブサイトホスティングを有効化し、カスタムドメインを登録・構成するためのものです。主な機能は、`setBucketWebsite` によるインデックスドキュメントやエラードキュメントの設定、`setBucketCustomDomain` によるカスタムドメインのバケットへの紐付け、そしてオプションで Huawei Cloud DNS のレコード管理(CNAMEレコードの作成・更新)を含みます。これらの操作は、バンドルされたPythonスクリプト (`scripts/set_obs_website_sdk.py`) によって実行され、実際にクラウド上のリソースに書き込みを行います。本番環境に影響を与える可能性があるため、実行前には必ずユーザーに影響を開示し、明示的な確認を得る必要があります。また、Huawei Cloudのセキュリティコンプライアンスに基づき、デフォルトのOBSバケットドメインはオンラインプレビューに使用できないため、カスタムドメインの設定は必須です。このスキルは、特に中国本土にデプロイする場合のICP登録(网站备案)要件の確認など、リージョン固有の要件にも対応します。さらに、認証情報はCLIフラグ、環境変数、またはローカルの `~/.obsutilconfig` から安全に読み取られ、セッション間で永続化されることはありません。

対応~Claude Code~Codex CLI~Cursor
Part ofMobile
npx skills add https://github.com/huaweicloud/huaweicloud-skills/tree/HEAD/skills/storage/obs/huawei-cloud-obs-website-host

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Huawei Cloud OBS ウェブサイトホスティング

概要

既存の Huawei Cloud OBS バケットを、Huawei Cloud OBS Python SDK を使用して静的ウェブサイトホスティング用に設定し、サイトのカスタムドメインを登録します。

このスキルは、以下のような場合に使用します:

  • OBS 静的ウェブサイトホスティングの有効化または修復
  • インデックスドキュメントまたはエラードキュメントの設定
  • OBS 静的ウェブサイトエンドポイントをバックエンドとするカスタムドメイン経由でのサイト公開
  • カスタムドメインの追加または修復(Huawei Cloud DNS が該当する場合を含む)
  • ホスティングされた OBS サイトにおける 403、404、または DNS 問題の診断

正常な状態とは

このスキルは 書き込み操作 を実行します:バケットに静的ウェブサイトホスティングを有効化し(setBucketWebsite)、そのバケットに必要なカスタムドメインを登録します(setBucketCustomDomain)。ユーザーが要求した場合、DNS レコードの作成/更新も行います。これらの書き込みは、このスキル自身のセッション内でバンドルされたスクリプトによって実行されます。これらはシミュレーションではなく、ユーザーに委譲されるものでもなく、読み取り専用チェックに置き換えられるものでもありません。検証は書き込み 後に 実行され、結果を確認します。

  • バケットは このスキルによって 静的ウェブサイトホスティングが有効化されている。
  • バケットはウェブサイトエンドポイントから index.html を提供できる。
  • 匿名ユーザーはウェブサイトコンテンツを読み取れる。
  • 存在しないパスは、設定されたエラーページまたはクリーンな 404 を返す。
  • このスキルによって カスタムドメインが登録され、DNS を通じて OBS ウェブサイトエンドポイントに解決される。カスタムドメインは 必須 です。セキュリティコンプライアンス要件により、デフォルトの OBS バケットドメインはオンラインオブジェクトプレビューに使用できません。
  • カスタムドメインがバケットに登録され、正しく解決されるまで、セットアップは完了したとは見なされません。
  • 通常のバケット API エンドポイントではなく、OBS ウェブサイトエンドポイントが使用されます。
  • 403 の一般的な原因は 2 つです:バケットまたはオブジェクトで匿名/公開読み取りが有効になっていない、または OBS 操作に使用される AK/SK に必要な IAM 権限が不足している。
  • 404 の原因は通常、インデックスドキュメント名またはアップロードパスが間違っていることです。

セキュリティコンプライアンス:カスタムドメインの要件

Huawei Cloud のセキュリティコンプライアンス要件に基づき、OBS バケットのデフォルトドメイン名(<bucket_name>.obs.<region>.myhuaweicloud.com)は、バケット内のオブジェクトのオンラインプレビューに使用することが 禁止 されています。したがって、静的ウェブサイトホスティングにはカスタムドメインが 必須 です。

ユーザーがカスタムドメインを準備していない場合:

  1. まずユーザーに、ウェブサイトがどこにデプロイされるか(デプロイリージョン/管轄)、およびドメインがどこで登録されるかを尋ねます。リージョン固有の要件(ICP 登録など)は、デプロイリージョンが実際にそれらを必要とする場合にのみ適用します。
  2. ユーザーを Huawei Cloud ドメイン登録サービス または他の一般的なドメイン登録サイトに誘導して、ドメインを登録するよう指示します。
  3. (かつその場合に限り)ユーザーのデプロイリージョンが中国本土である場合、ドメインはウェブサイトホスティングに使用する前に ICP 登録(网站备案) も完了する必要があります。中国本土以外へのデプロイの場合、このステップは不要です。これを押し付けてはいけません。
  4. リージョンチェック、および該当する場合はドメイン登録/登録が確認された後にのみ、静的ウェブサイトホスティングの設定を続行します。

重要: カスタムドメインの前提条件が確認されるまで、静的ウェブサイトホスティングの設定を続行しないでください。テスト環境であっても、デフォルトの OBS ドメインはウェブサイトアクセスの有効な代替手段ではありません。

必要な入力

変更を行う前に、これらを収集します:

  • region
  • bucket_name
  • custom_domain(必須 — 上記の「セキュリティコンプライアンス」セクションを参照)
  • index_document(オプション、デフォルト:index.html)
  • error_document(オプション)
  • dns_zone または DNS アカウントコンテキスト(オプション;ユーザーが今回の実行で Huawei Cloud DNS の変更を希望する場合のみ必要)

静的ウェブサイトファイルはユーザーによって既にアップロードされているものとします。

依存関係

このスキルは、以下のランタイム/ツールコンポーネントに依存します:

  • Python 3.10+(scripts/set_obs_website_sdk.py および scripts/verify_obs_website.py に必要)
  • Huawei OBS Python SDK パッケージ:esdk-obs-python
  • obsutil(.obsutilconfig 認証情報設定の生成と管理用)
  • Huawei Cloud AK/SK 認証情報(.obsutilconfig から)
  • OBS エンドポイントおよびウェブサイトエンドポイントへのネットワークアクセス
  • hcloud CLI(このスキルが Huawei Cloud DNS レコード操作を管理する場合にのみ必要)
  • dig / nslookup(オプション)

インストールコマンド:

pip install esdk-obs-python

機能と権限の範囲

このスキルは、その正確な機能と権限の範囲を宣言します。これにより、呼び出し元やレビュー担当者は、呼び出す前に何ができて何ができないかを知ることができます:

書き込み可能なもの(変更可能):

  • ユーザー指定の OBS バケットのみ のウェブサイト設定(setBucketWebsite:インデックスドキュメント、エラードキュメント)。scripts/set_obs_website_sdk.py 経由。
  • その 同じバケット のカスタムドメイン結合(setBucketCustomDomain)。オプションの HTTPS 証明書結合を含む。
  • Huawei Cloud DNS ゾーン内の DNS レコード。ユーザーが今回の実行で Huawei Cloud DNS の変更を明示的に要求し、ゾーンを提供/指定した場合のみ(hcloud DNS CreateRecordSet)。
  • これらは本番環境に影響を与える変更です:カスタムドメインのライブウェブトラフィックに影響を与え、バケットコンテンツを公にアクセス可能にする可能性があります。各書き込みの前に警告が表示されます(「ワークフロー」を参照)。

読み取り対象の認証情報(およびそのソース):

  • scripts/set_obs_website_sdk.py と scripts/verify_obs_website.py は、優先順位に従って認証情報を読み取ります:(1)CLI フラグ --access-key/--secret-key/--security-token、(2)環境変数 HW_ACCESS_KEY / HW_SECRET_KEY / HW_SECURITY_TOKEN、(3)ローカル ~/.obsutilconfig。hcloud は DNS 操作用に独自の設定済み CLI プロファイルを使用します。
  • 認証情報の 存在 のみが報告されます;値は決して印刷、エコー、ディスクへの書き込みは行われません。

ネットワークアクセス:

  • OBS サービスエンドポイント(https://obs.<region>.myhuaweicloud.com)、OBS ウェブサイトエンドポイント、および(要求された場合のみ)設定されたリージョンの Huawei Cloud DNS サービスのみ。

決して行わないこと:

  • バケット内のオブジェクト/コンテンツのアップロード、削除、または変更は決して行いません。
  • ユーザーが指定したもの以外のバケット、ドメイン、DNS ゾーン、または認証情報には決して触れません。
  • cron ジョブ、スタートアップスクリプト、または状態ファイルを作成せず、セッション間で何も永続化しません(下記の「セッション動作」を参照)。
  • 読み取った認証情報を第三者に公開または転送することは決してありません。

セッション動作

このスキルは 単一セッション、ワンショット の操作を実行します:要求された OBS/DNS API 呼び出しを現在の実行中に実行し、その後終了します。cron ジョブ、起動スクリプト、バックグラウンドデーモン、または状態ファイルを作成 せず、後続の実行のために設定を永続化 しません。各呼び出しは独立しており、ユーザーによってトリガーされる必要があります;何も自動的にスケジュールされたり繰り返されたりしません。実行時間の長い、または外部でスケジュールされたステップ(例:DNS 伝播の待機)は、このスキルによってジョブとしてインストールされるのではなく、ユーザーが確認するものとして説明されます。

認証情報の開示と確認

scripts/set_obs_website_sdk.py は、環境またはローカルの ~/.obsutilconfig からクラウド認証情報を読み取り、リモートのバケット/DNS 設定を変更するため、実行には実際のセキュリティ上の影響があります。実行する前に、以下のことを行う必要があります:

  1. ユーザーに、スクリプトが CLI フラグ / 環境変数 / ~/.obsutilconfig から認証情報を読み取り、リモートバケットのウェブサイト設定とカスタムドメイン(および要求された場合は DNS)を変更することを開示します。
  2. バケット名、カスタムドメイン、DNS ゾーン(ある場合)が正しいこと、および変更を許可することをユーザーから確認を得ます。
  3. その確認後にのみスクリプトを実行します。

hcloud CLI リファレンス

hcloud CLI または obsutil のインストールと設定が必要な場合は、references/cli-installation-guide.md を読み込んでください。 OBS 静的ウェブサイトのカスタムドメイン用の DNS CNAME レコードを作成または管理する場合は、references/hcloud-dns-obs-website.md を読み込んでください(hcloud DNS CreateRecordSet コマンドを使用したステップバイステップガイド)。

セキュリティに関する注意:

  • スクリプトやチェックインされたファイルに AK/SK をハードコードしないでください。
  • SDK スクリプトには環境変数を、CLI 使用には安全なローカルプロファイルストレージを優先して使用してください。

obsutil 設定の依存関係

obsutil のインストールまたは .obsutilconfig のセットアップガイダンスが必要な場合は、references/cli-installation-guide.md を読み込んでください。

Python SDK ヘルパースクリプト(scripts/set_obs_website_sdk.py)は、デフォルトで以下のソースから認証情報を読み取ります:

  1. CLI フラグ(--access-key、--secret-key、--security-token)
  2. 環境変数(HW_ACCESS_KEY、HW_SECRET_KEY、HW_SECURITY_TOKEN)
  3. .obsutilconfig

すべてのソースで ak/sk が空の場合、スクリプトは停止し、ユーザーに .obsutilconfig に不足しているキーを入力するよう(または CLI/env 認証情報を提供するよう)求める必要があります。

認証情報チェックルール:

  • キー(ak、sk、securitytoken)の存在/不在のみを報告します。
  • チェック中に認証情報の値を決して印刷しないでください。
  • .obsutilconfig からの完全な行をコンソールに決して印刷しないでください。
  • コンソール出力をモデルコンテキストとして扱います;漏洩した値はセキュリティインシデントです。

安全なチェックの例(ステータスのみ、シークレット値なし):

Linux/macOS:

CFG="${HOME}/.obsutilconfig"
if [ ! -f "$CFG" ]; then
  echo "obsutilconfig_exists=false"
  echo "ak_configured=false"
  echo "sk_configured=false"
  echo "securitytoken_configured=false"
else
  awk -F= '
    BEGIN { ak=0; sk=0; st=0 }
    /^[[:space:]]*#/ { next }
    /^[[:space:]]*(ak|access_key_id)[[:space:]]*=/ { if ($2 ~ /[^[:space:]]/) ak=1 }
    /^[[:space:]]*(sk|secret_access_key)[[:space:]]*=/ { if ($2 ~ /[^[:space:]]/) sk=1 }
    /^[[:space:]]*(securitytoken|security_token|token)[[:space:]]*=/ { if ($2 ~ /[^[:space:]]/) st=1 }
    END {
      print "obsutilconfig_exists=true"
      print "ak_configured=" (ak ? "true" : "false")
      print "sk_configured=" (sk ? "true" : "false")
      print "securitytoken_configured=" (st ? "true" : "false")
    }
  ' "$CFG"
fi

Windows(PowerShell):

$cfg = Join-Path $HOME ".obsutilconfig"
if (-not (Test-Path $cfg)) {
  "obsutilconfig_exists=false"
  "ak_configured=false"
  "sk_configured=false"
  "securitytoken_configured=false"
} else {
  $lines = Get-Content $cfg
  $ak = $false; $sk = $false; $st = $false
  foreach ($line in $lines) {
    if ($line -match '^\s*#') { continue }
    if ($line -match '^\s*(ak|access_key_id)\s*=\s*(\S.*)$') { $ak = $true }
    if ($line -match '^\s*(sk|secret_access_key)\s*=\s*(\S.*)$') { $sk = $true }
    if ($line -match '^\s*(securitytoken|security_token|token)\s*=\s*(\S.*)$') { $st = $true }
  }
  "obsutilconfig_exists=true"
  "ak_configured=$ak"
  "sk_configured=$sk"
  "securitytoken_configured=$st"
}

使用してはいけないもの:

  • cat ~/.obsutilconfig
  • grep -E "ak|sk|token" ~/.obsutilconfig

スクリプトの使用目的

バンドルされたスクリプトは、それらが構築されたタスクに対してデフォルトで使用します。これらのスクリプトは、このスキルが宣伝する 書き込み操作 を実行します。読み取り専用の検証ツールではありません:

  • scripts/set_obs_website_sdk.py は、指定されたバケットにバケットウェブサイト設定(setBucketWebsite)を 書き込み、カスタムドメイン(setBucketCustomDomain)を 登録 します。OBS 静的ウェブサイトホスティング設定を有効化、修復、または変更するタスクがある場合は常にこれを使用します。「機能と権限の範囲」で宣言されているように認証情報を読み取り、書き込み前にユーザーの確認が必要です(「認証情報の開示と確認」を参照)。
  • scripts/verify_obs_website.py は、公開されたウェブサイトエンドポイント(DNS、HTTP、HTTPS)を 検証 し、読み取り専用の SDK バケット/リージョンチェックを実行します。ウェブサイト設定の変更後、およびユーザーがサイトに到達可能かどうかを尋ねた場合や、403/404 の動作をトラブルシューティングする場合に使用します。
  • スクリプト自体が壊れており、パッチを適用する必要がある場合を除き、これらのスクリプトをアドホックなワンオフコードで置き換えないでください。壊れたスクリプトにパッチを適用することは、OBS SDK 呼び出しを直接記述する唯一のケースです。
  • スクリプトを使用して、認証情報の処理、SDK オブジェクトの構築、および検証動作を実行間で一貫させてください。

ワークフロー

  1. Python ランタイムと OBS SDK が利用可能であることを確認します(不足している場合は pip install esdk-obs-python を実行)。
  2. カスタムドメインの前提条件を確認します(「セキュリティコンプライアンス」セクションを参照):
    • custom_domain がユーザーによって提供されていることを確認します。
    • リージョン固有の要件を適用する前に、サイトがどこにデプロイされるか(リージョン/管轄)をユーザーに尋ねます。ユーザーがドメインを持っておらず、デプロイリージョンが中国本土である場合、Huawei Cloud ドメイン登録 でドメインを登録し、ICP 登録(网站备案) を完了するようガイドします。中国本土以外へのデプロイの場合は、ICP 登録を課さないでください。ここで停止し、ユーザーがこのステップを完了するのを待ちます。
    • ユーザーが Huawei Cloud DNS または外部プロバイダーで DNS を管理しているかどうかを確認します。
    • 今回の実行の一部として Huawei Cloud DNS の変更が含まれる場合は、hcloud がインストールされ、認証されていることを確認します。
    • DNS が Huawei Cloud 外または今回の実行外で管理されている場合は、先に進む前にその制約を明示的に収集します。
  3. 要求されたリージョンにバケットが存在することを確認します(下記の「バケットの存在とリージョンチェック方法」を使用)。
  4. 呼び出し元にバケットのウェブサイト設定を更新する権限があることを確認します。
  5. ウェブサイトファイルに対して匿名読み取りが許可されていることを確認します(下記の「匿名読み取りチェック方法」を使用)。
  6. ウェブサイトコンテンツオブジェクト(index.html、アセットなど)をアップロードしたり変更したりしないでください。コンテンツは既にバケットに存在するものとします。
  7. 書き込み前に確認します。 次のステップでクラウド認証情報(環境変数 / ~/.obsutilconfig)を読み取り、リモートバケットのウェブサイト設定とカスタムドメイン結合(および要求された場合は DNS)を変更すること、およびこれらがライブトラフィックに影響を与える本番環境向けの変更であることをユーザーに伝えます。確認後にのみ進みます。次に、--custom-domain <domain> を指定して scripts/set_obs_website_sdk.py を実行します(index_document が提供されていない場合は index.html を使用します)。
    • このスクリプトは SDK オブジェクトの構築を適切に行うために存在します...

(翻訳は原文の完全性を保つためにここで終了します。原文が途切れているため、それ以降の翻訳は不可能です。)

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

huaweicloud/huawei-cloud-dws-io-diag

DWS cluster I/O overload root cause diagnosis skill, based on KooCLI v3.2.0+ and DWS Autopilot MCP Server. Automatically collects I/O metrics, analyzes root causes (customer-side / system-side) via three-stage decision tree, and outputs a standardized diagnosis report. Applicable to DWS cluster I/O usage too high, I/O alarms, disk I/O load anomaly scenarios. Trigger words: "I/O高", "I/O告警", "I/O诊断", "I/O过载", "IO高", "IO告警", "IO诊断", "IO过载", "磁盘IO负载异常", "util打满", "await高", "high I/O", "I/O alarm", "I/O diagnosis"

huaweicloud/huawei-cloud-ecs-manage

Use when managing Huawei Cloud ECS (Elastic Cloud Server / 弹性云服务器) instances — lifecycle management (create / start / stop / restart / delete), day-to-day change operations (resize / reinstall OS / reset password / replace keypair / bind & unbind EIP / change security group / add & remove NIC / attach & detach volume), instance querying, quota/flavor/image inspection, mandatory async-job polling after every write, and multi-step root-cause diagnosis of ECS instance creation failures (quota → flavor → image → network → keypair → disk). Provides 23 huawei_* actions: huawei_list_ecs_instances, huawei_get_ecs_instance, huawei_list_ecs_flavors, huawei_list_ecs_images, huawei_list_ecs_quotas, huawei_diagnose_ecs_create_failure, huawei_analyze_ecs_health, huawei_create_ecs_instance, huawei_start_ecs_instance, huawei_stop_ecs_instance, huawei_restart_ecs_instance, huawei_delete_ecs_instance, huawei_resize_ecs_instance, huawei_reinstall_ecs_os, huawei_reset_ecs_password, huawei_replace_ecs_keypair, huawei_bind_ecs_eip

huaweicloud/huawei-cloud-ges-graph

Provides access guide for Huawei Cloud Graph Database GES service. Covers Cypher queries, GQL queries, schema/label management, summary info queries, graph data editing and more. Use this skill when users want to operate Huawei Cloud graph database GES service via terminal.

huaweicloud/huawei-cloud-obs-upload

Upload a local file or directory to a specified Huawei Cloud OBS (Object Storage Service) bucket with obsutil, and set up a scheduled/periodic upload task (crontab) that syncs a local directory to an OBS bucket. Also lists OBS buckets with storage capacity and object count. Use this skill when the user wants to: (1) upload a specific local file or directory to a named OBS bucket, (2) set up a scheduled/periodic upload task that automatically syncs a local directory to a named OBS bucket, (3) list their OBS buckets and check capacity and object count. Triggers include: user mentions "upload to OBS bucket", "上传文件到OBS", "上传目录到OBS", "定时上传到OBS", "目录同步到OBS桶", "OBS scheduled upload", "OBS周期上传", "OBS bucket capacity check", "OBS桶容量查询". Generic phrases such as "object storage", "upload file" or "upload directory" alone are NOT sufficient to trigger this skill.

関連スキル