😄
【Go】GoでAWS SNSに接続
はじめに
業務でGoからSNSに接続してSMSを送信するという実装を行いましたが、aws-sdk-go-v2
を使った実装に関する記事がなかなか見つからなかったので、メモ的に書いていこうと思います。
今後実装する方の役に立てれば幸いです!
まずは実装
package main
import (
"context"
"fmt"
"log"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/sns"
)
func sendSMS(phoneNumber string) error {
ctx := context.TODO()
conf, err := config.LoadDefaultConfig(ctx)
if err != nil {
return err
}
snsClient := sns.NewFromConfig(conf)
message := "テストメッセージです"
publishInput := sns.PublishInput{
Message: &message,
PhoneNumber: &phoneNumber,
}
result, err := snsClient.Publish(ctx, &publishInput)
if err != nil {
return err
}
// 今回はIDを出力するよう設定
fmt.Print(result.MessageId)
return nil
}
func main(){
phoneNumber := "+8190xxxxxxxx"
fmt.Printf("phone_number:%s\n", phoneNumber)
if err := sendSMS(phoneNumber); err != nil {
log.Fatalf("Error: %v\n", err)
}
}
ざっくり解説
・AWS設定の読み込み
環境変数やcredentialsの設定をここで読み込んでいる
import "github.com/aws/aws-sdk-go-v2/config"
conf, err := config.LoadDefaultConfig(ctx)
if err != nil {
return err
}
・AWS SNSクライアントの作成
先ほど読み込んだ設定をNewFromConfigの引数に設定
import "github.com/aws/aws-sdk-go-v2/service/sns"
snsClient := sns.NewFromConfig(conf)
・メッセージの設定と送信
この場合、snsClientとは先ほど設定したsns.NewFromConfig(conf)
を指す
message := "テストメッセージです"
publishInput := sns.PublishInput{
Message: &message,
PhoneNumber: &phoneNumber,
}
result, err := snsClient.Publish(ctx, &publishInput)
if err != nil {
return err
}
// 今回はIDを出力するよう設定
fmt.Print(result.MessageId)
・注意点
電話番号に関しては、E.164形式にする必要があります。
E.164形式とは、国際的に一意となる電話番号表記形式
とのことです。
日本の場合、先頭に+81
という国番号から始める必要があります。
AWS SNSはこのE.164を受け付ける設定になっている(?)ので、一般的な番号だと不正な形式ということでSMSを受け取ることはできません。
おわりに
ざっくりではありますが、aws-sdk-go-v2
を使ったSNS接続について見てきました。
一つ一つの挙動について、もっと調べてみたいなと思います!
Discussion