トラブルシューティング FAQ
AWSops ダッシュボードの使用中に発生し得る問題と解決方法です。AWSops は ECS Fargate 上で動作する Next.js thin-BFF であり、すべてのライブ AWS 照会は AgentCore MCP ツールを通じて行われ、状態は Aurora(PostgreSQL)に保存されます。ほとんどの問題は、接続経路(エッジ)、認証(Cognito)、データ接続(Aurora・権限)のいずれかに分類されます。
サイトが 504 または接続不能です
CloudFront が応答しない、あるいは 504 Gateway Timeout が発生する場合、エッジ経路(CloudFront → VPC Origin → 内部 ALB → Fargate)のどこかで接続が切れています。AWSops には公開 ALB がないため、点検の順序は次のとおりです。
- Fargate タスクの状態 — ECS サービスのタスクが RUNNING で、ターゲットグループで healthy かを確認します。タスクが UNHEALTHY で循環している場合は、下記の「ECS タスクが UNHEALTHY」の項目を参照してください。
- TLS end-to-end — CloudFront → ALB 区間は TLS が途切れずにつながっている必要があります。VPC Origin が
https-only(443)で、Origin ドメインが公開 FQDN(例:awsops.example.com)に設定され、SNI が ALB 証明書と一致していなければなりません。 - ALB 証明書 / リスナー — 内部 ALB は HTTPS:443 + リージョン ACM 証明書でリスニングする必要があります(CloudFront の証明書は us-east-1 ですが、ALB はリージョン ACM です)。
- ALB セキュリティグループ — 最も多い 504 の原因です。ALB SG は CloudFront マネージドセキュリティグループ
CloudFront-VPCOrigins-Service-SGからの 443 を許可する必要があります。VPC CIDR のみを許可するとトラフィックが遮断され 504 が発生します。
504 はほぼ常に ALB SG が CloudFront マネージド SG を許可していないことが原因で発生します。VPC-CIDR-only のルールは動作しません。CloudFront マネージド SG(CloudFront-VPCOrigins-Service-SG)からの 443 インバウンドが許可されているかを最初に確認してください。
VPC Origin のプロトコルは in-place では変更できません。https-only 設定を変更するには、Terraform で create_before_destroy + リソース置換(-replace)が必要です。
ログインできません
AWSops はセルフホストのログインフォーム(/login)を使用します。未認証の状態で保護されたページにアクセスすると、エッジ(Lambda@Edge)が自動的に /login へリダイレクトします。
- ログインフォームの使用 —
/loginでユーザー名とパスワードを入力すると、BFF(POST /api/auth/login)が Cognito のInitiateAuth(USER_PASSWORD_AUTH)を呼び出し、成功するとawsops_tokenクッキー(id_token、12 時間有効)を発行します。 - 認証情報のエラー — ユーザー名/パスワードが間違っているか、ユーザーが Cognito User Pool に存在しない場合、ログインは拒否されます。パスワードのリセットやユーザー作成は管理者に依頼してください。
- クッキーの確認 — ログインはできたのに
/loginに戻され続ける場合は、awsops_tokenクッキーが正しく設定されているかを確認します。クッキーは HttpOnly のため JavaScript では読めません。ブラウザの開発者ツール → Application → Cookies で確認してください。期限切れ(12 時間)であれば再ログインすれば解決します。 - ログアウト後の再ログイン — セッションが不整合になった場合は、ログアウト(クッキー削除 →
/login)してから再度ログインしてください。別途 Hosted UI/logoutの往復はありません。
エッジは単純な有効期限チェックではなく、RS256 JWKS 署名検証(iss/aud/token_use を含む)を実行します。トークンが偽造されていたり、別の User Pool から発行されたものであれば拒否されます。Cognito Hosted UI PKCE フロー(/_callback)はダークフォールバックとしてのみ残っており、通常のログインは /login フォームを使用します。
管理者画面(設定・カスタマイズ)にアクセスすると 403 が出ます
管理者機能は、ログインの有無とは別にサーバー側の管理者ゲートでもう一段保護されています。次のいずれかを満たす必要があります。
- ログインユーザーが Cognito の admins グループに属している、または
- ユーザーのメールアドレスが SSM の管理者メール許可リストに含まれている。
両方とも空の場合、すべてのユーザーが fail-closed で 403 を受け取ります(安全なデフォルト)。管理者グループにユーザーを追加するか、SSM の許可リストにメールアドレスを登録すれば解決します。
データが表示されません
データが空に見える原因は大きく 3 つあります:(a) アプリ状態を保持する Aurora に接続できていない、(b) ライブ AWS 照会の権限不足、(c) インベントリ同期の未実行。
- セッション/認証の確認 — まずログインセッションが有効かを確認してください。トークンが期限切れになると API 呼び出しが拒否され、画面が空に見えることがあります(上記の「ログインできません」を参照)。
- Aurora 接続の確認 — チャットスレッド、診断レポート、ジョブキューなど、アプリの状態はすべて Aurora に保存されます。
/api/dbヘルスチェックで DB ping が正常かを確認してください。失敗する場合は DB 自体、またはネットワーク/シークレットの問題です。 - ライブ AWS 照会の権限 — EC2/IAM のようなリアルタイム AWS データは AgentCore MCP ツール(読み取り専用)を通じて照会します。特定のセクションだけが空の場合、そのサービスの
Describe*/List*権限がブロックされている可能性があります(SCP/IAM)。Cost データには Cost Explorer の権限、メトリクスには CloudWatch の権限が必要です。 - インベントリ同期 — インベントリページの表が空の場合、インベントリ同期(
steampipe_enabledフラグ、デフォルト OFF)が実行されていない可能性があります。インベントリ同期は独立したバッチ同期機能であり、ライブ照会(MCP)とは独立しています。
「特定のページだけ」が空の場合 → そのサービスの AWS API 権限(SCP/IAM)の問題である可能性が高いです。「すべてのページ」が空の場合 → セッション期限切れまたは Aurora 接続の問題である可能性が高いです。
SCP によるブロックで一部のデータが欠落します
SCP(Service Control Policy)や IAM 境界により特定の AWS API がブロックされると、該当するデータのみが部分的に欠落することがあります。
| ブロックされた API の例 | 影響 |
|---|---|
iam:ListMFADevices | MFA 状態の照会不可 |
ce:GetCostAndUsage | Cost データの照会不可 |
cloudwatch:GetMetricData | メトリクス/グラフの照会不可 |
AWSops は読み取り専用のため、ブロックされた API については該当項目を空の値として表示し、残りは正常に動作します。欠落したデータが必要な場合は、その API への読み取り権限を追加してください。権限を変更せずに自然言語で部分的な照会が可能な場合は、AI アシスタントに質問すれば利用可能な範囲のデータで回答します。
ページの読み込みが遅いです
AWSops の Web は ECS Fargate 上で事前ビルドされた standalone イメージとして実行されます。ホスト上で npm run dev で動いていたレガシーとは異なり、ランタイムに別途のビルドステップが介在しません。それでも特定のページが遅い場合は、次を確認してください。
- 重い作業は非同期ワーカーへ — 長時間/大容量/OOM リスクのある作業(例:AI 総合診断、レポートのエクスポート)は Web が直接処理せず、非同期ワーカーキューへ enqueue されます。画面にはジョブの状態が表示され、完了後に結果が埋められます。即座に応答しないのが正常です。
- ライブ AWS 照会の遅延 — Cost Explorer や CloudWatch のような AWS API は応答が遅いことがあります(数十秒単位)。この場合、画面は正常ですがデータが埋まるまで時間がかかります。
- 新しいタスクのローリング — デプロイ直後(
make deployによる ECS ローリング中)は一時的に応答が遅くなることがあります。ローリングが終わり/api/healthが安定すれば正常化します。
ECS タスクが UNHEALTHY で循環します(オペレーター向け)
デプロイ後に Fargate タスクが UNHEALTHY になり続け、circuit breaker でロールバックされる場合、ほぼ常に次の 3 つのいずれかです。
HOSTNAME=0.0.0.0ランタイム env の欠落 — Next.js standalone をコンテナとしてデプロイする際は、タスク定義のenvironmentにHOSTNAME=0.0.0.0を明示する必要があります。イメージ ENV だけでは不十分です — ECS が HOSTNAME を ENI IP で上書きすると、アプリが 0.0.0.0/loopback にバインドされず、ヘルスチェックが失敗します。- ヘルスチェックパスの不一致 — コンテナとターゲットグループのヘルスチェックパスは、アプリの
/api/healthと正確に一致する必要があります。不一致の場合、circuit breaker のループが発生します。 - Fargate ワーカーの Dockerfile は
CMD(ENTRYPOINT 禁止) — Fargate ワーカーイメージはCMDを使用しなければなりません。exec-form のENTRYPOINTを使うと、Step Functions のcontainerOverrides.commandが ENTRYPOINT に append されて argv が重複し、argparse が失敗します。
最も多い原因は、HOSTNAME=0.0.0.0 をイメージではなくタスク定義のランタイム env として明示していないことです。ヘルスチェックが即座に失敗する場合は、この項目から確認してください。
ECS タスクが起動時に ResourceInitializationError を出します(オペレーター向け)
タスクが起動すらできず ResourceInitializationError で失敗する場合は、Aurora シークレットを注入する secrets valueFrom の権限問題です。
ECS の secrets valueFrom(Aurora シークレットなど)には**実行ロール(execution role)**の権限が必要です — task role ではありません。実行ロールに該当シークレットに対する secretsmanager:GetSecretValue 権限があるかを確認してください。
AI 総合診断が失敗するか止まります
AI 診断は Web が直接実行するのではなく、非同期ワーカーティアがバックグラウンドで生成する読み取り専用レポートです(Light·Mid 8+1 セクション(計 9) / Deep 15+1 セクション(計 16))。したがって「応答がない」ことが即「失敗」ではありません。
- まずジョブの状態を確認 — 診断をリクエストするとジョブがキューに登録され、ワーカーが処理します。レポート画面のジョブ状態(queued → running → succeeded/failed)を確認してください。running であれば正常に進行中です。
- failed で終わった場合 — ワーカーが失敗すると状態が failed として記録されます。同じ診断を再度リクエストすれば再試行されます(ジョブは job_id 基準で冪等)。
- deep + Opus モデル — deep 診断(15+1 セクション)で Opus モデルを選択するとコストゲートが適用され、時間もより長くかかります。すばやく確認したい場合は、デフォルトの Sonnet で Light/Mid 診断を使用してください。
- データ権限 — 診断はライブ AWS データを読み取るため、ブロックされた API(Cost/CloudWatch など)のセクションはデータが空に見えることがあります(上記の「SCP によるブロック」を参照)。これは診断自体の失敗ではなく、データ可用性の問題です。
長時間止まっている(stale)ジョブは、reaper(5 分周期)が自動的に整合化します。ワーカーが死んで状態が更新されないジョブも、最終的には failed として整理されます — 長く待っても succeeded にならない場合は再試行してください。
AI アシスタントの応答がおかしい、または権限エラーが出ます
AI アシスタントは読み取り専用ツール(約 160 個)でライブ AWS データを照会し、会話は Aurora に保存されます。
- 読み取り専用の動作 — AWSops は AWS リソースを変更しません。「リソースを修正/削除してほしい」というリクエストは拒否されるか、診断/案内のみで応答するのが正常です(恒久的な read-only ポリシー)。
- 権限エラー — 特定の照会が AccessDenied で失敗する場合、そのサービスの読み取り権限がブロックされています。ブロックされた範囲は回答から除外され、利用可能なデータのみで応答します。
- 会話が消えた — 会話は Aurora に永続化されており、サイドバーから再度開くことができます。表示されない場合は、セッション(ログイン)が変わったか期限切れになった可能性があります。
データソース(Prometheus/Loki など)に接続できません
/datasources の読み取り専用コネクタ(Prometheus・Loki・Tempo・ClickHouse・Mimir など)は、コネクタ Lambda を通じて外部オブザーバビリティバックエンドを照会します。
- エンドポイントへの到達性 — コネクタが該当エンドポイントにネットワークで到達できる必要があります。private エンドポイントには VPC 経路が必要です。
- SSRF ガード — コネクタの入力には SSRF 防御が適用されます。メタデータ/IMDS アドレスなど内部アドレスへの接続は遮断されます。社内の内部アドレスを指すとブロックされることがあります。
- 認証情報 — 認証が必要なバックエンドは、Secrets Manager に保存された認証情報を使用します。401/403 が出る場合はシークレットが正しいかを確認してください。
- レスポンスサイズ — コネクタの入力にはサイズ制限があります(パース前に bound を適用)。過度に大きいペイロードは拒否されます。
通知が外部(Slack/チケット)へ届きません
外部への記録/チケット/メッセージの書き込みはガバナンスの下で動作するオプション機能であり、デフォルトではフラグ OFF の場合があります。
- 機能の有効化状況 — 外部書き込みはガバナンス(宛先許可リスト・シークレット・DLP/マスキング・ヒューマンゲート・フラグ)を前提とします。無効の状態ではメッセージは送信されません。
- 宛先許可リスト — 宛先(チャンネル/エンドポイント)が許可リストにない場合、送信は遮断されます。
- 認証情報 — 外部サービスのトークン/Webhook は Secrets Manager に保存されます。期限切れやタイプミスがあると送信が失敗します。
外部書き込みは**データレコード(メッセージ・チケット)**の作成であり、AWS リソースの変更ではありません。AWS リソースの変更と自律実行は恒久的に凍結されています。