AWS以外での監視サービスを利用していてメールでしか監視の情報が受信できないことがあったので、AWS SESでメールを受信してからLambdaを経由して社内のチャットツールに連携してみました。
構成イメージ
イメージ作ろうと思ったけど手抜きで・・・
監視ツールなどのサービス
|
| メール送信
↓
SES受信 → S3保存 → Lambda
|
| Webhook
↓
内部チャットツール
AWS SESのIDにドメインを登録
Route53に登録したドメインをIDに登録します。
※Route53だとEasy DKIMで自動で認証までしてくれます。
※Route53以外でもDKIMの設定で発行されたDNSレコードをドメイン側で登録して検証すれば利用できます。
Route53のドメインにMXレコードの追加
東京リージョンを使用しているので10 inbound-smtp.ap-northeast-1.amazonaws.com
の値でMXレコードを作成します。
使用するリージョンにより変わるので、必要に応じて以下の公式ドキュメントで確認してください。
メール受信情報を扱うLambdaの準備
今回は何かするわけでは無いので、デフォルトの内容にログ出力を追加したのみです。
※ここでS3からファイル取得して、mailparserなどのライブラリで読み取るところまでやれば、社内チャットやSlackなどに通知できます。
export const handler = async (event) => {
// 受信した内容をログに出力
console.log(JSON.stringify(event, null, 2))
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
メール受信時のS3バケットの準備
メール情報を保持するS3バケットを作成して、イベントを設定
ファイル追加時のPutでLambdaを起動するようにしておく
※保持期間があるならライフサイクルポリシーで一定期間経過ファイルの削除
AWS SESでメール受信の設定
受信ルールセットを作成
受信ルールの追加
先ほどのルールセットにルールを追加します。
受信するメールアドレスを条件に設定
受信に利用するメールアドレスは、MXレコードに登録されているドメインなら@より前は自由に設定できます。
将来的に使い分けれることを想定して設定しておくのが良いです。
アクションの指定でS3への保存を指定
設定するIAMロールに設定する権限は、アクション時のオプションに応じて変更する必要があるので以下を参考に作成
※画面上でIAMロールを作成できるけど、IAM Policyは自動で作成されない点にちゅうい
ルールセットの有効化
ルールセットはデフォルトでステータスが無効
になっているため、明示的に有効にする必要があります。
SESメール受信内容の連携方式における注意点
-
SES → Lambda
で直接連携- この場合はメール本文が含まれない
-
SES → SNS → Lambda
で連携- メール本文は連携できるが150kbまでの制限あり
- ※サイズに収まるならS3を利用しない、この方式が良さそう
その他
SESにメール受信を設定後、早速試したら以下が発生しましたが、こちらはルールセットの有効化忘れでした。。
Returned Mail: 550 5.1.1 Requested action not taken: mailbox unavailable
参考サイト