AWS今年の5月くらいに作ったのだが、そういえばブログにかいてないのを思い出したのでかいておく。普段サイトを作っていて、ものによってはテレビで紹介されたりバズったりすることもある。いうときにCDN置いたりいろいろと対策をすると思うが、その場合静的サイトならS3に置いとけばええやんとなるが、じゃあフォームとかどうすんねんみたいな話になる。いうことで高負荷でも落ちにくいお問い合わせフォームを作ることにした。全体の流れまずはざっくりこんなイメージになる。DynamoDB順番は別にないが、今回はちゃんと動くのを一つずつテストしながら作りたいので、後ろから作っていく。SESの対応が日本ではまだの為、リージョンを今回は全てus-east-1とした。プロビジョニングキャパシティを読み書き各1にするテーブル作成、ARNをコピーしておく。String:鈴木ボタンを押してAppend、Stringで追加可能。このままの状態だとid変えない限りはfirstnameを変えても上書きされてしまう。この辺はRDBMSと大きく違う点。自分で自動インクリメントを定義しなければならない。シーケンス番号カウント用のテーブルを作成アトミックカウンタを使うhttps://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.03.html#GettingStarted.NodeJs.03.04テーブル名:ContactFormSeq●項目追加table_name:ContactFormseq:03Lambdaにプログラム記載(SとかNとかつけなくていいDocumentClientを使う方法にした)※注意attribute_updatesは非推奨のため、UpdateExpressionを使う。Gateway,LambdaはどちらもJSON形式の入力を期待しているため、設定が必要。APIマッピングテンプレートはapplication/x-www-form-urlencodedで間違いない→POSTされてくるデータはURLの後ろにパラメータがくっついてくるので、これにすることでAPI側で受け入れられる。逆にこれにしないとAPIに対してのPOSTは失敗する。適当な名前でAPIをデプロイ。),#end#end}※以下記事より引用させていただきました。VTL全然わかんないです。今回必要なものはLambdaがCloudWatch権限必要ぽいのと、DynamoDBへの書き込み権限は最低限必要なのでそのへんを管理画面で付与する。今後のことも考えて一応DB読み込み権限も付与だけしておく。SはStringなどhttp://docs.aws.amazon.com/cli/latest/reference/dynamodb/put-item.html8完了ページへリダイレクトこのままだとDBに登録後、null値がブラウザに返って来て意味不明なので修正する。Gatewayの処理を変更メソッドレスポンス>既存の200レスポンスを削除、代わりに302レスポンスを登録。レスポンスヘッダーに「Location」と入力。統合レスポンス>既存の200レスポンスを削除、代わりに302レスポンスを選択。integration.response.body.locationとしてAPIをデプロイ。Lambdaのputitem成功時の処理に下記を追記context.succeed({location:"http://hogehoge.com/thanks/"});(URLは適当。実際に使う際にはテーブル名なども変えるのでここも任意に変える必要あり)9リダイレクトテストhttp://hogehoge.com/aws/serverless-form.htmlから送信すると、DBに登録後、設定したURLにリダイレクトされる。10サンクスメール送信お問い合わせフォームなので、登録されたメアドへサンクスメールを送信する。SESは現在東京リージョンでサポート外のため、米国東部バージニア北部を使う。SESの制限SESにアカウントを作成すると、サンドボックス内に作成され、以下の制限がかかる。メールボックスシミュレーターに制限される。メールアドレスまたはドメインからのみ送信可能。↓このままではサンクスメールが送れない。※管理者宛のメールならメールアドレスがわかるはずなのでデフォルトで可能。下記の手順に従い、AWSサポートセンターに制限解除の依頼が必要。Lambda全ソースごちゃっとしたので念のためまとめておく。"この度はお問い合わせありがとうございます。\n確認後、担当者よりご連絡させて頂きます。"お問い合わせありがとうございます。Gateway+Lambda+DynamoDB)でお問い合わせフォームを作ったTweet広告を非表示にする関連記事2018-11-15【タスクランナー】もうキャッシュのせいなんて言わせない。»プロフィールid:hiromode某PR会社勤務。2015年からフロントエンド従事。自分でサービスを作り流行らせるのが目標。主なスキルはHTML,CSS,JavaScript(Vue.js、jQuery),インフラ(AWS、VPS)、CakePHP、Gitなど。備忘録アイデアのつくり方を読んだメモAWSからのメールが迷惑メールになるときWordpress+S3+Cloudfrontで実現する、冗長構成対応の画像配信とメディアアップロードしてS3保存Wordpress等のサイトが500エラーで突然見れなくなった時に疑うメモリ不足とSwap領域について月別アーカイブはてなブログをはじめよう!hiromodeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。