この記事では、AWS インスタンスの CPU 使用率が 50% に達したときに Slack 通知を送信する AWS Lambda 関数を作成する方法について説明します。
AWS Lambda は、アマゾン ウェブ サービス (AWS) が提供するサーバーレス コンピューティング サービスです。これにより、サーバーを自分でプロビジョニングしたり管理したりすることなく、コードを実行できます。
これはイベント駆動型です。つまり、s3 で完了したファイルのアップロード、Amazon API Gateway からの HTTP リクエスト、またはその他のさまざまなトリガーなど、他の AWS サービスによってトリガーされたイベントに応答してコードが実行されます。
ここでは、EC2 インスタンスからメトリクスを監視および収集するように Amazon Cloudwatch を設定する方法、それらのメトリクスに基づいて特定のしきい値または条件が満たされたときに通知をトリガーする Cloudwatch アラーム、Amazon Simple Notice サービスを設定する方法について説明します。これらの通知を受信し、最後にラムダ関数が SNS トピックをサブスクライブし、通知を処理して Slack メッセージを送信します。
これを読み進めるには、読者は次の基本的な知識と理解を持っている必要があります
新しい go プロジェクトを作成し、任意の名前を付けます。私は main.go ファイルに「lambdaFunction」という名前を付け、次のコードを貼り付けます
import ( "bytes" "context" "encoding/json" "fmt" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" "net/http" ) type slackMessage struct { Text string `json:"text"` } func handleRequest(ctx context.Context, snsEvent events.SNSEvent) error { webhookURL := "https://hooks.slack.com/services/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" for _, record := range snsEvent.Records { snsRecord := record.SNS sendSlackNotification(webhookURL, snsRecord.Message) } return nil } func sendSlackNotification(webhookURL, message string) { slackMessage := slackMessage{Text: "Cpu usage is above 50%" + message} slackBody, _ := json.Marshal(slackMessage) req, err := http.NewRequest(http.MethodPost, webhookURL, bytes.NewBuffer(slackBody)) if err != nil { fmt.Printf("Error creating request: %v\n", err) return } req.Header.Set("Content-Type", "application/json") client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Printf("Error sending request: %v\n", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { fmt.Printf("Error response from slack: %v\n", resp.StatusCode) } else { fmt.Printf("Successfully sent Slack notification: %v\n", resp.StatusCode) } } func main() { lambda.Start(handleRequest) }
go mod を実行
何が起こっているのか理解してみましょう
handleRequest 関数
sendSlackNotification 関数
Slack にメッセージを送信できるようにする Slack Webhook URL を取得するには、https://api.slack.com/apps に移動します。続行する前に、Slack アカウントにサインインしていることを確認してください。
次のステップは、Go アプリの展開パッケージを作成することです
アプリケーションを構築していきます。
#!/bin/sh ./main
ブートストラップ ファイルを実行可能にする
lamba 関数のアップロード
次のステップでは、Lambda 関数のトリガーを設定します。このトリガーは、関数にメッセージを Slack
に送信するよう促すイベントを定義します。前に述べたように、そのトリガーは仮想マシンの CPU 使用率が 50% 以上になった場合です
この機能を実現するには、最初のステップとして EC2 インスタンスを作成します。
これが完了したら、メトリクスを監視および収集するように Cloudwatch を設定する必要があります
コンディションセクション内
ラムダ関数に戻ります
これが機能することをテストするには、VM に一種のストレス テストを行う必要があります。このテストでは、高い CPU 負荷が発生します。このテストを実行するには、Linux の「stress」ツールを使用します。
何よりもまず、EC2 inatance に「stress」ツールをインストールする必要があります。EC2 インスタンスに接続し、次のコマンドを実行します
sudo apt-get update
sudo apt-get インストールストレス
次のコマンドを使用して CPU のストレス テストを行います
ストレス --cpu 4 --timeout 300
この例では、4 つの CPU ワーカー (並列プロセスまたはスレッドの数) を 300 秒 (5 分) 使用します。ワーカー数とセカンダ数はご希望に応じて調整できます。
Slack を開いて待つと、次のようなアラートが表示されます
ストレス テストの実行中に、Cloudwatch の状態が「データ不足」に変化することに気づく場合があります。これにより、アラームが少し遅れる可能性があります。これを修正するには
これは楽しくて有益だと感じていただけたと思います。間違いがある場合、明確に説明されていない部分がある場合、または何かを見逃していると思われる場合は、お気軽にご連絡ください。あなたのフィードバックは非常に貴重です。ありがとうございます!
github リポジトリへのリンクはここにあります
以上がGo AWS Lambda 関数を使用して Slack 通知を送信するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。