AWS EKS上のアプリからSESでメールが飛ばせない不具合にどう対処したか
現象
Spring Boot x AWS EKS x Istio x AWS SESって組み合わせでアプリを動かしていますが、SESにメールを送ろうとしても以下のような感じのExceptionが出てメールが送れないという現象に遭遇しました。
Request processing failed; nested exception is org.springframework.mail.MailSendException: Failed messages: com.amazonaws.SdkClientException Unrecognized SSL message, plaintext connection?
ローカルで試す分には問題ないにも関わらず、です。
対処法
仕方がないので、AWS SESをSMTPサーバとしてapplication.yamlに設定してみたら普通に動き出しました。 ワークアラウンドでしか無い気がしますが、誰かの役に立つかもしれないのでメモを残しておきます。
こんな感じです。
spring: mail: host: email-smtp.{region}.amazonaws.com port: 465 protocol: smtps properties: mail: smtp: auth: true username: {your username} password: {your password}
今回は、すぐにデモをしないといけない都合上時間がないので諦めました。
Spring Cloud AWSに乗っかる場合は、FWのコードを解析してどんなリクエストを送ろうとしているのか突き止めれば動かせるようになると思います。
追記[2019.07.26]
これだけじゃ足りないかもしれなくて、IstioのServiceEntryとVirtualServiceも追加しています。
さらに細かく検証できたらもう一度追記するかもしれません。