FA2
- AI/ML を活用した障害分析の効率化を行います
- 従来の手動分析の課題を克服するために、LLM を使用して、ログやトレースなどのテレメトリデータを分析し、迅速な障害特定と原因究明を実現します
Slack App 版と Chatbot Custom Action 版
- Failure Analysis Assistant (FA2) Slack App 版
- Failure Analysis Assistant (FA2) AWS Chatbot Custom Action 版
Slack App 版と Chatbot Custom Action 版の 2 つが存在する。
それぞれ、Git の構成図を見ればわかるが、
前者は API Gateway 経由でリクエスト・レスポンスを返し、SLack へ送る。
後者は Slack から Lamaba を呼び出し、回答内容は SNS トピック経由で、Chatbot を通じ、Slack に送られる。
回答内容はいずれも変わらない。今回は前者の方法で実装する。
サンプルアプリケーションの作成
サンプルアプリケーションの作成は本題ではありませんので、基本的にドキュメントを参考にします。
既に Slack に通知するワークフローが存在する場合は不要です。
サーバレスアプリケーションの作成
今回はテスト用に適当な SAM アプリケーションを準備しておきました。
sam init 「1 - AWS Quick Start Templates」 の 「7 - Serverless API」です。
API Gateway + Lambda + DynamoDB のお決まりパターンです。
$ sam init
You can preselect a particular runtime or package type when using the `sam init` experience.
Call `sam init --help` to learn more.
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
Choice: 1
Choose an AWS Quick Start application template
1 - Hello World Example
2 - Data processing
3 - Hello World Example with Powertools for AWS Lambda
4 - Multi-step workflow
5 - Scheduled task
6 - Standalone function
7 - Serverless API
8 - Infrastructure event management
9 - Lambda Response Streaming
10 - Serverless Connector Hello World Example
11 - Multi-step workflow with Connectors
12 - GraphQLApi Hello World Example
13 - Full Stack
14 - Lambda EFS example
15 - DynamoDB Example
16 - Machine Learning
Template: 7
SNS トピックの作成
Chatbot と連携するための SNS トピックを作成しておきます。
Chatbot の作成
Chatbot 作成し、先程作成した SNS トピックとサブスクライブします。
CloudAlarm の作成
AWS/ApiGateway で 5XXError が発生した場合にアラートを出すように CloudAlarm を作成し、アクションには先程作成した SNS トピックを指定します。
Chatbot から Slack にアラームへの通知確認
念の為、Chatbot から Slack にアラームの通知が来ていることを確認しておきましょう。
これで、サンプルアプリケーションの準備が整いました。
Athena テーブル
データベースの作成
「aiops_db」というデータベースを作成しておきます。
CREATE DATABASES aiops_db;
ALB テーブルの作成
DDL で「alb_access_logs」というテーブルを作成しておきます。
CloudTrail テーブルの作成
DDL で「cloud_trail_logs」というテーブルを作成しておきます。
API Gateway の準備
API Gateway での CloudWatch ログ記録
AWS re:Post にある「解決策」を参考に、
[CloudWatch へのログ記録用の IAM ロールを作成する]と
[API ゲートウェイコンソールに IAM ロールを追加する]
を実施し、API Gateway が CloudWatch にログを送れるようにしておきます。
Bedrock の準備
Bedrock モデルアクセスの有効化
モデルアクセスを追加しておきます。
Git では、「Claude v3 Sonnet のアクセス許可をしていること」と書かれていますが、2024/08/01 現在、東京リージョンでは Claude v3 Sonnet に未対応となりますので、Claude v2.1 を使います。
Slack App 設定 1
Slack App の登録
Git の手順にある通り Slack App の登録を行います。
パラメータ
parameter.ts の設定
parameter.ts を自身の環境に合わせて修正していきます。
modelId は先に説明した通り、Claude v2.1 を使いますので、Claude v2.1 の modelId にします。
cwLogsLogGroups は Lamnda と API Gateway の CloudWatch ログを指定しました。
export const devParameter: AppParameter = {
env: {
account: "<アカウントID>",
region: "ap-northeast-1",
},
language: "ja",
envName: "Development",
modelId: "anthropic.claude-v2:1",
cwLogsLogGroups: [
"/aws/lambda/aiops-app-putItemFunction-H1cPrneg0xhR",
"/apigateway/aiops-app",
],
// It's just sample query. Please you optimize to your situation.
cwLogsInsightQuery: "fields @message | limit 100",
databaseName: "aiops_db",
albAccessLogTableName: "alb_access_logs",
cloudTrailLogTableName: "cloud_trail_logs",
xrayTrace: true,
};
デプロイ
cdk deploy
通常の CDK のデプロイと同じようにデプロイします
$ npm install
$ npx cdk deploy --all --require-approval never
Slack App 設定 2
Slack App の設定
Git の手順にある通り Slack App の設定を行います。
Slack App を Slack チャネルに追加
Git の手順にはありませんでしたが、Slack App を Slack チャネルに参加させる必要があります。該当のチャンネルで、<@アプリ名>を入力させることで参加させることができます。
テスト
テストシナリオ
CloudWatch アラームを発生させるために Dynamo DB に対してProvisionedThroughputExceededException エラーを意図的に発生させました。
CloudWatch アラーム
CloudWatch アラームを発生させ、Slack に通知がきたことを確認します。これは、API Gateway で 5XXエラーが発生したことを意味します。
リクエスト
「エラーの通知内容(アラーム)の内容」を入力し、「ログ取得の開始時間」を入力します。「ログ取得の開始時間」は Slack に通知された時間が自動入力されるのでそのままで良いでしょう。
レスポンス
「FA2 によるエラーの原因の仮説」で意図した回答が得られました。
CloudWatch ログは CloudWatchLogs Insight を利用して、
S3 は Athena を利用して情報が収集されます。
セキュリティ
Git に書かれている通り、Slack のエンドポイントはパブリックに公開されているため、攻撃対象となる可能性があります。 そのため、API Gateway に対し、WAF をアタッチするなど考慮する必要があります。