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では、
・ITの上流から下流まで一気通貫のワンストップソリューションをご提供。
・AIやクラウドのITインフラなど、先進的なIT技術のコンサルティングから要件定義 / 設計開発 / 実装、保守運用に至るまでの統合的な支援にコミット。
・少ないエンジニアで事業が成長する仕組みづくりの実現。
・エンジニアが喜ぶ、採用しやすい環境づくりの実現。
・高速なアジャイル開発環境の実現。
・自社プロダクトとしてPrismScalerを展開。
上記事業内容を進行しております。
※「開発者ブログ」では、エンジニアの入門編として有益な情報を無料公開しています。
ご相談やお問い合わせは「株式会社Definer」へ。

8. Definerに関して。

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