![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi566L7skwC1cmrgydvguybjGXYqPXh8OgQIEj-quqJsJ3mO8OS_OxTDrTIrhKWWgRZLzzynWrYdmzZijfJfZRj1UzCNg3JpyhOU77zvBE1BCzBilQVBfsIsOsKi13DWNov1EpdHst9wO7W/s320/Fotolia_143589026_XS.jpg)
オフィス狛 技術部のKoma(Twitterアカウントの中の人&CEO)です。
前回は、Webサイトの問い合わせフォームから問い合わせされた内容をS3バケットへテキスト形式で保存するところまで行いました。
今回は、S3に保存されたら、その内容をメールで送信したいと思います。
※メールを送信する為のAWS SES(Simple Email Service)については説明を省きます。SESの設定が終わった状態で下記の手順を行って下さい。
1)ポリシー(Policy)の作成
まずは、AWSコンソール上のIAMのページへ遷移し、左側のメニューから「Policies」を選択。その後、左上の「Create policy」をクリックします。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZq30fyAc1NmnJm4qCpls9MIvxTLCkEr61sycmyiY1MbyL50_q5nWpYYOLQQertVElh8YZLsWeiVKjduIhO0ZEizuG0Z1WfzSKccGqbGk4Gau66uI4lIU_xEwWWoEV0StsQJzH4AJrqzs-/s320/Fotor401.png)
Serviceは、「CloudWatch Logs」
Actionは、「CreateLogStream」、「CreateLogGroup」、「PutLogEvents」
Resourceは「all resources」を選択して、
右下の「Review policy」をクリックします。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_H_EDdb9X45jAPDnGLzFcqKWyTX-pBGT_M8T2HWCVtjVpBxvtQNXiOwHvZuKwY64_lpi2O4ivGmvmiozSC6tG7Mz04mgyAJPGdwf8K9eMxn18qyqiWQSoDCKVedUbuZKDowblW77XrUka/s320/Fotor402.png)
最後にNameとDescriptionを入力し、「Create policy」を選択します。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz1zdefAmijFFa4UlZc1_MA_KEsNl5c0qe4qiPPiaQ1j1uhhZ-fW6y7K_Ce4YlGC4e-PkS9CKA38nLfzV536n8Ag52Kzr7bTVlSfFXvRaWQBTeNz3xVlZp6hAnnBr4TJblFmU0oq_HattT/s320/Fotor403.png)
作成に成功しました。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdKltazLtNJWqXESkAjSR3D-mOKfccQhdjU9wh4xt7jjfjhm6c64Og2ZhYDKZr7KXXJobiInilg3WdOwrHO2awP1z1YqjUFZyZ15jOIKtD-3T3x0AH42lV-7y55_XPNMxjj4BKuz6cHTJO/s320/Fotor404.png)
2)ロール(Role)の作成
続いてロールを作成していきます。先程と同じくAWSコンソール上のIAMのページへ遷移し、左側のメニューから「Roles」を選択します。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipxslwTNhus_zBXxN1MJt7_e0I3gjgJKaksQeX-PxugtUFHQYhDU8-f7V6YduLssWygGgEN4WKKIyIWPWARlrg3n1pCIdsdxnREB5lHboW_AGjcz-hsFpBfpFKku-L_k1X-uxKqXsiZvl1/s320/Fotor405.png)
Select type of trusted entityは「AWS service」を選択。
Choose the service that will use this roleは「Lambda」を選択して、
右下の「Next: Permissions」をクリックします。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipg1H4479avMlZTr8X2i083CronA04beURPd6kXWbjUE-PuZjG_A7eBX0lHKhvLBvYDWCYBP_nxTcSmY5oYR1haUrdxhTZMDXd4cIP6_EVZxhb_EvmdN7JJ0f0OLIyKyIUerfXFSlOBKO2/s320/Fotor406.png)
まずはFilterで「Policy type」を選択します。
続いてAttach permissions policiesでは「AmazonSESFullAccess」をチェックします。
(検索ボックスで「SES」と入力すると、フィルターが掛かって選択が楽です)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcCC7jRuow4f9WNBVOhy6bwTM8PJGXPIM4Jx8r-H4SPC4OD7TX2wdmoenVnJkSvL8VSNUrb1aQ2UCcOy25jNVqG6Tn1HVaTuyPEhnfwImTRvlKxcLtWkKFra1yQduMKDBUUWV_7y9gWW_F/s320/Fotor407.png)
次にFilterで「Customer managed」を選択し、先程作成したポリシーにチェックを入れます。
(検索ボックスの中身を消さないと一覧に出て来ないのでご注意を)
右下の「Next: Review」をクリックします。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLpfdu1EFB5tp7iWKZu9YaA7jzG8dMumNmZ8BriR3nCtiDdMzzkuoJB5Z-fUQCqWiSNsITaJ2U-0XIg7sfcC4VC-hC7eUEV70p47MgEqkHDUY3j6a-YV8Uk_o0dpBz4FGu43mbWUeka4KL/s320/Fotor408.png)
最後、Role nameを入力して、右下の「Create role」をクリックします。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizG_UMawDRucJIBjGfb16H0VoPGBp1q4KId22S4e_abKBBT6aGw7nh-NKoEw7UZwrW1Vb95n-0dI61rokQlXjsEEc_oHwx93EoAEr60hId5kkix-7kQyr4DEoi0wGxzRrYKXbYrcc-8j52/s320/Fotor409.png)
作成に成功しました。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKYsA1B7f6aVXQwFoPQQndbWwr8Y1iaZssRQhYmzRhyuSP10DAo5S2E0sQ_yA9T2Rz6CnJ2tNTWn6cLRF2qG1_wNio60r1xwwv5o6dZfqSnnmAINkXFwOI0WPrq6cvGSv_SedRhTGAIwLz/s320/Fotor410.png)
3)Lambda Functionの作成
AWSコンソール上のLambdaのページへ遷移し、「Create a function」を選択。![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsOh-NPXytGTiVRBF5_H7p5aP814PkXGrI_7Lt4Ev-L-tON-LNtiYz99y17Clo8HS5ZULAxpexBWPiKgLqRhpbZiQMqt8aWufKKaeeaBGQ8DfGV0D3Wj71JA_KQX4XCEeCp2Q4XneSYkKP/s320/Fotor411.png)
「Author from scratch」を選択し、Name等の必要な情報を入力します。
Runtimeは「Node.js」を選択して下さい。
Roleは「Choose an existing role」を選択し、Existing roleは、先程作成したロールを選択します。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCbkT6qryUD6cxEiYwPJtYblKzLi5hJlvMsZgGW8m-XvOW1MHILSWO7oBNBXfdWHj9YdS2Z8FW1vcXRX_xA9qegfRREYqWoxi1tkV6d7hjWTBqJ2n5sfEJOndv4cyKUZurVAQDzYsHUygb/s320/Fotor412.png)
作成直後の状態です。
ここで、左側の「Add triggers」から、「S3」を選択します。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrAhWvDcYIEDLOiKEd5TLF6XigoA4RguL7zVVlk2E2BI7yp9-lGm24sKPpyd8lb-JiZos-ugq0BKvlRfryEsVEPrduOhAbC7wyj42-9Y1gfSHZiC2XAQF-DWq9g0PI9BVdFcI6oEymd726/s320/Fotor413_1.png)
対象のバケットを選択し、Event typeは「PUT」を選択します。 「Add」をクリックします。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi24lTPzwbFma7_TnH88Ae3D-TWbcgUgByE5Qylijz8RTuixHPNq-KL5Pnod-DAJhwEfyLfGxfiRLCxM-2-muV5jYHLbs6ZlLvXmXz36e_qEKgfigME4-u6yc-uiWRzxtzGh97F6mTbATmj/s320/Fotor413_2.png)
続いて、Node.jsのプログラムを貼り付けます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUcP3s2eIdGeVd7fJSwqq-GO97JQxrNJVYwtUfjO2S3xpBZF5gni_2wjdFC7Mw-AK-RFRowzNA9m5xyvDEtBQhmbBBD0blDyXtjDLucFN7CK-FazKCDWdrzHuSQTAOZRMca-qWmQEbuLi0/s320/Fotor414.png)
貼り付けるプログラムは以下の通りです。
'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)アドレスです。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigC-xEmoj1h7ZIssUmwVem7WiSqrTPzEQZqgyvkBkiO6LJreh3UjcaS4CWFNkFLuwY_r7Un5VbZWUyttq52oTnEPH7pmEspNfCfn8kBh8qn4PT-nxbv7Mtz2VIIK3w0qu52oiynxC-deXk/s320/Fotor415.png)
以上でLambdaの設定が完了となります。
Lambda作成後、前回作成した問い合わせフォームから、問い合わせを行うと・・・
この後、S3側のトリガー設定などが残っているのですが、以降は、独自ドメインの設定を行った後にやって行こうと思います。
と言う事で、WebサイトへのアクセスはS3のURLを利用しているので、 次回はRoute53を使用して、独自ドメインでの運用を可能にしていきたいと思います。
次回:Amazon S3 で サイト公開(HTTPS)する。(4)Route 53を使用した独自ドメイン運用
前回:Amazon S3 で サイト公開(HTTPS)する。(3)問い合わせフォーム準備編その1
AWS , HTTPS , Lambda , S3
0 件のコメント:
コメントを投稿