😄

【Go】GoでAWS SNSに接続

2025/02/09に公開

はじめに

業務で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