AWS
ses
gmail

見ながらやろう! AWSを使った「簡単!! 独自ドメインの送受信システム構築」#後編

前編はこちら!!

https://qiita.com/nago3/items/bdcbc7fac604aea9b2c1


続きとして

こちらは「見ながらやろう! AWSを使った「簡単!! 独自ドメインの送受信システム構築」」の後編です。

前編を終えた後というのが前提です。


注意!!!

今回の記事は初学者向け、もしくは自分のようなアドバイスがなくて解決方法を模索している方が対象です。周りに正しい知識や経験を聞ける方や、経験の長い皆様は「ほーん、こんな奴もいるんだ」程度で認識していただけると幸いです。


今回やったこと

メールの送受信を(従業員全体が)使い慣れているGmailでできるようにする

前提条件:

#前編が終わっていること

ローカルディレクトリに[ temporary ]というディレクトリが 存在しない こと

作業内容:

#前編


  1. AWSでSESの設定をする


    1. 送信の設定に使うメールアドレスの登録

    2. 送受信の設定に使うドメインの登録

    3. IAMユーザ作成

    4. メールの受信用S3バケットの作成、設定

    5. Gmailでの送信設定



#後編   <- (今回はこれ)

2. SESの送信制限の解除
1. サポート宛に送信制限解除の連絡をする
3. SESで受信した内容をGmailに転送する
1. ライブラリのデータを自分用に設定し直す
2. Lambda用の作業用[ IAM Role ]を作成する
3. Lambdaの関数作成
4. SESでLambdaの呼び出すルールを追加する
5. 受信用S3バケットにライフサイクルポリシーを設定する
4. 最終確認


2. SESの送信制限の解除

SESの送信制限...

https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/Welcome.html

SESには送信制限が存在しています。同時に制限解除するまでは

サンドボックス内での操作となり、外部との接続は限定的になっています。

まずは送信制限の解除から始めましょう。


2-1: サポート宛に送信制限解除の連絡をする

前編の続きからスタートします

再び[ SES ]のコンソールにログインしましょう

1-1-2.jpg

次にサイドバー[ Sending Statistics ]を見てみましょう

現時点ではサンドボックスのため、制限がかかっています

画面上部の[ Request a Sending Limit Increase ]をクリックしましょう

2-1-1.jpg

今度は[ サポート ]の画面に移動します。

自動で[ SES送信制限 ]までの入力が終わっているはずです

2-1-2.jpg

各種項目を記入していきましょう

まずは分類からです


・規約やAUPはしっかり読みましょう

・メールの種類は今回は取引にしています。システムなど、場合にあった項目を選択しましょう

・メールは許可のない不特定多数に送ることは認められません。

・バウンス等の処理は[ Lambda ] などのサービスを用いて対応する記事を別途作成予定です


2-1-3.jpg

リクエスト内容です


・送信クォータ[ 50000 ]

・最大送信レート[ 14 ]


2-1-4.jpg

最後に制限解除の理由を説明しましょう

皆さんの申請理由をここに述べましょう

終わりましたら[ 送信 ]を押して完了です

2-1-5.jpg

制限解除はAWS側に行ってもらうので、多少時間がかかります


3. SESで受信した内容をGmailに転送する

参考にさせていただいた記事:

https://tech.taiko19xx.net/entry/2018/05/01/195119

今度は現在[ S3 ]で受信しているメールをGmailに転送する設定を行います。

SESでは[ POP3 ]などの受信に対応していません(別途複数のアクションがあるのですが今回は省略)

そのため[ Lambda ]を用いて転送処理を行います。

今回はこちらのライブラリを使わせていただきます

https://github.com/arithmetric/aws-lambda-ses-forwarder


3-1: ライブラリのデータを自分用に設定し直す

まずはライブラリのコードをクローンさせてもらいましょう

ライブラリにアクセスし、URLをコピーします

3-1-1.jpg

今度は自分のローカルに一時的な作業ディレクトリを作って作業をします

以下はコピペである程度作業ができるようにしています。

以下は[ Terminal ]での作業です

[ npm ]のインストール方法はこちらの記事を参照してください

https://qiita.com/Alex_mht_code/items/422f5ce10d9c9d5729b7

cd ~

mkdir temporary && cd temporary/

git clone https://github.com/arithmetric/aws-lambda-ses-forwarder.git

mkdir my-lambda-ses

cp -r aws-lambda-ses-forwarder/example/ my-lambda-ses/

cd my-lambda-ses/

ファイルの中身を書き換えていきます

下のコードをコピペして書き換えてください

書き換える際は好きなテキストエディタをご利用ください

cat << ETX > index.js

var LambdaForwarder = require("aws-lambda-ses-forwarder");

exports.handler = function(event, context, callback) {
// See aws-lambda-ses-forwarder/index.js for all options.
var overrides = {
config: {
fromEmail: "noreply@example.com", // 転送元に使うアドレス
emailBucket: "s3-bucket-name", // 前回作成したS3バケット名
emailKeyPrefix: "mails/", // S3のプレフィックス名
forwardMapping: {
"info@example.com": [ // 受信用に設定したメールアドレス
"example.john@example.com" // 受信メールの転送先Gmailアドレス
]
}
}
};
LambdaForwarder.handler(event, context, callback, overrides);
};

ETX

終わったら[ npm install ]をしてZIP化します

cd temporary/my-lambda-ses/

npm install

zip -r my-lambda-ses ./*

以上で[ Terminal ]画面での作業は終了です


3-2: Lambda用の作業用[ IAM Role ]を作成する

作業はAWSに戻ります

外面左上[ サービス ]から[ IAM ]を選択します

3-2-1.jpg

サイドバー[ ロール ]から[ ロールの作成 ]をクリックします

3-2-2.jpg

エンティティに[ Lambda ]を選択して次のステップに進みます

3-2-3.jpg

[ ポリシーの作成 ]をクリックします

3-2-4.jpg

コード下部の[ S3-BUCKET-NAME ]の部分は。自分のメール用S3バケットの名前に変更してください

{

"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": "ses:SendRawEmail",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::S3-BUCKET-NAME/*"
}
]
}

ポリシーの作成画面に移動するので、[ JSON ]を選択し、上のコードを編集したものを貼り付けます

3-2-5.jpg

ポリシーに名前と説明を入力します

今回は[ lambda-send-mail-policy ]にしました。

3-2-6.jpg

確認のボタンを押すと、コンソール画面で作成されていることが確認できます

3-2-7.jpg

元の画面に戻りロールの設定の続きを行います

更新ボタンを押し、作成したポリシーを検索窓に入力します

ポリシーが見つかったらチェックして先に進みます

3-2-8.jpg

3-2-9.jpg

ロール名に[ lambda-send-mail-role ]と入力すれば完了です

3-2-10.jpg

コンソール画面で作成されていることが確認できます

3-2-11.jpg


3-3: Lambdaの関数作成

受信設定の中心になるLambdaの関数を設定していきます

外面左上[ サービス ]から[ Lambda ]を選択します

3-3-1.jpg

画面内の[ 関数の作成 ]をクリックします

3-3-2.jpg

関数の作成画面になります


名前: mail-fowarding-[Gmailのアドレス]

ランタイム: Node.js 8.10

既存のロール: 先ほど作成したIAMロール


3-3-3.jpg

Lambdaのコンソール画面になります

ロールが間違っていなければ、アクセス許可されているサービスやランタイムが

下の画像のようになっているはずです

3-3-4.jpg

基本設定のタイムアウトを[ 1分 ]に設定します

3-3-7.jpg

コードエントリタイプを[ .zpiファイルをアップロード ]に変更します

Macの画面ですが、先ほど作成したZIPファイルを選択します

3-3-5.jpg

アップロードが完了したら画面右上の[ 保存 ]をクリックします

“SS“ 2019-02-12 at 10.05.42.jpg

以上で[ Lambda ]での作業は完了です


3-4: SESでLambdaの呼び出すルールを追加する

SESのコンソールに移動します

サイドバ[ Rule Sets ]から[ View Active Rule Set ]をクリック

3-4-1.jpg

前回製作したルールをクリック

3-4-2.jpg

[ Actions ]で新しくルールを追加します

[ Add action ]から[ Lambda ]を選択します

3-4-3.jpg

3-4-4.jpg

[ Lambda function ]から先ほど作成した関数を選択します

3-4-5.jpg

作っただけではアクセスの許可がないので、許可します

3-4-6.jpg

以上でSESの設定終了です


3-5: 受信用S3バケットにライフサイクルポリシーを設定する

まずはS3の作成したバケットに移動します

タグの[ 管理 ]から[ ライフサイクル ]、[ライフサイクルルールの追加]を選択します

3-5-1.jpg

ルール名に[ tmp-mail-life-cycle ]と入力します

3-5-2.jpg

3-5-3.jpg

失効の設定を[ 現行バージョン ]で[ 3 ]日後と記入します

これはお好みの数字でどうぞ

3-5-4.jpg

最後に確認をして[ 保存 ]します

3-5-5.jpg

コンソール画面で反映が確認できました

3-5-6.jpg


4: 最終確認

最後にメールが確かに転送されているか確認します

自分が持っている適当なメールアドレスから、受信したい独自ドメインのメールアドレスに送信します

3-5-1.jpg

S3にメールが入っていますね

3-5-2.jpg

メールが先ほど設定した[ index.js ]で設定した形で受信できているはずです

3-5-3.jpg

以上で作業終了です、お疲れ様でした!!


後片付け

最後にローカルディレクトリを片付けましょう

temporaryディレクトリに大事なファイルが存在しないことを確認してください

また、このディレクトリ以外で作成した場合は、各人で判断して削除をお願いします

cd ~/

rm -rf temporary/


終わりに

ここまでお付き合いいただき、ありがとうございました。

以上でSESを使ったGmailでの送受信についての作業を完了します。

前半でも述べたことですが、SESのサービスは日本のキャリアメールには向きません。

そちらを念頭に置いた上でご利用いただくようにお願いします。

アドバイスや意見、感想などございましたら連絡をお待ちしております。


参考、引用

SES-Gmail受信:

https://tech.taiko19xx.net/entry/2018/05/01/195119

Lambdaライブラリ:

https://github.com/arithmetric/aws-lambda-ses-forwarder

npm:

https://qiita.com/Alex_mht_code/items/422f5ce10d9c9d5729b7