SES関連のコンストラクト紹介

Agaroot IT Partners(AITP)のtomoです。

前回の記事でSESのドメイン検証を行う自前CDKコードを紹介しましたが、その後Construct Hubで調べてみるとドメイン検証などSESに関連した設定を行うためのコンストラクトがいくつか見つかりました。

今回はそのうち2件を紹介できればと思います。
尚、SESそのものの概略は前回の記事で説明しておりますので、よければそちらをご参照ください。

Construct Hubとは

Construct Hubは一般公開されているコンストラクトライブラリを検索、使用することができるプラットフォームです。
https://constructs.dev/

どのライブラリもnpmレジストリに公開され、かつOSSであるライブラリですので、OSSライセンスなどに気をつければどなたでもビジネス用途でもライブラリを使用することができます。Construct Hubに公開されるライブラリの詳しい条件については下記ページ内の”How can I add my construct to Construct Hub?”をご参照ください。
https://constructs.dev/contribute

Constructs Hubの詳細については、こちらの紹介ブログも参考になるかと思います。
https://aws.amazon.com/jp/blogs/news/announcing-general-availability-of-construct-hub-and-aws-cloud-development-kit-version-2/

SES関連のコンストラクト

サンプルコード

今回紹介するコンストラクトを使用したサンプルコードを載せておきます。

#!/usr/bin/env node
import "source-map-support/register";
import * as cdk from "aws-cdk-lib";
import { CdkSesStack } from "../lib/cdk-ses-stack";

const app = new cdk.App();
new CdkSesStack(app, "CdkSesStack", {
  // アカウント及びリージョンの指定をしないと @seeebiii/ses-verify-identities の利用でエラーが起こりました
  env: {
    account: process.env.CDK_DEPLOY_ACCOUNT || process.env.CDK_DEFAULT_ACCOUNT,
    region: process.env.CDK_DEPLOY_REGION || process.env.CDK_DEFAULT_REGION,
  },
});
import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";
import * as sesVerifyIdentities from "@seeebiii/ses-verify-identities";
import * as iam from "aws-cdk-lib/aws-iam";
import { SesSmtpCredentials } from "@pepperize/cdk-ses-smtp-credentials";

export class CdkSesStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // ドメイン検証を行いたい場合はここから
    new sesVerifyIdentities.VerifySesDomain(this, "SesDomainVerification", {
      domainName: "{送信元メールアドレスに使用するドメイン名}",
    });
    // ドメイン検証を行いたい場合はここまで

    // SMTP認証情報を作成したい場合はここから
    const user = new iam.User(this, "SesUser", {
      userName: "ses-user",
    });
    new SesSmtpCredentials(this, "SmtpCredentials", {
      user,
    });
    // SMTP認証情報を作成したい場合はここまで
  }
}

@seeebiii/ses-verify-identities

@seeebiii/ses-verify-identitiesはドメインやEメールの検証を行うのに役立つライブラリです。

特にドメイン検証においては、ドメインがRoute53で管理されていれば検証に必須なTXT/MXレコードの他、DKIM用のレコードも作成してくれます。

サンプルコードに記載した通り、私が試してみたところアカウント及びリージョンの指定がないと以下のエラーが起こるようなので、その点にはご注意ください。

Error: Cannot retrieve value from context provider hosted-zone since account/region are not specified at the stack level. Configure "env" with an account and region when you define your stack.See https://docs.aws.amazon.com/cdk/latest/guide/environments.html for more details.

テストメールの送信も無事に成功しました。

AWS CDK Ses Smtp Credentials

SESにはAPI(AWSCLIやAWS SDKなどでの操作)だけでなくSMTPホストとしてメール送信を行えるようにする機能があるのですが、その際の認証情報を作成するためのライブラリがAWS CDK Ses Smtp Credentialsです。

このライブラリを利用すればSMTPでのメール送信に用いる認証情報をSecrets Managerのシークレットに保存してくれます。

実際に下記ページを用いてテストを試みたところ、無事にメール送信に成功しました。
https://smtpserver.com/smtptest
念の為テスト時の設定を記載しておきます。

  • SMTP Hostname: SESマネジメントコンソール の SMTP設定 に記載された SMTP エンドポイント
  • Port: 25
  • SSL: チェックをつけない
  • TLS: チェックをつける
  • Authentication: チェックをつける
  • Username: ライブラリにより作成されたシークレット参照
  • Password: ライブラリにより作成されたシークレット参照
  • Mail From: 検証が済んでいるドメインのメールアドレスなら何でも
  • Mail To: 任意の送信先メールアドレス
  • Username: ライブラリにより作成されたシークレット参照

まとめ

今回はConstruct HubからSES関連のコンストラクトライブラリを2つ選んで試してみました。どちらも少し面倒だったり間違えやすい設定をCDKで実現してくれます。

私も自前でコードを記述するだけでなく、車輪の再発明を防ぐためにConstruct Hubでライブラリを探すことも視野に入れてCDKを活用していきたいと改めて思いました。

本記事が皆様にとっても参考になれば幸いです👋

関連するタグ