Amazon Web Services ブログ

Amazon Bedrock Agents と Amazon CloudWatch Logs を使用した、生成 AI によるクラウド運用ワークフローの実現

本記事は2024年9月16日に公開された Enable cloud operations workflows with generative AI using Agents for Amazon Bedrock and Amazon CloudWatch Logs を翻訳したものです。翻訳はソリューションアーキテクトの濱野谷(@yoshiehm)が担当しました。

Amazon Bedrock は、AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI、Amazon などの主要 AI 企業の高性能な基盤モデル( FM )を単一の API を通じて提供するフルマネージドサービスです。また、生成 AI アプリケーションを構築するために必要な幅広い機能も提供し、セキュリティ、プライバシー、責任ある AI といった特徴を備えています。

Amazon Bedrock Agents は、複数ステップのタスクを自動的にオーケストレーションすることで、生成 AI アプリケーション開発を加速するのに役立ちます。Amazon Bedrock Agents は、Bedrock の FM を拡張して、旅行の予約や保険金請求の処理から広告キャンペーンの作成や在庫管理まで、複雑なビジネスタスクを実行します。これらはすべてコードを書くことなく実行できます。

Amazon CloudWatch Logs を使用すると、すべてのシステム、アプリケーション、使用している AWS サービスからのログを、高度にスケーラブルな単一のサービスに一元化できます。CloudWatch Logs では、ログデータを使用してアプリケーションとシステムを監視したり、特定のエラーコードやパターンを検索したり、特定のフィールドに基づいてフィルタリングしたり、将来の分析のために安全にアーカイブしたりすることができます。

このブログ記事では、AWS のクラウド運用シナリオにおいて、アプリケーションログファイルで観察されたエラーに基づいて問題を分類し、その後解決するために、Amazon Bedrock Agents と Bedrock の FM を使用した 生成 AI の使用例を紹介します。

我々のソリューションでは、Amazon Bedrock Agents は基盤モデル (FM) の推論機能を使用して、CloudWatch Logs に公開されたアプリケーションログについてのエラー解決を要求するユーザー指示を複数のステップに分解します。開発者/アナリストが提供した自然言語の指示を使用してオーケストレーション計画を作成し、その後、関連する API を呼び出し、Amazon Bedrock Knowledge Base にアクセスすることで計画を実行します。これには、大規模言語モデル (LLM) によって生成された応答を補強するために、ベクトルデータストア (Amazon OpenSearch Serverless) から情報を引き出す処理が含まれます。

また、Amazon Bedrock Agents が自動的に計画を作成し、サポートアナリストが提起した自然言語の質問からリクエストを満たすための実行ステップを推論する思考の連鎖を示すトレースも紹介します。

前提条件

  1. AWS SAM をインストールします。
  2. このソリューションのリポジトリをクローンします。:
    sudo yum install -y unzip
    git clone https://github.com/aws-samples/genai-bedrock-serverless.git
    cd genai-bedrock-serverless/cloudops
  3. cloudops フォルダから、ソリューションの SAM テンプレートをデプロイします。:
    sam build -t template.yaml
    sam deploy --resolve-s3 --stack-name <anyname> --capabilities CAPABILITY_NAMED_IAM
  4. テンプレートは 2 つの Amazon S3 バケットを作成します。AWS CloudFormation コンソールで、デプロイされた SAM テンプレートの出力セクションに移動して、これら 2 つの S3 バケット(ProductDocsBucket と CloudOpsSupportBucket)の名前を取得し、S3 コンソールで探すことができるようにします。
    1. ソリューションの data フォルダにある ProductErrorCodes.xlsx ファイルを S3 コンソールの ProductDocsBucket バケットにアップロードします。
    2. ソリューションの data フォルダにある cloudopsupport.json と applogs.csv ファイルを S3 コンソールの CloudOpsSupportBucket バケットにアップロードします。
  5. Amazon Bedrock knowledge base を作成します。この手順に従ってナレッジベースを作成します。ステップ 7 で Amazon OpenSearch Serverless ベクトル検索コレクションをナレッジベースとして作成する新しいベクトルストアをクイック作成オプションを含むすべてのデフォルトを受け入れます。ソリューションのユースケースに特有の以下の領域を設定します。:
    1. ステップ 4a で、ナレッジベースのオプションの説明を提供します。例えば「エラーの説明に基づいてエラー解決方法を提供する」など。
    2. ステップ 5c で、ナレッジベースのデータソースのS3 URI を提供する必要がある場合、ProductDocsBucket の S3 URI を選択します。

ソリューション概要

このソリューションは、Amazon EC2 インスタンスまたは AWS 外部(オンプレミスまたはハイブリッドクラウド)のインスタンスで実行されているカスタムアプリケーションから始まります。インスタンスにインストールされた Amazon CloudWatch Agent がアプリケーションのログファイルを Amazon CloudWatch Logs にストリーミングします。Windows または Linux システムに統合 CloudWatch Logs エージェントをインストールする詳細なドキュメントはこちらです。また、こちらの方法でAWS Systems Manager を使用して EC2 またはハイブリッドインスタンスに CloudWatch エージェントをインストールおよび更新することもできます。CloudWatch Logs にアプリケーションログをストリーミングしたら、こちらに記載されている手順に従ってログファイルを Amazon S3 にエクスポートできます。このソリューションでは、カスタムアプリケーションの CloudWatch セットアップが完了していることを前提としており、前提条件セクションで S3 にアップロードしたサンプルアプリケーションログファイル(.csv 形式)を提供しています。

このシナリオでは、サポートアナリストはアプリケーションが提供する HTTP エラーコードとエラーのタイムスタンプに基づいてエラーを解決しようとしています。Amazon Bedrock Agents がユーザーリクエストを満たすために、エージェントを次の2つで構成します。エージェントは、エージェントへの指示と、エージェントに提供された API スキーマとナレッジベースに基づいてプロンプトを作成し、適切なタスクのシーケンスを決定します。
(1) アクショングループ – アクションの API スキーマを定義し、エージェントが実行できるアクションを実装する AWS Lambda 関数と紐づく
(2)ナレッジベース – 基本的に AWS 管理のベクトルデータベース(この場合は Amazon OpenSearch Serverless)であり、エージェントが顧客のクエリに答え、生成された応答を改善するためにクエリできる情報のリポジトリを提供する

図 1 に示すハイレベルアーキテクチャ図は、ソリューションのさまざまなコンポーネントが連携して動作する様子を示しています。CloudWatch Logs ファイルが Amazon S3 にエクスポートされ、エージェントには API スキーマとスキーマのメソッドを実装する Lambda 関数が提供されます。また、エージェントはアーキテクチャ図に示すように ナレッジベースに関連付けられ、図 2 に示すフローを実行します。

図 1:エンドツーエンドのフローを示すソリューションアーキテクチャ

図 2: エンドツーエンドのフローを説明したフローチャート

セットアップ

Amazon Bedrock Agents を作成します。Amazon Bedrock Agents コンソールからこちらの手順に従って エージェントを作成してください。以下の、ソリューションの構成に特有の部分を除いて、すべてデフォルトのままで構いません。エージェントを設定するにはのセクションで以下を実施します。:

    1. ステップ 2c でモデルを選択する際、Anthropic Claude 3 以降のモデルを選択します。ステップ 2d のエージェント向けの指示では、以下の図のように次の指示を提供します: “あなたは、HTTPエラーコードとエラーのタイムスタンプに基づいて、エラー解決と影響を受けるアプリケーションコンポーネント情報を提供するエージェントです”
    2. 図 3: エージェントの作成

    3. ステップ 2g の IAM 権限 のエージェント リソースロールのセクションで、既存のサービスロールを使用を選択し、ソリューションの SAM テンプレートによってプロビジョニングされたIAM サービスロールの ‘AmazonBedrockExecutionRoleForAgents_CloudOps’ を選択します。
      1. ステップ 3 でエージェントにアクショングループを追加するには、こちらの手順に従ってコンソールからアクショングループを追加します。” Provide error description for this error based on HTTP error code and timestamp of the error(HTTP エラーコードとエラーのタイムスタンプに基づいてこのエラーのエラー説明を提供する)” のような任意の説明をアクショングループに提供します。(図 4 参照)
      2. ステップ 6 のアクショングループタイプセクションで、 Define with API schemas を選択します。(図 4 参照)
    4. 図 4: アクショングループの作成

    5. ステップ 7 の Action group invocation セクションで、既存の Lambda 関数を選択し、既にプロビジョニングされている <stackname>-CloudOpsSupportLambda というプレフィックスの Lambda 関数を選択します(図 5 参照)
    6. 図 5: アクショングループに Lambda 関数を関連付ける

    7. ステップ 8 の Action group schema セクションで、 Select an existing API schema を選択し、S3 を参照ボタンを選択して、アカウントにプロビジョニングされた CloudOpsSupportBucket S3 バケットから cloudsopssupport.json ファイルを選択します(図 6 参照)

    8. 図 6: API スキーマをアクショングループに関連付ける

    9. ステップ 4 のナレッジベースセクションで追加を選択して、前提条件セクションで作成したナレッジグループをエージェントに関連付けます。”このエラーのエラー説明に基づいて、エラー解決と影響を受けるアプリケーションコンポーネントを提供してください” のようなナレッジベース指示をエージェントに提供します。(図 7 参照)

    10. 図 7: エージェントへのナレッジベースの追加

    テストと検証

    Amazon Bedrock コンソールは、エージェントをテストするための UI を提供します。こちらの手順に従ってエージェントをテストし、デプロイの準備をしてください。こちらの手順に従って、以下に示すようにエージェントのエイリアスを作成し、そのエイリアスに関連付けられたエージェントバージョンを作成してエージェントをデプロイします:


    図 8: エージェントのエイリアスとバージョンを作成する

    これでエージェントのテストの準備が整いました。Amazon Bedrock Agents UI でサンプルプロンプトを提供します。サポートアナリストとして、アプリケーションが提供する HTTP エラーコードとエラーのタイムスタンプに基づいてエラーを解決しようとしています。ソリューションで提供したサンプルアプリケーションログファイルのサンプルエラーコードと関連するタイムスタンプに基づいて、”HTTP エラーコード 500、タイムスタンプ 202404219:00 のエラー解決方法を提供してください。応答は日本語で表示してください。” のような単純なプロンプトを使用できます。エージェントがエラーを解決するための情報を取得した詳細なエラー解決策を提供します。(図 9 参照)

    図 9: プロンプトを提供し、エージェントから最終的な応答を取得する

    各応答のトレースを表示を選択すると、ダイアログボックスにエージェントが使用した推論手法と FM が生成した最終的な応答が表示されます。

    図 10: エージェントからの思考の連鎖と推論を表示する

    クリーンアップ

    このポストで説明したソリューションを試した後、継続的な料金を避け、アカウントをクリーンアップするには、次の手順を実行してください:

    1. agentsforbedrock-cloudops フォルダから、ソリューションの SAM テンプレートを削除します:
      sam delete --stack-name <yourstackname> --capabilities CAPABILITY_NAMED_IAM
    2. Amazon Bedrock Agents を削除します。Amazon Bedrock コンソールから、このソリューションで作成したエージェントを選択し、削除を選択して、エージェントを削除する手順に従います。
    3. Amazon Bedrock knowledge base を削除します。Amazon Bedrock コンソールから、このソリューションで作成したナレッジベースを選択し、削除を選択してナレッジベースを削除する手順に従います。

    結論

    このブログ投稿では、AWS のクラウド運用シナリオにおいて、Amazon Bedrock Agents と Bedrock の FM、および Amazon CloudWatch Logs を使用した 生成 AI の使用を実証しました。このソリューションをカスタマイズおよび拡張して、複数のログソースを持つアプリケーションログファイルで観察されたエラーに基づいて問題をトリアージし、その後解決するシナリオに適応させることができます。アクショングループの Lambda に追加のロジックを組み込んだり、ナレッジベースに関連情報リポジトリを追加したりすることも可能です。

    著者について

    Kanishk Mahajan は AWS のプリンシパル ソリューションアーキテクトです。AWS の ISV 顧客とパートナーのクラウド変革とソリューションアーキテクチャをリードしています。Kanishk はコンテナ、クラウド運用、移行とモダナイゼーション、AI/ML、レジリエンス、セキュリティとコンプライアンスを専門としています。彼は AWS でこれらの各ドメインの Technical Field Community (TFC) メンバーです。

    Praveen Gudipudi は、テクノロジーと機械学習に強い情熱を持つ Amazon Web Services (AWS) のテクニカルアカウントマネージャーです。複雑な課題を解決し、AWS 顧客のクラウド運用をシームレスに行うことに長けています。仕事以外では、Praveen は本を読むことを楽しみ、熱心な旅行者として常に新しい目的地を探索することを楽しんでいます。