しおしお

IntelliJ IDEAのことなんかを書いてます

Spring Cloud AWSで異なるリージョンにあるSESを使ってみる

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は東京リージョンにないので、アプリケーションを東京リージョンで動かした場合は必ず違うリージョンになってしまう