huawei-cloud-cdn-dns-resolution-diagnosis について
huawei-cloud-cdn-dns-resolution-diagnosisは、Huawei Cloud CDNドメインのDNS解決を診断する読み取り専用スキルです。想定CNAMEを確認し、解決されたIPを調べて帰属を検証し、対処案付きのレポートを作成します。
主な機能
- 01ドメイン権限の確認とCNAME取得
- 02DNS解決の調査とIP収集
- 03最大20件のIP帰属確認
- 04部分解決による誤検知の識別
- 05診断レポートと対処案の作成
活用シーン
- 01CDNのCNAMEが反映されない場合の調査
- 02DNS解決の失敗やタイムアウトの調査
- 03解決IPがHuawei Cloud CDNに属するかの確認
- 04一部地域での解決結果の評価
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ huaweicloud/ huaweicloud-skills --skill huawei-cloud-cdn-dns-resolution-diagnosisインストール後、Claude Code で/huawei-cloud-cdn-dns-resolution-diagnosisを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.markdownlint.jsonreferences/acceptance-criteria.mdcli-installation-guide.mddataflow-diagram.mdiam-policies.mdprohibited-operations.mdrelated-apis.mdtask-dns-resolve.mdtask-ip-attribution.mdtask-permission-check.mdtask-report-generation.mdtroubleshooting.mdverification-method.mdscripts/dns_resolve.py詳細
CDN DNS 解決診断
概要
このスキルは、CDN ドメインの DNS 解決に関する問題を診断します。hcloud CLI を介して CDN ドメインの詳細を照会し、期待される CNAME を取得します。また、scripts/dns_resolve.py(dnspython)を介してドメインの実際の DNS 解決を調査し、IP リストを収集します。さらに、ShowIpInfo/v2 を介して IP の帰属を確認し、ドメインが正しく Huawei Cloud CDN に解決されているかを判定します。これにより、DNS 設定の異常、解決が反映されない問題、誤検知などの根本原因をユーザーが特定しやすくなります。
主な機能:
- ドメインの権限を検証し、CNAME を取得(ShowDomainDetailByName)
- DNS 解決を調査して IP リストを取得(
python scripts/dns_resolve.py。{result, data, error_msg}エンベロープ内のdata.resolved_ipsに JSON 出力) - IP の帰属を確認(ShowIpInfo/v2、最大 20 個の IP)
- 誤検知を特定(部分的な解決の場合は、複数リージョンからの調査を提案)
- 修正案を含む構造化された診断レポートを作成
ツール:hcloud CLI(KooCLI)+ python scripts/dns_resolve.py(dnspython >= 2.1)
調査タイムアウト:10 秒(dns_resolve.py --timeout 10 で適用)
IP 照会上限:20 個の IP
基本方針:読み取り専用の診断であり、設定は変更しません
対象範囲
対象範囲内:このスキルでは、CDN ドメインの DNS 解決に関する問題のみを診断します。対象には以下が含まれます。
- ドメインが現在のアカウントに属していることを検証し、期待される CNAME を取得(
ShowDomainDetailByName) - ドメインの実際の A レコード解決を調査(
python scripts/dns_resolve.py、dnspython) - 解決された IP が Huawei Cloud CDN に属しているかを確認(
ShowIpInfo/v2、呼び出しあたり最大 20 個の IP) - 「部分的な解決/誤検知」のシナリオを検出し、修正案を含む構造化された診断レポートを作成
対象範囲外:
- ❌ 書き込み/変更/削除操作は行いません(このスキルは読み取り専用です。⛔ 禁止されている操作に記載された 55 件の禁止操作を参照してください)
- ❌ DNS レコードの変更、CDN 設定の変更、キャッシュの更新/プリフェッチは行いません
- ❌ その他の領域(HTTPS 証明書、オリジン取得の失敗、ドメイン所有権の検証)は診断しません(関連スキルのセクションから引き継いでください)
- ❌ 設定変更が必要なリクエストには対応しません(拒否し、コンソールまたは hcloud CLI の手動操作を案内してください)
対象となるシナリオ:
- DNS 解決の失敗/CNAME が反映されない/解決タイムアウト
- ドメインが Huawei Cloud 以外の IP に解決される/解決結果が期待される CNAME と一致しない
- DNS 設定の異常のトラブルシューティング、誤検知の調査(一部リージョンでの切り替え)
トリガー
トリガーとなる語句:「DNS解析诊断」、「DNS异常」、「域名解析失败」、「CDN解析异常」、「DNS配置」、「DNS diagnosis」、「resolution diagnosis」、「CDN 域名解析」、「DNS resolution issue」。
ユーザー発話の例 — 次のような発話があった場合にこのスキルを使用します。
- 「帮我看看 www.example.com 为什么解析不到华为云 CDN」(www.example.com が Huawei Cloud CDN に解決されない理由を調べてください)
- 「CNAME 配置了但没生效,域名还是没解析到 CDN」(CNAME を設定しましたが反映されず、ドメインがまだ CDN に解決されません)
- 「DNS 解析超时了,怎么排查」(DNS 解決がタイムアウトしました。どう調査すればよいですか)
- 「解析出来的 IP 不是华为云的,是什么问题」(解決された IP が Huawei Cloud のものではありません。何が問題ですか)
- 「这个域名 DNS 解析异常,帮我诊断一下」(このドメインの DNS 解決に異常があります。診断してください)
ユーザーのリクエストがニアミスのシナリオ(証明書/オリジン/所有権/設定変更)に該当する場合は、対応するスキルに引き継ぐか、依頼を断ってください。詳しくはニアミス/使用しないでくださいを参照してください。
ニアミス/使用禁止
次のシナリオでは、このスキルを使用しないでください。以下のとおり対応してください。
| ユーザーのリクエスト | 適切な対応 |
|---|---|
| HTTPS 証明書エラー/期限切れまたは無効な証明書/HTTPS アクセス障害(DNS は正しく名前解決される) | huawei-cloud-cdn-certificate-diagnosis に引き継ぎます |
| ページが 502/504 を返す/オリジン取得に失敗する(すでに Huawei Cloud CDN に名前解決されている) | huawei-cloud-cdn-origin-diagnosis に引き継ぎます |
| CDN にドメインを追加/登録できない/所有権の確認に失敗する | huawei-cloud-cdn-domain-ownership-verification に引き継ぎます |
| CDN 設定の変更、ドメインの削除、キャッシュの更新/プリウォーミング、その他の書き込み操作を求めるユーザーのリクエスト | 拒否し、CDN コンソールまたは手動での hcloud CLI の使用を案内します(このスキルは読み取り専用です) |
| DNS レコード(CNAME/A レコード)の変更を求めるユーザーのリクエスト | 拒否し、DNS サービスコンソールを案内します |
他のスキルと連携した複数方向の診断については、関連スキルを参照してください。関連する 3 つのスキルはそれぞれ独立した読み取り専用スキルであり、任意の順序で 連続して使用できます。
⛔ 禁止されている操作(セキュリティ上の制約)
このスキルでは、ユーザーのリクエストにかかわらず、GET 以外の CDN 操作(書き込み/変更/削除)をすべて厳しく禁止しています。
禁止操作の合計:55 件(POST 24 件+PUT 25 件+DELETE 6 件)。
禁止されている GET 以外の操作 55 件すべてとリスクの説明については、references/prohibited-operations.md を参照してください。
禁止操作の代表例(全リストは参照ドキュメントに記載):
| 禁止操作 | API/コマンド | 理由 |
|---|---|---|
| ❌ ドメインの作成 | CreateDomain (v1/v2), CreateDomainByDuplicate | 書き込み操作であり、本番リソースを作成します |
| ❌ ドメインの削除 | DeleteDomain (v1/v2) | 元に戻せず、CDN からドメインを削除します |
| ❌ ドメイン設定の変更 | UpdateDomainFullConfig (v1/v2), UpdateDomainOrigin, UpdateCacheRules など | 書き込み操作であり、本番トラフィックに影響する可能性があります |
| ❌ ドメインの有効化/無効化 | EnableDomain (v1/v2), DisableDomain (v1/v2) | 本番トラフィックに影響します |
| ❌ 課金モードの変更 | SetChargeModes | 金銭的な影響があり、明示的な承認が必要です |
| ❌ 更新/プリウォーミングタスクの作成 | CreateRefreshTasks (v1/v2), CreatePreheatingTasks (v1/v2) | 書き込み操作であり、エッジキャッシュに影響します |
| ❌ DNS 設定の変更 | あらゆる DNS 書き込み操作(例:nsupdate) | 書き込み操作であり、グローバルな名前解決に影響する可能性があります |
ユーザーから禁止操作を求められた場合は、必ず拒否し、次のように伝えてください。 「セキュリティ上の制約により、このスキルでは書き込み/削除/変更操作を実行できません。このスキルは DNS 名前解決の診断専用です。設定を変更する場合は、Huawei Cloud CDN コンソール、DNS サービス コンソールを使用するか、hcloud CLI を手動で実行してください。禁止操作 55 件の全リストは references/prohibited-operations.md に記載されています。」
アーキテクチャ
CDN DNS Resolution Diagnosis
├── hcloud configure list (Credential validation)
├── ShowDomainDetailByName (Domain permission validation + obtain CNAME)
├── python scripts/dns_resolve.py (DNS resolution probe, JSON output)
│ --domain <domain_name>
│ [--timeout 10]
│ ├── data.resolved_ips non-empty → Continue to Step 3
│ └── data.resolved_ips empty / error → Not resolved, generate report
├── ShowIpInfo/v2 --ips=<IP1,IP2> (IP attribution check, up to 20 IPs)
│ ├── All belongs=true → Resolved to Huawei Cloud
│ ├── All belongs=false → Not resolved to Huawei Cloud
│ └── Mixed belongs → Partial resolution + false positive prompt
└── Generate diagnosis report
API 呼び出しの予算
| 手順 | API/コマンド | レート制限 | 推定所要時間 |
|---|---|---|---|
| 1 | hcloud configure list | — | <1s |
| 2 | ShowDomainDetailByName | — | <2s |
| 3 | python scripts/dns_resolve.py | — | ≤10s |
| 4 | ShowIpInfo/v2 | — | <2s |
合計推定所要時間:< 15 秒
KooCLI コマンド形式の標準
すべての hcloud CDN コマンドは、次の標準形式に従います。
hcloud CDN <Operation> --cli-region=<region> [--parameter=value ...]
形式のルール:
- サービス名:
CDN(大文字) - 操作名:PascalCase(例:
ShowDomainDetailByName、ShowIpInfo/v2) - リージョンパラメーター:
--cli-region=<region>(指定を推奨。CDN では cn-north-1 を使用) - パラメーター形式:
--key=value(等号を使用し、スペースは入れません)
例:
# Correct
hcloud CDN ShowDomainDetailByName --cli-region=<region> --domain_name=www.example.com
# Incorrect (space-separated)
hcloud CDN ShowDomainDetailByName --cli-region <region>
前提条件
前提条件の確認:Huawei Cloud CLI(hcloud / KooCLI)3.2.0 以上が必要です
hcloud versionを実行してバージョンを確認してください。インストールされていない場合、またはバージョンが古い場合は、 references/cli-installation-guide.mdを参照してください。
hcloud version
前提条件の確認:Python 3.8 以上および dnspython 2.1 以上が必要です DNS 解決プローブは
python scripts/dns_resolve.pyを通じて実行され、dnspythonライブラリ(2.1 以上)に依存します。インポートに失敗すると、プローブは終了コード 2 とdata.error.reason = "missing_library"の JSON 出力を返します。pip install dnspython>=2.1でインストールしてください。 references/cli-installation-guide.mdを参照してください。
python -c "import dns.resolver; print('dnspython ok')"
前提条件の確認:hcloud の認証情報が設定されている必要があります
CDN 操作を実行する前に、hcloud の認証情報が設定されていることを必ず確認してください。
hcloud configure list有効な認証情報がない場合は、処理を停止し、認証情報の設定をユーザーに案内してください。
⚠️ hcloud のパラメーター形式に関する要件
hcloud(KooCLI)のすべてのパラメーターは
--param=value形式(等号で接続)にする必要があります。スペースで区切る形式には対応していません。✅ 正しい例:
hcloud CDN ShowDomainDetailByName --cli-region=<region>❌ 誤った例:
hcloud CDN ShowDomainDetailByName --cli-region <region>
⚠️ CDN API のリージョン要件
CDN API は
cn-north-1(北京)とap-southeast-1(シンガポール)の 2 つのリージョンのみをサポートします。 クエリ結果はリージョンに依存しません(CDN はグローバルサービスです)。 推奨:cn-north-1を使用してください。
⚠️ IP クエリの上限
ShowIpInfo/v2は、1 回の呼び出しで最大 20 件の IP をクエリします。dns_resolve.pyがdata.resolved_ipsに 20 件を超える IP を返した場合、先頭の 20 件のみが取得され、レポートに記載されます。
認証
前提条件の確認:Huawei Cloud の認証情報が必要です
セキュリティルール(必ず遵守してください):
AK/SK の値を読み取る、エコーする、または出力することは禁止されています
会話内でユーザーに AK/SK を直接入力するよう求めることは禁止されています
hcloud configure setを使用して認証情報の値を平文で渡すことは禁止されています会話内でユーザーから直接提供された AK/SK を受け入れることは禁止されています
環境変数または設定済みの CLI 設定ファイルからのみ認証情報を読み取ることが許可されています
⚠️ 重要:ユーザーから提供された認証情報の取り扱い
ユーザーが AK/SK を直接提供しようとした場合(例:「私の AK は xxx、SK は yyy です」):
直ちに停止してください。コマンドを実行してはいけません
丁寧に断り、次のメッセージを返してください:
アカウントのセキュリティを守るため、Huawei Cloud のアクセスキー ID とアクセスキーシークレットを会話内で直接共有しないでください。 設定が完了したら、もう一度リクエストしてください。
- 認証情報が設定されるまで、Huawei Cloud の操作を続行してはいけません
CLI 設定を確認します:
hcloud configure list出力に有効な設定(AK/SK、IAM など)が含まれているか確認してください。
有効な認証情報がない場合は、ここで処理を停止してください。
IAM 権限ポリシー
IAM ユーザーに必要な権限が付与されていることを確認してください。詳細はreferences/iam-policies.mdを参照してください。
最低限必要な権限:
cdn:*:query*— このスキルで使用するすべての CDN クエリクラスアクション(ListDomains/v2、ShowDomainDetailByName、ShowIpInfo/v2)cdn:configuration:queryDomains— CDN ドメインの一覧表示(ワイルドカードと併せて明示的に記載)
ShowIpInfo/v2(IP 帰属情報)はクエリクラスの読み取りインターフェースであり、cdn:*:query*の対象です。IP 情報専用のアクションは別途必要ありません。
コアコマンド
このスキルで使用するすべての hcloud CDN コマンドとプローブコマンドのクイックリファレンスです。
| コマンド | 目的 | 主なパラメーター |
|---|---|---|
hcloud configure list | 認証情報の設定を確認する | なし |
hcloud CDN ShowDomainDetailByName --cli-region=<region> --domain_name=<domain> | ドメインの権限を検証し、CNAME を取得する | --domain_name |
python scripts/dns_resolve.py --domain <domain_name> [--timeout 10] | DNS 解決プローブ。{result, data, error_msg} の形式で JSON を出力し、data.resolved_ips、data.duration_ms、data.error を含みます | --domain(必須)、--timeout(デフォルトは 10) |
hcloud CDN ShowIpInfo/v2 --cli-region=<region> --ips=<IP1,IP2> | IP の帰属先を照会する(最大 20 個の IP) | --ips |
注:
- すべての hcloud コマンドで
--cli-region=<region>を使用してください。 dns_resolve.pyは--timeout 10(デフォルト)によって 10 秒のタイムアウトを適用します。標準出力に単一の JSON オブジェクトを返します({result, data, error_msg}でラップされ、業務フィールドはdata内にあります)。- ShowIpInfo/v2 の
--ipsパラメーターには、英語のカンマで区切った複数の IP を指定でき、最大 20 個まで指定できます。 dns_resolve.pyのdata.resolved_ipsが 20 個を超える場合は、先頭の 20 個のみを照会し、その旨をレポートに記載してください。
パラメーターの確認
診断を実行する前に、以下のパラメーターをユーザーに確認してください。
| パラメーター | 必須 | 説明 | デフォルト | 例 |
|---|---|---|---|---|
domain_name | はい | 診断対象の CDN 高速化ドメイン | なし | www.example.com |
--cli-region | はい | Huawei Cloud リージョン | cn-north-1 | cn-north-1 |
ユーザー確認チェックリスト:
- 対象ドメインが指定されている
- 読み取り専用の診断操作であることをユーザーが理解している
-
dns_resolve.pyプローブが 10 秒のタイムアウトを適用することをユーザーが理解している - IP の帰属先照会が 20 個までであることをユーザーが理解している
コアワークフロー
診断を開始する前に、対象ドメインが必要です。
- ユーザーが対象ドメインを指定していない場合は、ドメイン名を尋ね、返答を待ってから開始してください。
- ユーザーがドメインを知らない場合、または検索を依頼した場合に限り、
hcloud CDN ListDomains/v2を使ってアカウントのドメイン一覧を表示し、ユーザーに選択してもらってください。- ユーザーが明示的に指定したドメインがない状態で、診断を開始してはいけません。ドメインを推測したり、例やデフォルトのドメインに置き換えたり、自分で一覧からドメインを選んだりしないでください。
手順 1:認証情報の検証とドメイン権限の確認
hcloud の認証情報が利用可能か確認し、ShowDomainDetailByName を使ってドメインが現在のアカウントに属していることを検証すると同時に、CNAME を取得します。
📄 詳細な手順 → references/task-permission-check.md
手順 2:DNS 解決プローブ
python scripts/dns_resolve.py --domain <domain_name> [--timeout 10] を使ってドメインを解決し、{result, data, error_msg} の形式でラップされた JSON 内の data.resolved_ips フィールドを解析して、実際の IP リストを取得します。
📄 詳細な手順 → references/task-dns-resolve.md
手順 3:IP の帰属先確認
ShowIpInfo/v2 を使って IP の帰属先を照会し、ドメインが Huawei Cloud CDN に解決されているかどうかを判定します。
📄 詳細な手順 → references/task-ip-attribution.md
手順 4:診断レポートの作成
プローブ結果を集約し、構造化されたテキスト形式の診断レポートを作成します。
📄 詳細な手順 → references/task-report-generation.md
手順 5:レポートと修正案の提示
診断レポートをユーザーに提示し、ステータスに応じた具体的な修正案(CNAME の設定、DNS の反映待ち、複数リージョンからのプローブなど)を提供します。
関連スキル(多方向診断)
このスキルは DNS 解決の診断に重点を置いています。同じ CDN ドメインでも、ほかの方向で問題が発生している場合があります。このスキルによる診断が完了した場合、またはユーザーの問題が以下のいずれかの方向に関係する場合は、該当するスキルを参照して、ほかの方向の同期診断を実施してください。
| 方向 | 関連スキル | 使用する状況 |
|---|---|---|
| 🔒 HTTPS 証明書 | huawei-cloud-cdn-certificate-diagnosis | DNS は正しく解決されるものの、ブラウザーで証明書エラーや証明書の期限切れ/無効が報告される場合、または HTTPS でアクセスできない場合 |
| ✅ ドメイン所有権の確認 | huawei-cloud-cdn-domain-ownership-verification | ドメインを CDN に追加できない/アクセスできない場合、または所有権の確認に失敗する場合(DNS TXT/確認ファイル) |
| 🔄 オリジン(回源) | huawei-cloud-cdn-origin-diagnosis | DNS は Huawei Cloud CDN に解決されるものの、ページで 502/504 が返される場合、またはオリジンへのプルに失敗する場合 |
使用の流れ:DNS 診断レポートの提供後、ユーザーの問題が上記のいずれかの行にも該当する場合(例:HTTPS でアクセスできない、ドメイン所有権を確認できない、オリジンへのプルエラーが発生する)、診断を完了する前に、該当する方向のスキルを呼び出してください。3 つのスキルは独立しており、読み取り専用です。任意の順番で連携して使用できます。
相互参照に関する注意:
- このスキルの
dns_resolve.pyはホストのシステム DNS リゾルバーを使用し、--resolver引数は公開していません。特定のリゾルバーをテストするには、システム DNS リゾルバーを切り替え(例: 8.8.8.8 / 114.114.114.114)、references/task-ip-attribution.md に記載されているとおり、python scripts/dns_resolve.py --domain <domain_name> --timeout 10を再実行してください。 - 上記で参照しているスキルは別個のスキルパッケージです。このスキルから内部スクリプトを直接呼び出さず、スキル自体を呼び出してください。
FAQ(よくある質問)
トラブルシューティングの全ガイド:references/troubleshooting.md。
| 問題 | 簡易的な解決方法 |
|---|---|
| Q1:「Credentials not configured」 | hcloud configure を対話形式で実行するか、環境変数 HUAWEICLOUD_SDK_AK / HUAWEICLOUD_SDK_SK を設定してから、hcloud configure list で確認します |
| Q2:ShowDomainDetailByName が 404 / CDN.0171 を返す | ドメインが現在のアカウントに属していないか、CDN に登録されていません。スペルとアカウントを確認するか、hcloud CDN ListDomains/v2 --cli-region=<region> --page_size=100 で登録済みドメインを一覧表示します |
| Q3:403 permission denied | IAM ユーザーに CDN のクエリ権限(cdn:*:query* と cdn:configuration:queryDomains)があることを確認します。必要に応じて、権限を付与するようメインアカウントの管理者に連絡してください(references/iam-policies.md を参照) |
| Q4:dns_resolve.py が dns_timeout を返す | ローカルネットワークと DNS 設定を確認します。システム DNS リゾルバーを切り替え(例:8.8.8.8 / 114.114.114.114)、python scripts/dns_resolve.py --domain <domain> --timeout 10 を再実行します |
| Q5:missing_library(終了コード 2) | dnspython をインストールします:pip install dnspython>=2.1(推奨:python -m pip install dnspython>=2.1)。その後、再試行します |
既知の制限事項
dns_resolve.pyは--resolver引数を公開していません。複数のリージョン/DNS サーバーを対象としたプローブには、システム DNS リゾルバーの切り替えと再実行が必要です(troubleshooting.md を参照)- プローブ対象は A レコードのみです。AAAA は解決されず、CNAME チェーンも直接問い合わせません
ShowIpInfo/v2では、1 回の呼び出しにつき最大 20 個の IP を問い合わせます。上限を超える IP は切り捨てられ、レポートに記載されます- CDN API が対応するリージョンは
cn-north-1とap-southeast-1の 2 つのみです。問い合わせ結果はリージョンに依存しないため、cn-north-1を推奨します
エラーコードのクイックリファレンス
| エラーコード / error.reason | 意味 | 対応 |
|---|---|---|
| 200 | 成功 | 次のステップに進みます |
| 403 | 権限がありません | 中止し、認証を求めます(Q3 を参照) |
| 404 / CDN.0171 | 現在のアカウントに属していないドメインです | 中止し、所有権の確認を求めます(Q2 を参照) |
dns_nxdomain | ドメインが存在しません | NXDOMAIN を報告し、スペルと権威 DNS を確認します |
dns_no_answer | A レコードがありません | 「A レコードがありません」と報告し、A/CNAME の設定を確認します |
dns_timeout | プローブがタイムアウトしました | タイムアウトとして記録し、部分的な結果を返します(Q4 を参照) |
missing_library | dnspython がありません | 中止し、インストールを求めます(Q5 を参照) |
障害モード
各ステップの例外処理の詳細は、対応するタスク文書を参照してください。以下は、全体のフローにおける障害モードと復旧方法の概要です。
| # | 障害モード | 検出箇所 | 復旧方法 |
|---|---|---|---|
| 1 | 認証情報が未設定、または期限切れ | Step 1 hcloud configure list | 中止し、hcloud configure または環境変数を設定するようユーザーに案内してから再試行します |
| 2 | ドメインが見つかりません(404 / CDN.0171) | Step 1 ShowDomainDetailByName | 中止し、ドメインの所有権の確認を求めます |
| 3 | 権限がありません(403) | Step 1 ShowDomainDetailByName | 中止し、管理者に連絡して cdn:*:query*(および cdn:configuration:queryDomains)を付与するよう求めます |
| 4 | API 呼び出しに失敗しました(500 / ネットワークエラー) | Step 1 / Step 3 | 縮退動作:プローブ結果のみを出力し、レポートに「API クエリに失敗しました。IP の帰属を手動で確認してください」と記載します |
| 5 | ドメインが解決されません(data.resolved_ips が空) | Step 2 JSON | Step 3 をスキップし、「ドメインが解決されません」と CNAME の修正案を報告します |
| 6 | プローブがタイムアウトしました(dns_timeout) | Step 2 JSON | 「プローブがタイムアウトしました」と記録し、部分的な結果を返して、DNS リゾルバーを切り替えて再試行するよう提案します |
| 7 | NXDOMAIN / NoAnswer | Step 2 JSON | 対応する結論レポートを作成し、ドメインのスペルと A レコードの設定を確認します |
| 8 | dnspython がありません(missing_library、終了コード 2) | Step 2 インポートのセルフチェック | 中止し、dnspython>=2.1 のインストールを求めます |
| 9 | IP が 20 個を超えています | Step 2 → Step 3 の前 | 最初の 20 個のみを照会し、「実際には N 個の IP に解決されました。最初の 20 個のみ検証済みです」とレポートに記載します |
| 10 | 帰属が混在しています(belongs=true が一部のみ) | Step 3 ShowIpInfo/v2 | 「一部のみ解決/誤検知の疑い」と結論づけ、複数リージョンでの検証を求めます |
| 11 | Step 3 が空の cdn_ips を返します | Step 3 のレスポンス | 防御的に「Huawei Cloud には解決されません」と結論づけ、Fail を報告して手動検証を求めます |
セルフチェック:最終レポートを作成する前に、必須フィールドがすべて含まれていることを確認します(Analysis Time / Target Domain / Expected CNAME / DNS Resolution / Diagnosis Items / Conclusion / Suggestion)。検証方法については、references/verification-method.md を参照してください。
出力形式
最終出力:構造化されたテキスト形式の診断レポートです。レポートの完全なテンプレート、フィールドのマッピング、出力サンプル、例については、references/task-report-generation.md を参照してください。
==================== CDN DNS Resolution Diagnosis Report ====================
Analysis Time: <ISO 8601 time>
Target Domain: <domain>
Expected CNAME: <CDN expected CNAME>
--- DNS Resolution ---
Resolved IPs: <IP1, IP2, ...>
IP Count: <count>
--- Diagnosis Items ---
[Domain Permission Check]: ✅ Pass / ❌ Fail / ⚠️ Warning
Detail: <detail>
[DNS Resolution Probe]: ✅ Pass / ❌ Fail / ⚠️ Warning
Detail: <detail>
Resolved IPs: <IP list>
[IP Attribution Check]: ✅ Pass / ❌ Fail / ⚠️ Warning / N/A
Detail: <X/Y IPs belong to Huawei Cloud CDN>
--- Conclusion ---
Status: <overall status>
Suggestion: <remediation suggestion>
必須フィールド:
| フィールド | 説明 |
|---|---|
| 分析時刻 | ISO 8601 形式(例:2026-08-12T10:00:00+08:00) |
| 対象ドメイン | 診断対象のドメイン(ユーザーが入力) |
| 期待される CNAME | ステップ 1 で取得した CDN の期待 CNAME |
| DNS 解決 | dns_resolve.py の data.resolved_ips に含まれる IP リストと件数 |
| 診断項目 | ステップの順序に沿った診断項目:名前 + ステータス + 詳細 |
| 結論/提案 | 全体的な結論と具体的な修正案 |
ステータスの列挙値:
| 表示 | 意味 | 使用シナリオ |
|---|---|---|
| ✅ Pass | 合格 | プローブ結果が期待を満たしている |
| ❌ Fail | 不合格 | プローブ結果が期待を満たしていない |
| ⚠️ Warning | 警告 | タイムアウト、一部の結果、または誤検知の疑いがある |
| N/A | 該当なし | ステップが実行されていない(例:ドメインが解決されないため、IP 帰属の確認をスキップした場合) |
プローブの JSON 契約(出力構造):dns_resolve.py は、{result, data, error_msg} エンベロープでラップされた単一の JSON オブジェクトを標準出力に出力します。業務フィールドは data.* 内に含まれます
(data.resolved_ips/data.duration_ms/data.error)。data.error.reason の列挙値:dns_nxdomain/dns_no_answer/dns_timeout/missing_library/invalid_domain/
invalid_timeout/unexpected_probe_error。references/task-dns-resolve.md を参照してください。
禁止事項:レポートに AK/SK やその他の平文の認証情報を絶対に含めないでください。他の顧客のドメインや、内部 URL/API の内部情報を公開してはいけません。 診断結果と修正案のみを記載してください。
バージョン履歴(変更履歴)
| バージョン | 日付 | 変更内容 |
|---|---|---|
| 1.0.0 | 2026-08-12 | 初版:CDN ドメインの DNS 解決診断(権限確認 + DNS プローブ + IP 帰属確認 + 診断レポート) |
- 担当者:cdn-ops
- バージョン管理方針:動作に関わる大きな変更(コマンド、出力契約、ワークフローの調整)ではマイナーバージョンを上げ、ここに記録します。純粋なドキュメントの修正ではパッチバージョンを上げます。
参考資料
| ドキュメント | 説明 |
|---|---|
| task-permission-check.md | ステップ 1:認証情報の検証とドメイン権限の確認 |
| task-dns-resolve.md | ステップ 2:DNS 解決プローブ |
| task-ip-attribution.md | ステップ 3:IP 帰属の確認 |
| task-report-generation.md | ステップ 4:診断レポートの生成 |
| prohibited-operations.md | 禁止されているすべての非 GET 操作 55 件(POST/PUT/DELETE) |
| dataflow-diagram.md | Mermaid データフロー図 |
| related-apis.md | API と CLI コマンドのリファレンス |
| iam-policies.md | IAM 権限ポリシー |
| verification-method.md | 検証方法 |
| cli-installation-guide.md | CLI インストールガイド |
| troubleshooting.md | トラブルシューティング |
| acceptance-criteria.md | 受け入れ基準チェックリスト |