Я пытаюсь добиться следующего: Детали тревоги Cloudwatch поступают в виде JSON на лямбду. Лямбда смотрит на JSON, чтобы определить, есть ли «NewStateValue» == «ALARM», если это происходит == «ALARM», переслать всюJSON получен от SNS через другой SNS.
Я почти достиг этой цели, и у меня есть следующий код:
package main
import (
"context"
"fmt"
"encoding/json"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/sns"
)
func handler(ctx context.Context, snsEvent events.SNSEvent) {
for _, record := range snsEvent.Records {
snsRecord := record.SNS
//To add in additional fields to publish to the logs add "snsRecord.'fieldname'"
fmt.Printf("Message = %s \n", snsRecord.Message)
var event CloudWatchAlarm
err := json.Unmarshal([]byte(snsRecord.Message), &event)
if err != nil {
fmt.Println("There is an error: " + err.Error())
}
fmt.Printf("Test Message = %s \n", event.NewStateValue)
if ( event.NewStateValue == "ALARM") {
svc := sns.New(session.New())
// params will be sent to the publish call included here is the bare minimum params to send a message.
params := &sns.PublishInput{
Message: Message: aws.String("message"), // This is the message itself (can be XML / JSON / Text - anything you want)
TopicArn: aws.String("my arn"), //Get this from the Topic in the AWS console.
}
resp, err := svc.Publish(params) //Call to puclish the message
if err != nil { //Check for errors
// Print the error, cast err to awserr.Error to get the Code and
// Message from an error.
fmt.Println(err.Error())
return
}
// Pretty-print the response data.
fmt.Println(resp)
}
}
}
func main() {
lambda.Start(handler)
}
В настоящее время это отправляет электронное письмо на набор адресовв SNS, связанном с ARN выше.Однако я хотел бы, чтобы в электронное письмо входил полный, идеально отформатированный JSON, полученный первым SNS.У меня есть структура JSON Cloudwatch, определенная в другом файле, она вызывается var event CloudWatchAlarm
Любые указатели были бы великолепны!
Спасибо!