
【前編】GrailsでAWSのSNSを操作してみた!~メール通知編~
2021.12.20
メール通知編~Grailsを使ってAWSのSNSを操作してみよう!~

(株)ライトコードの小山(こやま)です!
今回は、AWS の SNS を、Grails を使って操作してみようと思います。
具体的には、メールアドレスを登録して、メッセージを通知する処理を実装していきます。
また今回の実装は、「Grails の環境導入」「AWS へのアカウントの登録」が完了している前提となります!
用語について簡単な説明
Grails
Grails(グレイルス)とは、プログラミング言語「Groovy」を使用したフレームワークです。
- Ruby なら、Ruby on Rails
- PHP なら、Laravel
- Python なら、Django
- Groovy なら、Grails
といった感じです。
Groovy
Groovy(グルービー)とは、Java プラットフォーム上で動作する、動的なプログラミング言語です。
一言で表すなら、Java をより扱いやすくした、Java と同様の感覚で扱える言語ともいえます。
フレームワーク
フレームワークとは、アプリケーションを開発するときの、土台となるソフトウェアのことです。
土台が作られていることで、目的のアプリケーション開発を、より短期間で開発することができます。
AWSのSNS
AWS の SNS とは、「Amazon Web Service Simple Notification Service」の略称です。
主に、通知を送るためのサービスとなります。
【準備】Grailsで実装する前にAWSを設定する
AWS の SNS のページより、通知先を指定するトピックを作成します。

トピックの「名前」は、わかりやすい名前を付けましょう。
「表示名」は、メール通知のとき、メールタイトルとして表示されます。
また、トピックを作成すると、トピックに対して ARN というものが割り振られます。
このトピックの ARN は、後で使うので、わかりやすい場所に控えておきましょう。
トピック ARN は、セキュアな情報なので、取り扱いに注意してください。
今回は、メール通知のみを実装するだけですので、AWS の SNS ページで行う作業は、これで終了です。
AWSのCLIを導入しておく
AWS の CLI は、ローカルで動作確認を行うときに使います。
まだ、AWS の CLI を導入していない方は、先に導入しておきましょう。
GrailsでSNSの処理を実装
まずは、Grails アプリを生成していきましょう!
1 | $ grails create-app sns |
次に、コントローラーとサービスを生成します。
1 2 | $ grails create-controller sns $ grails create-service sns |
SNS を使うために、build.gradle の dependencies に、以下の2項目を追加してください。
1 2 3 4 5 | dependencies { ... implementation platform('software.amazon.awssdk:bom:2.5.29') implementation 'software.amazon.awssdk:sns' } |
トピックの送信処理を実装する
では、トピックの送信を行うコードを 、「SnsService.groovy」に実装します。
import に、以下の4項目を追加していきましょう。
1 2 3 4 | import software.amazon.awssdk.regions.Region import software.amazon.awssdk.services.sns.SnsClient import software.amazon.awssdk.services.sns.model.SubscribeRequest import software.amazon.awssdk.services.sns.model.SnsException |
SnsService クラスの中に、下記のコードを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def subscribe() { SnsClient snsClient = SnsClient.builder() .region(Region.AP_NORTHEAST_1) .build() try { SubscribeRequest request = SubscribeRequest.builder() .topicArn("ここにトピックのARNを入力") .endpoint("ここに通知先に設定したいメールアドレスを入力") .protocol("email") .build() snsClient.subscribe(request) } catch (SnsException e) { println(e) } } |
2行目で、AWS のリージョンを指定しています。
大体の方は、東京(AP_NORTHEAST_1)だと思いますが、違うリージョンを利用されている方は書き換えておいてくださいね!
SnsController.groovy の index メソッドに、サービスを呼び出すコードを追加します。
1 2 3 4 | def snsService def index() { snsService.subscribe() } |
通知メッセージを受け取れるようにする
ここで、Grails を一旦実行します。
1 2 | $ grails package $ grails run-app |
「http://localhost:8080」へアクセスし、sns.SnsController へのリンクをクリックすると、真っ白な画面が表示されるかと思います。
AWS の SNS を確認してみると、トピックのサブスクリプションに、メールアドレスが追加されているはずです。
ここで重要なのが、サブスクリプションに登録しただけでは、メールに通知メッセージが届かないこと。
また、登録したメールアドレス宛に、「AWS Notification - Subscription Confirmation」というメールが届いてるはずです。
そのメールを開いて、記載してあるリンクより、サブスクリプションを確認しておきましょう。
そうすることで、通知を受け取ることができるようになります。
通知メッセージを発行する処理を実装
続いて、登録されたメールアドレスに対して、通知メッセージを発行する実装を行っていきます。
「SnsService.groovy」を編集していきましょう。
import に、以下の1項目を追加します。
1 | import software.amazon.awssdk.services.sns.model.PublishRequest |
次に、sendMessage メソッドも追加していきます。
先程と同じく、トピックの ARN を設定し、通知したいメッセージも設定してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def sendMessage() { SnsClient snsClient = SnsClient.builder() .region(Region.AP_NORTHEAST_1) .build() try { PublishRequest request = PublishRequest.builder() .message("ここに送信したいメッセージを入力") .topicArn("ここにトピックのARNを入力") .build() snsClient.publish(request) } catch (SnsException e) { println(e) } } |
最後に、SnsController.groovy の index メソッドに、sendMessage を呼び出すコードを追加します。
1 2 3 4 5 | def snsService def index() { snsService.subscribe() snsService.sendMessage() } |
お疲れさまでした!
実装は、これで完成です。
Grailsを実行して確認してみよう!
ここまで実装できたら、再度 Grails を実行します。
1 2 | $ grails package $ grails run-app |
「http://localhost:8080」へアクセスして、sns.SnsController へのリンクを、クリックしてみましょう。
トピックへ登録したメールアドレス宛に、メッセージが届けば成功です!
プッシュ通知編へつづく!
今回は、Grails で SNS を使うための、最低限の実装をしていきました。
通常であれば、メールではなく、スマートフォンへのプッシュ通知として使うことが多いかと思います。
その場合は、プラットフォームアプリケーションの作成や、アプリケーションエンドポイントの実装などが必要になってきます。
今回、実装したコードの詳細については、以下をご覧ください。
【GitHub:最低限実装(Grails_AWS_SNS)】
https://github.com/KonoLevel1/Grails_AWS_SNS
応用したものについては、以下となります。
【GitHub:応用編実装(Grails_AWS_SNS2)】
https://github.com/KonoLevel1/Grails_AWS_SNS2
さて次回は、一歩進めて AWS の SNS を使って、プッシュ通知機能を実装していきたいと思います。
次回もお楽しみに!
プッシュ通知編はこちら!
こちらの記事もオススメ!
書いた人はこんな人

IT技術10月 31, 2023Cloud Runのいろんな設定を確認してみた
IT技術6月 5, 2023【ISUCON部】ISUCONの存在を知らなかったけど、ISUCON部に参加してみた
IT技術5月 12, 2022DockerでRails環境を構築してみた
ライトコードの日常1月 25, 2022YOUは何しにライトコードへ?〜こやまん編〜