【Bedrock×Step Functions】AWS障害情報を日本語訳してメール通知
概要
AWS Health Event(AWS障害情報)をEventBridgeで検知し、Step Functionsをトリガーして、Bedrockを呼び出し、AWS障害情報を日本語訳して、SNSでメール通知します
背景
AWS Health Dashboardを見て分かるとおり、AWSの障害情報が英語になっているためです
前提
Bedrockでモデルアクセスが有効になっていること
※Claude 3 Haikuを利用します
構築
SNS
トピックを スタンダード
で作成します
サブスクリプションを作成します
任意の宛先メールアドレスを入力してください
宛先メールアドレスにサブスクリプション確認用のメールが届くため、リンクを右クリックしてコピーします
サブスクリプションの確認
をクリックします
コピーしたURLを入力し、サブスクリプションの確認
をクリックします
サブスクリプションが 確認済み
になりました
Step Functions
以下のコードをコピペします
※今回は、Claude 3 Haikuを利用しますが、言語モデルによって、Parametersの設定が異なるため注意してください
※detail-type
のように「-」ハイフンを含む文字列を指定する場合は、$.detail-type
ではなく、$.["detail-type"]
にする必要がありました
{
"Comment": "Translate Health Event into Japanese and send an email notification.",
"StartAt": "Translate Health Event",
"States": {
"Translate Health Event": {
"Type": "Task",
"Resource": "arn:aws:states:::bedrock:invokeModel",
"Parameters": {
"ModelId": "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0",
"Body": {
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 4000,
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text.$": "States.Format('あなたは優秀な翻訳者です。以下の英語の文章を適切な日本語に翻訳してください。日本語訳した内容のみ出力してください。\n\n英語:{}\n\n日本語:', $.detail.eventDescription[*].latestDescription)"
}
]
}
]
},
"ContentType": "application/json",
"Accept": "*/*"
},
"ResultPath": "$.result",
"ResultSelector": {
"translate.$": "$.Body.content[0].text"
},
"Retry": [
{
"ErrorEquals": [
"States.ALL"
],
"BackoffRate": 2,
"IntervalSeconds": 5,
"MaxAttempts": 5
}
],
"Next": "Send Email"
},
"Send Email": {
"Type": "Task",
"Resource": "arn:aws:states:::sns:publish",
"Parameters": {
"Subject.$": "$.['detail-type']",
"Message.$": "States.Format('日本語: {}\n\naccount: {}\n\nservice: {}\n\ntime: {}\n\nregion: {}\n\nresources: {}\n\neventScopeCode: {}\n\n英語: {}', $.result.translate, $.account, $.detail.service, $.time, $.region, $.resources, $.detail.eventScopeCode, $.detail.eventDescription[*].latestDescription)",
"TopicArn": "SNSトピックのARN"
},
"End": true
}
}
}
コード
からコピペします
設定
から ステートマシン名
を入力して 作成
をクリックします
EventBridge
ルール
を作成します
イベントパターン
{
"source": ["aws.health"]
}
あとは、Health Event(AWS障害情報)が発生するのを待つだけです…
テスト
Eventを手動で発生させて、メールが届くか確認します
イベントパターンの変更
テストするために一時的に test
に変更します
{
"source": ["test"]
}
テスト用イベントの送信
イベントバス
から イベントの送信
をクリックします
項目 | 値 |
---|---|
イベントバス | default |
イベントソース(source) | test |
詳細タイプ(detail-type) | AWS Health Event |
イベントの詳細(detail)
に以下のJSONを入力します
{
"eventArn": "arn:aws:health:ap-southeast-2::event/AWS_ELASTICLOADBALANCING_API_ISSUE_90353408594353980",
"service": "ELASTICLOADBALANCING",
"eventTypeCode": "AWS_ELASTICLOADBALANCING_OPERATIONAL_ISSUE",
"eventTypeCategory": "issue",
"eventScopeCode": "PUBLIC",
"communicationId": "4826e1b01e4eed2b0f117c54306d907c713586799d76d487c9132a40149ac107-1",
"startTime": "Thu, 26 Jan 2023 13:19:03 GMT",
"endTime": "Thu, 26 Jan 2023 13:44:13 GMT",
"lastUpdatedTime": "Thu, 26 Jan 2023 13:44:13 GMT",
"statusCode": "open",
"eventRegion": "ap-southeast-2",
"eventDescription": [{
"language": "en_US",
"latestDescription": "Actions speak louder than words"
}],
"affectedAccount": "123456789012",
"page": "1",
"totalPages": "1"
}
※テストが完了したら、イベントパターンを元に戻すことを忘れないでください
最後に
EventBridgeやCloudWatchで監視設定をたくさん入れているのですが、生成AI(Step Functions + Bedrock)でひと手間加えて通知することが、今後の主流になりそうです
次回は、GuardDuty + Bedrock(Knowledge Base)で、GuardDutyの通知内容をカスタムして、メール通知してみたいと思います
Discussion