Spring Cloud AWSのSESでアプリケーションとは異なるリージョンにあるSESを使う方法
*1
アプリケーションのリージョンの指定
リージョンの指定は、application.propertiesにこんな感じに設定します。
cloud.aws.region.auto=false cloud.aws.region.static=ap-northeast-1
EC2のメタデータからとってこれる場合はこんな感じになります。
cloud.aws.region.auto=true
SES用のリージョンを設定するConfigurationの作成
アプリケーション用のリージョンを設定してしまうと、SESのAutoConfigurationもそのリージョン情報を使ってしまうので、強制的に別のリージョンを使うようにするConfigurationクラスを追加します。
MailSenderAutoConfigurationの実装を見ると、AmazonSimpleEmailServiceがBean定義されていない場合のみアプリケーションのリージョンを使ってAmazonSimpleEmailServiceClientを生成するようなので、Configurationクラス側でSES用のリージョンをもとにAmazonSimpleEmailServiceClientのBeanを定義してあげます。
@Configuration public class SimpleEmailConfiguration { @Bean public AmazonWebserviceClientFactoryBean<AmazonSimpleEmailServiceClient> amazonSimpleEmailService( @Value("${aws.ses.region}") final String region, final AWSCredentialsProvider credentialsProvider) { return new AmazonWebserviceClientFactoryBean<>(AmazonSimpleEmailServiceClient.class, credentialsProvider, new StaticRegionProvider(region)); } }
SES用のリージョンを設定する
Configurationクラスが受け取るリージョン名をapplication.propertiesに設定します。
aws.ses.region=us-east-1
これでSpring Cloud AWSを使った場合でも、異なるリージョンにあるSESをサクッと使えるようになります。
*1:SESは東京リージョンにないので、アプリケーションを東京リージョンで動かした場合は必ず違うリージョンになってしまう