DEVELOPER BLOG

開発者ブログ

HOME > 開発者ブログ > 【Terraform入門】TerraformでAmazon SESを作成する - PrismScaler

【Terraform入門】TerraformでAmazon SESを作成する - PrismScaler

1. はじめに

こんにちは!株式会社Definerの阪本です!
今回は、TerraformでAmazon SESを作成する方法をご紹介したいと思います。

2. 目的・ユースケース

この記事では、「クラウドリソースをコード化する」という目的に向けて、Terraformという技術を活用します。
ITの現場で、TerraformでAWS SESを作成したいときに、参考になる情報やプラクティスをまとめています。

3. TerraformでAmazon SESを作成する

Amazon SESはSimple Email Serviceの略で、Amazonが提供するメール配信サービスです。
すぐに設定でき、トランザクション、マーケティング、大量の E メール通信など、いくつかの E メールのユースケースをサポートします。
 
今回は、Amazon SESをTerraformで作成していきます。
 
まずは、以下のようなTerraformファイルを作成します。
${ドメイン名}は、任意のドメイン名に変更してください。
 
provider "aws" {
  region     = "ap-northeast-1"
}

resource "aws_route53_zone" "primary" {
  name = ${ドメイン名}
}

resource "aws_ses_domain_identity" "ses" {
  domain = ${ドメイン名}
}

resource "aws_route53_record" "ses_record" {
  zone_id = "${aws_route53_zone.primary.zone_id}"
  name    = "_amazonses.${aws_route53_zone.primary.name}"
  type    = "TXT"
  ttl     = "600"
  records = [aws_ses_domain_identity.ses.verification_token]
}

resource "aws_ses_domain_dkim" "dkim" {
  domain = ${ドメイン名}
}

resource "aws_route53_record" "dkim_record" {
  count   = 3
  zone_id = "${aws_route53_zone.primary.zone_id}"
  name    = "${element(aws_ses_domain_dkim.dkim.dkim_tokens, count.index)}._domainkey.${aws_route53_zone.primary.name}"
  type    = "CNAME"
  ttl     = "600"
  records = ["${element(aws_ses_domain_dkim.dkim.dkim_tokens, count.index)}.dkim.amazonses.com"]
}                
このTerraformファイルを使ってリソースを作成します。

Terraformを実行してしばらくすると、SESのIdentitiesのステータスがPendingからVerifiedに変わります。

4. Amazon SESでメール送信をしてみる

作成が完了したら、Amazon SESを使って実際にメールを送信してみます。
 
メール送信のAPI実行は、Lambdaを使うこととします。
Lambda作成の注意点として、SESの権限を持ったIAMロールを付与してください。
以下のコードをコピペしてLambdaを作成します。
 
import boto3
from botocore.exceptions import ClientError
 
    SENDER = ${送信元メールアドレス}
    RECEIVER = ${送信先メールアドレス}
    AWS_REGION = "ap-northeast-1"
    SUBJECT = "メールの件名です"
    # non HTML body of the email
    BODY_TEXT = (
                "メール本文です"
                )
                
    # The HTML body of the email.
    BODY_HTML = """<html>
    <head></head>
    <body>
    <p>メール本文です</p>
    </body>
    </html>
        """ 

    CHARSET = "UTF-8"
    client = boto3.client('ses',region_name=AWS_REGION)
    try:
        response = client.send_email(
            Destination={
                'ToAddresses': [
                    RECEIVER,
                ],
            },
            Message={
                'Body': {
                    'Html': {
                        'Charset': CHARSET,
                        'Data': BODY_HTML,
                    },
                    'Text': {
                        'Charset': CHARSET,
                        'Data': BODY_TEXT,
                    },
                },
                'Subject': {
                    'Charset': CHARSET,
                    'Data': SUBJECT,
                },
            },
            Source=SENDER,
        )
    except ClientError as e:
        print(e.response['Error']['Message'])
        return f'Failed with {e}'
    else:
        print("Email sent! Message ID:"),
        print(response['MessageId'])
        return "Email Send DONE"                
Lambdaをキックすると、メールが飛ぶことが確認できました!

5. 引用・参考記事

6. 独自ソリューション「PrismScaler」について

・ PrismScalerは、開発・運用を要さずにたった3ステップで、AWSやAzure、GCPなどのマルチクラウド基盤構築を実現するWebサービスです。
・ クラウド基盤にまつわる「自動構築」「自動監視」「問題検知」「構成可視化」などの効率化を実現し、クラウドエンジニア、SRE/DevOpsエンジニアが行う泥臭く大変な作業を肩代わりするソリューションです。
・ クラウド基盤構築/クラウド移行や、クラウドの保守運用・コスト最適化など幅広い利用シーンを想定しており、IaaSやPaaSを適切に組み合わせた数百を超える高品質な汎用クラウド基盤を容易に実現できます。
 

7. お問合せ

本記事では、入門編として有益な情報を無料公開しています。ご相談やお問い合わせは「株式会社Definer」へ。

8. Definerに関して。

・ Definer Incは、ITの上流から下流まで一気通貫のワンストップソリューションをご提供しております。
・ AIやクラウドのITインフラなど、先進的なIT技術のコンサルティングから要件定義 / 設計開発 / 実装、保守運用に至るまでの統合的な支援にコミットしています。
・ DevOpsとCI/CDコンサルティングにより「少ないエンジニアで事業が成長する仕組みづくり」「エンジニアが喜ぶ、採用しやすい環境づくり」「高速なアジャイル開発環境」を実現しています。
・ また、自社プロダクトとしてPrismScalerを展開しております。PrismScalerは、AWS、Azure、GCPなどのマルチクラウド / ITインフラの高品質かつ迅速な、「自動構築」「自動監視」「問題検知」「構成可視化」を実現します。