この記事はLaravel #2 Advent Calendar 2018 22日目の記事です。
「いやいや、公式ドキュメントに載ってるがな」と思ったあなた。公式ドキュメントの記述をよく読みましょう。
https://laravel.com/docs/5.7/mail
1 | 'ses' => [ |
公式ドキュメントの方法では、AWSのAPI用にkey
, secret
, region
を設定してあげる必要があります。要するに.env
とかを使って設定するわけですが、これは面倒くさいのです。
EC2にはIAMロールを使って、AWSの他のサービスへのアクセス管理をする仕組みが提供されています。
Amazon EC2 の IAM ロール - Amazon Elastic Compute Cloud
EC2にロックインされることにはなるのですが、AWSの認証情報を自分たちが管理しなくて良いというのは、素晴らしく楽ちんです。
IAMロールからSESを使うときの注意点
通常、LaravelからAWSのサービスを利用する場合は、aws-sdk-phpを利用するのですが、ここに罠があります。S3などはaws-sdk-phpを導入すれば、それだけでIAMロールによる認証がうまくいくのですが、SESはそれだけでは動きません。
そのせいなのか、巷にあるEC2からSESを使ってメール送信するサンプルは、Laravelの公式ドキュメントと同じでkey
, secret
を使う方法がほとんどです。
ではどうしたら良いのかというと、aws-sdk-php-laravelを追加でインストールします。
え?それだけ?という感じですが、2時間程度ハマってしまいましたので…。
とりあえず、SESでIAMロールが使えるようになったのは、下記のPullRequestが取り込まれた後です。2015年の9月なんですね。使い始めた時期によっては、IAMロールを使ったメール送信が難しいタイミングもあったかもしれないです。
https://github.com/aws/aws-sdk-php-laravel/pull/84/files
おまけ
SESに限らずですが、メール送信の動作確認はtinker使うのが楽ちんです。
1 | $ php artisan tinker |
それでは素晴らしいLaravelライフを!
追伸
aws-sdk-php単体で動作するAWSのサービスと、aws-sdk-php-laravelが必要なサービスがなぜあるのか、こんど調べてみようかな。