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も追加しています。

さらに細かく検証できたらもう一度追記するかもしれません。