もうSQL文に悩まない!Claude Code + Athena  で自然言語によるログ解析をやってみた

もうSQL文に悩まない!Claude Code + Athena で自然言語によるログ解析をやってみた

Claude Code に AWS CLI の操作を任せ、自然言語だけで Athena にクエリする方法を紹介します
2025.12.11

この記事は アノテーション株式会社 AWS Technical Support Advent Calendar 2025 | Advent Calendar 2025 - Qiita 11 日目の記事です。

はじめに

アノテーションの Shimizu です。

日々の業務で Amazon Athena を利用して、CloudFront や ALB のアクセスログを解析する機会があります。
ですが SQL 構文に強くない筆者は「日時指定ってどう書くんだっけ?」「特定ステータスコードのログを集計するには・・」と毎回クエリ文を調べたり構文エラーと戦ったりで、目的の調査結果を得るまでに大変時間がかかっていました。

そこで今回は Claude Code を利用して、簡単な自然言語による指示でログ解析を試してみたので、その手順をご紹介します!

⚠️ 注意
今回は検証用のアクセスログで試していますが、もし本番環境を調査する場合は、AI にログ解析をさせることが社内規定などに抵触しないか確認しましょう。

事前準備

Claude Code に AWS CLI 経由で Athena を操作させるために、まず以下の準備ができている必要があります。

  • 作業用PC端末に Claude Code と AWS CLI がインストールされている
  • AWS CLI の認証情報に、調査対象 AWS アカウントの Athena を操作する権限が付与されている
  • 調査対象の AWS アカウント上に CloudFront と ALB のアクセスログがあり、Athena のテーブルを作成済みである

本記事ではこれらの詳しい手順を省きますが、これから準備する方は文末の参考資料 ※1 〜 ※6 をご覧ください。

上記が準備できている前提で、PC端末上に適当なフォルダを作成し、その中に CLAUDE.md という名前のテキストファイルを配置します。ファイルには以下例のように記述します。

CLAUDE.md ファイルの記述例
## System Instructions
あなたは AWS クラウドの運用を担当するスペシャリストです。
指示に従って AWS CLI を操作し、AWS 環境の調査を行なってください。

## AWS CLI Rules
- すべてのコマンドは実行前に要約と意図を説明し、ユーザーの確認を得てから実行してください。
- 入力したプロンプト、実行したコマンドと出力結果は必ずログファイル "アカウントID_YYYYMMDD_log.txt" に記録してください。
- 破壊的操作は禁止(rm、athena の DDL/DML 書き込み系は実行しない)

## Athena Rules
- 特にデータベース名の指定がない限り、常に "default_db" を対象としてください。
- 特にテーブル名の指定がない限り、以下のテーブルに対してクエリしてください
	- ALB アクセスログ : "alb_access_logs"
	- CloudFront ログ : "cloudfront_logs"

※ Athena のテーブル名や禁止事項は、実際の環境に合わせて適宜修正しましょう。
※ AWS CLI のプロファイルで複数の AWS アカウントを設定している場合は、AI が間違ったアカウントを操作しないように「必ず AWS アカウント xxxxxx を選択する」といった指示も付け加えましょう。

上記の CLAUDE.md ファイルを配置したフォルダにターミナルで移動し、claude コマンドを実行して Claude Code を起動します。これで事前準備は完了です。

img-000

やってみた

今回は CloudFront と ALB の検証用ログを用意して、以下のようなシチュエーションを想定して調査してみました。

「ALB をオリジンとした CloudFront へユーザーからアクセスした際に、不明な 301 リダイレクトループが発生したと報告があったため、原因を調査したい。大まかな時間帯とアクセス元のIPアドレスだけは特定できている」

まず CloudFront のログから 301 リダイレクトが発生した行を抽出するため、Claude に以下のようなプロンプトを与えます。

プロンプト
2025-12-11 09:25:00 ~ 11:00:00 (JST) の期間内で、CloudFront が 301 
ステータスを返しており、かつ送信元IPアドレスが 22.22.22.22 である行を抜き出してください

すると Claude が AWS CLI を操作し、CloudFront のアクセスログに対して Athena クエリを実行しますか? と聞いてくるので、問題なければ Yes を選択して進めます。すると条件に合致したログ行を抽出して CSV ファイルに出力してくれました。

img-001

CLAUDE.md で指示した通り、実行内容のログも保存されていました。

img-001a

次は抽出した CSV データの中から、さらにオリジンの ALB 側が原因になっているログ行を抽出してみます。

プロンプト
@cloudfront_301.csv を確認して、オリジンの ALB 側から 301 ステータスが返されている行を抜き出してください

すると Claude が目的を果たすための Athena クエリやシェルコマンドを自律的に実行して、オリジン側から 301 ステータスが返されている行を特定し、別の CSV ファイルに出力してくれました。
301 ステータスのほとんどが CloudFront のキャッシュから返されていることも教えてくれました。

img-002

今度はこれらの CSV データから、不明な 301 ステータスが返された原因を調べるように指示してみます。

プロンプト
@cloudfront_301.csv と @cloudfront_301_from_alb.csv の結果から、ユーザーの意図しない 301 
リダイレクトが発生した原因を特定してください。 

するとこれまでの結果を詳しく分析し、301 リダイレクトが発生した原因を特定してくれました!
どうやら URL 末尾のスラッシュ有無による正規化が、リダイレクトループにつながった可能性があるようです。対策も提示されています。

img-003

最後に、今回の調査に伴う AWS の利用料金も確認してみました。

プロンプト
今回の調査で実行した Athena クエリのスキャン量と、想定される料金を調べてください 

すると Claude が操作履歴のログを確認し、今回のクエリで発生したデータスキャン量と想定料金、さらにコスト改善案まで提示してくれました!

img-004

今回試した内容は以上です。

さいごに

いかがでしたでしょうか。

Athena の SQL 文に詳しくない筆者でも、CloudFront と ALB のクエリ構文の違いなどを意識することなく、自然言語で Claude に指示するだけで、期待した調査結果を得られました!
ただ単にデータを抽出するだけではなく、そこから得られた洞察まで導いてくれるのは大変心強いです。

実行内容はすべてログに記録しているため、あとから Athena のスキャンに要した料金を確認したり、手動でクエリを実行する際のサンプルとしても役立ちます。

これを応用すれば自然言語で他のアクセスログ(AWS WAF 等)も調査したり、CloudWatch Logs を利用してアプリケーション内部を含めたログ調査もできそうなので、また機会があれば記事にしたいと思います。

この記事がお役に立てば幸いです!

参考資料まとめ

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

この記事をシェアする

FacebookHatena blogX

関連記事