概要
Amazon Simple Notification Service(SNS)で、Go言語のSDKを使ってトピックに対してメッセージを送信します。
環境
- Go : 1.14.3
- Mac OS X : 10.15.4
- AWS SDK for Go
シンプルな実装
シンプルなメッセージ送信
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/sns"
)
// TopicARNとRegionは環境に合わせます
const (
TopicARN = "arn:aws:sns:XXXXXXXXXXXXXXXXX"
AwsRegion = "XXXXXX"
)
func main() {
// SNSクライアントの作成
mySession := session.Must(session.NewSession())
svc := sns.New(mySession, aws.NewConfig().WithRegion(AwsRegion))
message := "This is sample message."
// メッセージを送信するための構造体を作成
inputPublish := &sns.PublishInput{
Message: aws.String(message),
TopicArn: aws.String(TopicARN),
}
// メッセージの送信(Publish)
MessageId, err := svc.Publish(inputPublish)
if err != nil {
fmt.Println("Publish Error: ", err)
}
fmt.Println(MessageId)
}
シンプルにメッセージを送る場合の実装です。登録されたサブスクリプションに対してメッセージが送信されます。例として、SQSをサブスクリプションにした場合、以下の通り確認できます。
サブスクリプションごとにメッセージを変える場合
サブスクライブするプロトコルごとのメッセージ
package main
import (
"encoding/json"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/sns"
)
const (
TopicARN = "arn:aws:sns:XXXXXXXXXXXXXXXXX"
AwsRegion = "XXXXXX"
)
func main() {
mySession := session.Must(session.NewSession())
svc := sns.New(mySession, aws.NewConfig().WithRegion(AwsRegion))
message := "This is sample message."
// サブスクリプションのプロトコルごとにメッセージを指定
messageJson := map[string]string{
"default": message,
"sqs": "This is sample message for sqs.",
}
// メッセージ構造体はJSON文字列にする
bytes, err := json.Marshal(messageJson)
if err != nil {
fmt.Println("JSON marshal Error: ", err)
}
messageForSQS := string(bytes)
inputPublish := &sns.PublishInput{
Message: aws.String(messageForSQS),
MessageStructure: aws.String("json"), // MessageStructureにjsonを指定
TopicArn: aws.String(TopicARN),
}
MessageId, err := svc.Publish(inputPublish)
if err != nil {
fmt.Println("Publish Error: ", err)
}
fmt.Println(MessageId)
}
このソースの実行結果は以下の通りです。SQS用に設定したメッセージが送信されています。
このようにサブスクリプションのプロトコルごとに異なるメッセージを送る場合、MessageStructure
にjson
を設定します。また、メッセージはJSON文字列として、トップレベルにプロトコル(今回の例ではsqs
)を指定します。トップレベルにdefault
は必須です。
プロトコルとして指定する値はCLIのリファレンスを参照。
subscribe - Options
なお、メッセージ属性を設定する場合はMessageAttributes
を使います。詳細は以下の公式ドキュメントを参照。
type PublishInput