Dalam artikel ini, kita akan membincangkan cara mencipta fungsi lambda AWS untuk menghantar pemberitahuan Slack apabila penggunaan CPU bagi tika AWS mencapai 50%.
AWS Lambda ialah perkhidmatan pengiraan tanpa pelayan yang ditawarkan oleh Amazon Web Services (AWS). Ia membolehkan anda menjalankan kod tanpa perlu menyediakan atau mengurus pelayan sendiri.
Ia dipacu peristiwa iaitu kod anda dilaksanakan sebagai tindak balas kepada peristiwa yang dicetuskan oleh perkhidmatan AWS lain seperti muat naik fail yang diselesaikan dalam s3, permintaan HTTP daripada Amazon API Gateway atau pelbagai pencetus lain.
Dalam hal ini, kami akan membincangkan cara menyediakan Amazon Cloudwatch untuk memantau dan mengumpul metrik daripada tika EC2, penggera Cloudwatch berdasarkan metrik tersebut untuk mencetuskan pemberitahuan apabila ambang atau syarat tertentu dipenuhi, perkhidmatan Pemberitahuan Mudah Amazon kepada terima pemberitahuan ini dan akhirnya fungsi lambda melanggan topik SNS, yang akan memproses pemberitahuan dan menghantar mesej kendur.
Untuk mengikuti ini, pembaca harus mempunyai pengetahuan asas dan pemahaman
Buat projek go baharu dan panggil apa sahaja yang anda mahu, saya panggil saya "lambdaFunction" dalam fail main.go anda, tampalkan sekeping kod berikut
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) }
Lari pergi mod
Mari cuba fahami apa yang berlaku
Fungsi handleRequest
fungsi sendSlackNotification
Untuk mendapatkan URL webhook Slack yang membolehkan anda menghantar mesej kepada Slack, navigasi ke https://api.slack.com/apps. Pastikan anda log masuk ke akaun Slack anda sebelum meneruskan.
Langkah seterusnya ialah membuat pakej penggunaan untuk apl Go kami
Kami akan membina aplikasi.
#!/bin/sh ./main
Jadikan fail bootstrap boleh laku
Memuat naik fungsi lamba
Dalam langkah seterusnya, kami akan mengkonfigurasi pencetus untuk fungsi Lambda. Pencetus ini mentakrifkan peristiwa yang akan menggesa fungsi untuk menghantar mesej kepada Slack
Seperti yang saya nyatakan sebelum ini bahawa pencetus akan berlaku apabila penggunaan cpu mesin maya ialah >= 50%
Untuk mencapai kefungsian ini, langkah pertama melibatkan mencipta tika EC2.
Apabila ini selesai, kami perlu mengkonfigurasi Cloudwatch untuk memantau dan mengumpul metrik
Di bahagian syarat
Kami akan kembali ke fungsi lambda kami
Untuk menguji bahawa ini berfungsi, kami perlu meletakkan VM kami di bawah sejenis ujian tekanan. Ujian ini menjana beban CPU yang tinggi. Untuk melaksanakan ujian ini kita akan menggunakan alat "tekanan" dalam linux.
Pertama sekali, kami perlu memasang alat "tekanan" dalam keadaan EC2 kami. sambung ke contoh EC2 dan Jalankan arahan berikut
sudo apt-get kemas kini
sudo apt-get install stress
Gunakan arahan berikut untuk menguji tekanan CPU anda
tekanan --cpu 4 --masa tamat 300
Contoh ini menggunakan 4 pekerja CPU (bilangan proses selari atau benang) selama 300 saat (5 minit). Anda boleh melaraskan bilangan pekerja dan kedua mengikut kesesuaian anda.
Buka Slack dan tunggu anda akan mendapat makluman yang kelihatan seperti ini
Semasa menjalankan ujian tekanan anda, anda mungkin melihat keadaan Cloudwatch berubah kepada "data tidak mencukupi" yang mungkin menyebabkan penggera tertangguh seketika. Untuk membetulkan ini
Saya percaya anda mendapati ini menyeronokkan dan bermaklumat. Sekiranya terdapat sebarang ralat atau jika mana-mana bahagian tidak dijelaskan dengan jelas atau anda rasa saya terlepas sesuatu, sila hubungi. Maklum balas anda amat dihargai. Terima kasih!
pautan ke repositori github ditemui Di sini
Atas ialah kandungan terperinci Hantar Pemberitahuan Slack dengan Fungsi Go AWS Lambda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!