オフィス狛 技術部のKoma(Twitterアカウントの中の人&CEO)です。
前回は、Webサイトの問い合わせフォームから問い合わせされた内容をS3バケットへテキスト形式で保存するところまで行いました。
今回は、S3に保存されたら、その内容をメールで送信したいと思います。
※メールを送信する為のAWS SES(Simple Email Service)については説明を省きます。SESの設定が終わった状態で下記の手順を行って下さい。
1)ポリシー(Policy)の作成
まずは、AWSコンソール上のIAMのページへ遷移し、左側のメニューから「Policies」を選択。その後、左上の「Create policy」をクリックします。
Serviceは、「CloudWatch Logs」
Actionは、「CreateLogStream」、「CreateLogGroup」、「PutLogEvents」
Resourceは「all resources」を選択して、
右下の「Review policy」をクリックします。
最後にNameとDescriptionを入力し、「Create policy」を選択します。
作成に成功しました。
2)ロール(Role)の作成
続いてロールを作成していきます。先程と同じくAWSコンソール上のIAMのページへ遷移し、左側のメニューから「Roles」を選択します。
Select type of trusted entityは「AWS service」を選択。
Choose the service that will use this roleは「Lambda」を選択して、
右下の「Next: Permissions」をクリックします。
まずはFilterで「Policy type」を選択します。
続いてAttach permissions policiesでは「AmazonSESFullAccess」をチェックします。
(検索ボックスで「SES」と入力すると、フィルターが掛かって選択が楽です)
次にFilterで「Customer managed」を選択し、先程作成したポリシーにチェックを入れます。
(検索ボックスの中身を消さないと一覧に出て来ないのでご注意を)
右下の「Next: Review」をクリックします。
最後、Role nameを入力して、右下の「Create role」をクリックします。
作成に成功しました。
3)Lambda Functionの作成
AWSコンソール上のLambdaのページへ遷移し、「Create a function」を選択。
「Author from scratch」を選択し、Name等の必要な情報を入力します。
Runtimeは「Node.js」を選択して下さい。
Roleは「Choose an existing role」を選択し、Existing roleは、先程作成したロールを選択します。
作成直後の状態です。
ここで、左側の「Add triggers」から、「S3」を選択します。
対象のバケットを選択し、Event typeは「PUT」を選択します。 「Add」をクリックします。
続いて、Node.jsのプログラムを貼り付けます。
貼り付けるプログラムは以下の通りです。
'use strict';
console.log('Loading function');
const aws = require('aws-sdk');
const s3 = new aws.S3({ apiVersion: '2006-03-01' });
const ses = new aws.SES({ apiVersion: '2010-12-01', region: 'us-east-1' });
exports.handler = (event, context, callback) => {
const bucket = event.Records[0].s3.bucket.name;
const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const params = {
Bucket: bucket,
Key: key
};
s3.getObject(params, (err, data) => {
if (err) {
console.log(err);
const message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`;
console.log(message);
callback(message);
} else {
const json = JSON.parse(data.Body.toString());
const message = `
名前: ${json.name}
MAIL: ${json.email}
問い合わせ日時:
${json.date}
問い合わせ内容:
${json.comments}
`
const params = {
Destination: {
ToAddresses: [process.env.TOADDRESS]
},
Message: {
Body: {
Text: {
Charset: "UTF-8",
Data: message
}
},
Subject: {
Charset: "UTF-8",
Data: "フォームからのお問い合わせ"
}
},
Source: process.env.SOURCEADDRESS
};
ses.sendEmail(params, function (err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});
}
});
};
プログラムに環境変数を使っているので、値を設定します。
SOURCEADDRESSが送信元(=from)アドレスで、
TOADDRESSが送信先(=to)アドレスです。
以上でLambdaの設定が完了となります。
Lambda作成後、前回作成した問い合わせフォームから、問い合わせを行うと・・・
この後、S3側のトリガー設定などが残っているのですが、以降は、独自ドメインの設定を行った後にやって行こうと思います。
と言う事で、WebサイトへのアクセスはS3のURLを利用しているので、 次回はRoute53を使用して、独自ドメインでの運用を可能にしていきたいと思います。
次回:Amazon S3 で サイト公開(HTTPS)する。(4)Route 53を使用した独自ドメイン運用
前回:Amazon S3 で サイト公開(HTTPS)する。(3)問い合わせフォーム準備編その1
AWS , HTTPS , Lambda , S3
0 件のコメント:
コメントを投稿