Amazon Web Services ブログ
AWS コンソールを解き放つ:Amazon Q Developer によるエラー診断
本記事は 2025 年 1 月 10 日に公開された “Unlocking AWS Console: Diagnosing Errors with Amazon Q Developer” を翻訳したものです。
はじめに
開発者や IT 運用者、場合によってはサイト信頼性エンジニア(SRE)は、インフラストラクチャとアプリケーションのデプロイと運用、そしてインシデントへの効果的かつタイムリーな対応と解決を担当しています。効果的なインシデント管理には、迅速な診断、根本原因の分析、そして是正措置の実施が必要です。分散環境に複数のリソースがデプロイされている現代のシステムにおいて、根本原因の診断は困難な場合があります。生成 AI を活用したアシスタントである Amazon Q Developer は、 AWS マネジメントコンソールで表示されたエラーを診断することで、このインシデント管理のプロセスの簡素化を支援できます。
Amazon Q Developer は、AWS 環境に関連するエラーの診断を支援することで、本番環境の問題に対処する際の貴重な時間を節約できます。これらのエラーは、複数のリソースにまたがる設定ミスが原因である可能性があり、通常、根本原因を特定するために複数の AWS サービスコンソールの画面を行き来する必要があります。Amazon Q Developer は生成 AI を使用して、 AWS コンソールで発生するエラーの診断を自動化します。これにより、修復までの平均時間(MTTR)が短縮され、ビジネス活動・事業運営へのインシデントの影響を最小限に抑えることができます。
このブログ記事では、サポートされている AWS サービスを使用する際に、 Amazon Q Developer が AWS コンソールのエラーの診断をどのように支援できるかを紹介します。この機能の仕組みを説明し、トラブルシューティングのガイダンスを提供します。また、この機能を支える処理の裏側も見ていきます。
Amazon Q による診断
Amazon Q による診断の機能は、現在この機能でサポートされている AWS サービスのコンソールで発生する一般的なエラーのほとんどの診断に役立ちます。この機能は、適切な権限を持つユーザーがエラーメッセージの横にある「Diagnose with Amazon Q」(Amazon Q で診断)ボタンをクリックすると有効になります。 Amazon Q は、エラーの根本原因を分析し、自然言語で説明を提供します。「Help me resolve」(解決を手伝って)ボタンをクリックすると、 Amazon Q はエラー状態を解決するための手順を順序立てて表示します。完了後、 Amazon Q が提供した解決策が役立ったかどうかのフィードバックを提供できます。
Amazon Q Developer が Amazon EC2 インスタンス起動エラーの診断を支援し、エラー解決のための手順のガイダンスを提供する方法を示す実行例はこちら:
Amazon Q による診断:EC2 インスタンス起動エラーに関連する IAM 権限
処理の裏側:Amazon Q が診断を生成する仕組み
概念を説明するために、2つの実践的な例を用いて説明します。
例1: 空ではない Amazon S3 バケットを削除しようとした場合。以下のエラーメッセージが表示されます:
This bucket is not empty. Buckets must be empty before they can be deleted. To delete all objects in the bucket, use the empty bucket configuration.
(※訳者注: このバケットは空ではありません。バケットを削除するには、事前に空にする必要があります。バケット内のすべてのオブジェクトを削除するには、バケットを空にする設定を使用してください。)
例2: 特定の S3 バケット内のオブジェクトを一覧表示しようとしたが、そのための AWS Identity and Access Management (IAM) 権限がない場合。以下のエラーメッセージが表示されます:
Insufficient permissions to list objects. After you or your AWS administrator has updated your permissions to allow the s3:ListBucket action, refresh the page. Learn more about Identity and access management in Amazon S3.
(※訳者注: オブジェクトを一覧表示するための権限が不足しています。あなたまたは AWS 管理者が s3:ListBucket アクションを許可するように権限を更新した後、ページを更新してください。 Amazon S3 のアイデンティティとアクセス管理についての詳細はこちら。)
AWS マネジメントコンソールでエラーメッセージの横にある「Diagnose with Amazon Q」(Amazon Q で診断)ボタンをクリックすると、 Amazon Q はエラーの根本原因を自然言語で説明する Analysis(分析結果)を生成します。このステップは 大規模言語モデル (LLM) によってサポートされています。 LLM に提供されるコンテキスト情報には、コンソールに表示されるエラーメッセージ、トリガーとなるアクションの URL、 AWS コンソールにサインインしているユーザーの IAM ロールが含まれます。この機能は、常にコンソールでの操作時に付与されたロールの権限内で動作し、付与された権限を超えて動作することはありません。
分析結果を確認した後で「Help me resolve」(解決を手伝って)ボタンをクリックすると、 Amazon Q はエラーが発生した AWS アカウントのリソースの状態に関する追加情報を取得します。この段階で、システムは不足している情報を能動的に判断し、情報の不足を補うために、各サービスに対して情報の取得リクエストを発行します。上記の例1のような単純なエラーでは照会は必要ありませんが、コンテキストからの情報が不十分な、より複雑なエラーを解決するためには不可欠です。
コンテキスト、エラー分析、ユーザー権限、およびアカウント内部への問い合わせ結果を考慮して、 Amazon Q はステップバイステップの Resolution (解決手順)を生成します。このステップも LLM によってサポートされています。
コンソールでエラーを解決するために Amazon Q が提供した手順を実装し検証した後、エラー解決の体験についてフィードバックを提供することができます。
ユーザー、 AWS コンソール、および Amazon Q Developer 間の相互作用を示す図
コンテキスト情報
コンテキスト情報は、 LLM がより関連性の高い、十分な情報に基づいた出力を生成するのに役立ちます。コンテキストは、コンソールから Amazon Q に入力として自動的に提供されます。コンテキストはすべての分析と判断のための基礎として、できるだけ豊富な情報であるべきです。最低限、 Amazon Q はエラーメッセージ、トリガーとなるアクションの URL、およびサインインしているユーザーが引き受けている IAM ロールを取得します。システムはコンテキストから関連する識別子を自動的に抽出します。例1では、 URL が https://s3.console.aws.amazon.com/s3/bucket/my-bucket-123456/delete?region=us-west-2
である場合、 Amazon Q は aws_region = "us-west-2"
と s3_bucket_name = "my-bucket-123456"
を抽出します。
この最小限のコンテキストの他にも、Amazon Q はエラーが発生した時点でユーザーが画面上で見ているもの、たとえば現在の UI のテキストフィールドやウィジェットの内容など、コンソールから追加情報を取得できます。また、基盤となるサービスが提供する特定のコンテキストも利用できます。上記の例2の場合、バケット名は URL から、アクション s3:ListBucket
はエラーメッセージから抽出されます。さらに、Amazon Q は IAM から関連するポリシーや許可・拒否ステートメントに関する追加情報を取得することもあります。
サインインしているユーザーアカウントの照会
Amazon Q による診断の機能は、単にコンテキスト情報を受動的に受け取るだけではありません。能動的に追加情報を要求する機能が組み込まれています。Amazon Q は、変更を加えない読み取り専用の問い合わせクエリを実行し、AWS アカウント内のリソース、それらのリソースの状態、およびエラーが発生している特定のリソースとの関係についてのより多くのコンテキストを収集するために使用されます。この関係についてのコンテキストを LLM に提供することで、エラーの診断における根本原因分析の精度が向上します。
Amazon Q は AWS Cloud Control API (CCAPI) を使用してサインインしているユーザーアカウントを照会し、アカウントで現在プロビジョニングされているリソースを検索します。 Amazon Q を利用する際、ユーザーが引き受ける IAM ロールに AmazonQFullAccess マネージドポリシーが添付されます。このマネージドポリシーには、 CCAPI の読み取りおよびリストのエンドポイントへのアクセスを提供する cloudformation:ListResources
および cloudformation:GetResource
の CCAPI IAM 権限が含まれています。 AmazonQFullAccess
マネージドポリシーを添付したくない場合は、 cloudformation:ListResources
および cloudformation:GetResource
アクションを IAM ロールに直接追加できます。
例1 は空でない S3 バケットが原因でエラーが発生する単純なケースなので、エラーメッセージとコンソール URL に必要な情報がすべて含まれており、 AWS アカウントの能動的な照会は必要ありません。一方、例2の IAM 権限エラーの場合、エラーが発生しているリソースに関連する IAM ロールの権限を理解する必要があります。 Amazon Q は、ロールのアイデンティティレベルのポリシーと影響を受けるリソースのリソースレベルのポリシーを取得でき、それに基づいて内部 IAM サービスを使用してエラーの原因を診断できます。具体的には、例2の URL は https://s3.console.aws.amazon.com/s3/buckets/my-bucket-123456?region=us-west-2&bucketType=general&tab=objects
のようになり、 Amazon Q はそこからリージョンと S3 バケット名を抽出します。また、エラーメッセージ自体から s3:ListBucket
アクションを抽出することもできます。この情報をもとに、 Amazon Q は my-bucket-123456
のバケットポリシーや、ロールに適用されているアイデンティティレベルのポリシーを取得し、それらをスキャンして s3:ListBucket
アクションの認可・不認可を確認したり、内部 IAM サービスを呼び出してアクセスが拒否された原因に関する追加情報を取得したりできます。
Amazon Q は、サインインしているユーザーのロールによって付与された権限の範囲内でのみ動作し、権限がユーザーの IAM ロールに割り当てられているものを超えて特権が昇格されることはありません。Amazon Q は、サインインユーザーの IAM ロールによって許可された権限を使用して CCAPI を呼び出します。 CCAPI はサインインユーザーの権限を引き継ぎ、ユーザーのアカウント内のリソースを照会できるのは同じレベルのアクセス権限内に限られます。たとえば、例2ではサインインしているユーザーが my-bucket-123456
のバケットポリシーにアクセスする権限を持っていない場合、 Amazon Q もアクセスできません。そして、すべての API 呼び出しは CloudTrail に記録されます。これには、 Amazon Q による CCAPI の呼び出しや、 CCAPI がリクエストに応じてエンドサービス(例:S3、IAM)を呼び出す処理も含まれます。
ステップバイステップの解決手順の生成
Amazon Q は収集したすべての情報を統合し、有用で実行可能な解決手順を生成します。例として、検討中の例に対する可能なサンプル手順を以下に示します。モデルは時間とともに更新・改善されるため、応答は変更される可能性があります。
例1の場合のサンプル手順:
- S3 コンソールに移動し、「バケット」をクリックして、
my-bucket-123456
バケットを選択します - 「空にする」ボタンをクリックします
- バケットに大量のオブジェクトが含まれている場合、ライフサイクルルールを作成してバケット内のすべて
- オブジェクトを削除する方が、より効率的な方法かもしれません
- テキスト入力フィールドに「完全に削除」と入力し、すべてのオブジェクトを削除することを確認します
my-bucket-123456
S3 バケットの削除を再試行します
例2の場合のサンプル手順:
- IAM コンソールに移動します。
ReadOnly
ロールに添付されている IAM ポリシーを編集します - S3 バケット ARN
arn:aws:s3:::my-bucket-123456
に対してs3:ListBucket
アクションを許可します - 更新された IAM ポリシーを保存します
- S3 コンソールページを更新して、バケット
my-bucket-123456
内のオブジェクトを一覧表示します
手順には、プレースホルダーの代わりに、バケット名 my-bucket-123456
のようなコンテキストから推測された情報が含まれていることに注意してください。 Amazon Q による診断で返される手順は、追加の労力なしに実行できるよう、完全かつ詳細に記述されています。実際、このサービスは LLM を使用して解決手順を生成しますが、Amazon Q は後処理を行い、よくある誤りを修正します。例えば、上記の例 2 では、LLM が arn:aws:s3:<region>::<bucket_name>
という形式で ARN を返した場合、それを適切な形式へ修正します。
上記の例2で返される手順は、ユーザーがオブジェクトを一覧表示できない原因が、 ReadOnly
ロールにアタッチされているポリシーに Allow
ステートメントがないことであると仮定しています。その他の根本原因として、 S3 バケットや ReadOnly
ロールに添付されているポリシーの Deny
ステートメントなどが考えられます。 Amazon Q による診断では、アカウントの照会を使用して正しい根本原因を特定し、適切な解決策を提案できます。上記の例では、 ReadOnly
ロールにアタッチされているポリシーを取得して s3:ListBucket
が実際に欠けているかどうかを確認したり、バケット bucket-123456
にアタッチされているポリシーを取得したりできます。
検証
Amazon Q による診断の目標の1つは、エラーが発生した場所で有用かつ実行可能なアドバイスを得られるよう、高い品質基準を維持することです。この目標を達成するためには、堅牢で柔軟な評価システムが重要な前提条件となります。生成 AI に基づくシステムの評価は、出力が自然言語であることによる広大な表現の可能性や、非決定的な動作といった特徴があるため、特有の課題があります。
簡単に言えば、私たちの検証システムは、各レコードが一定数のアノテーションを持つ大規模なエラーデータセットの構築に基づいています。各レコードには、テンプレート化されたエラーメッセージとコンソール URL(例えば、bucket-123456
は {{s3_bucket_name}}
に、us-west-2
は {{aws_region}}
に置き換えられたもの)が含まれています。アノテーションには、エラーのあるアカウントの状態とトリガーとなるアクションを記述した Infrastructure as Code(CloudFormation)の定義、および専門家による正解の応答データが含まれます。これらのレコードを活用することで、人間の介入なしに、システムのさまざまなバージョンの動作をシミュレーションでき、並列処理によってリアルタイムよりもはるかに高速に実行できます。また、Ground truth アノテーションとシステムの応答を比較する自動評価指標の開発も進めており、これに基づいて完全自動のオフライン評価を実施できるよう取り組んでいます。
この検証システムにより、新しいアイディアを現在の状態と比較しながら迅速に検証でき、さらに機能の低下も防ぐことができます。エラーレコードのアノテーションを入力するために専門家はまだ必要ですが、私たちはこの作業の効率化と簡素化を積極的に進めています。そのために、自然言語の手入力を避け、検証機能を組み込み、専門家が一から正解のアノテーションを入力するのではなくシステム出力を修正する形でアノテーションツールを構築しています。
まとめ
Amazon Q Developer の「Amazon Q による診断機能」を使用すると、複数のサービスコンソール間を移動することなく、AWS コンソールでのエラーの原因を特定できます。AWS アカウントとエラーコンテキストに特化したきめ細かなステップバイステップの手順を提供することで、Amazon Q Developer は効率的なトラブルシューティングと問題解決を支援します。これにより、組織の運用効率の向上、ダウンタイムの削減、サービス品質の改善が実現し、貴重な人的リソースを解放して、より価値の高い活動に集中できるようになります。また、この機能を実現するために AI と機械学習の機能によって処理の裏側がどのように機能しているかについての詳細についてもご紹介しました。
翻訳はApp Dev Consultantの宇賀神が担当しました。