LoginSignup
1
1

More than 3 years have passed since last update.

AWS Lambdaで動的コンテンツ配信を考えてみる

Posted at

いつも忘れないように、コンセプトから。

コンセプト

・お金かけてまでやりたくないのでほぼ無料でAWSを勉強する
 →ちょっとしたサービスを起動すると結構高額になりやすい。
・高いレベルのセキュリティ確保を目指す
 →アカウントを不正に使われるととんでもない額を請求されるので防ぐ

先日やってみたチュートリアルをもう少しシンプルに勉強してみようと思います。LambdaとAPIGatewayだけで、HTMLを生成するのが目標です。

いくつかサイトを見てみましたが、
https://triobog.hateblo.jp/entry/2018/09/23/234739
こちらで行っているのを真似します。そのまんまなんで、記載するほどでもないんですが、自分の備忘とちょっとはまったところをがあったので記載してみます。

とりあえずやってみる

まずはLambdaを作成します。デフォルトで作っただけなので、ここは後で書き換えます。
TestLambda1.png

念のため生成したLambdaをテストしてみます。うまくいっているようです。
TestLambda2.png

続いてAPIGatewayを作成します。API名は適当です。この辺はリンク先とは画面が変わっていました。Websocketが使えるようになったからかな。RESTのボタンを押してもプロトコルを選択すると出てくるあたりは「なんで?」って感じでしたけど。
TestLambda3.png

アクションでメソッドを作成していきます。今回は動的に生成と言ってもHTMLを返すだけなのでGetで作成します。
TestLambda4.png

Getのセットアップをしていきます。
TestLambda5.png

前回と同じチュートリアルの画面までやってきました。クライアントからの矢印の順にセットアップしていきます。
TestLambda6.png

URLのパラメーターを設定します。URLの最後にinputMsgで値を設定すると、次に引き渡すことができます。
TestLambda7.png

次に統合リクエストの設定です。受け取ったリクエストをバック側のLambdaに引き継ぐための設定です。今回はinputMsgで引数を受け取っているので、Content-Typeに「application/json」を設定して引き渡します。
TestLambda8.png

続いてLambdaのコードを書き換えます。inputMsgで受け取った値をそのまま返すだけです。
TestLambda9.png

今度は統合レスポンスの設定です。Lambdaからの戻り値を設定します。
TestLambda10.png

統合レスポンスのマッピングテンプレートを開いて、受け取った値をHTMLに埋め込みます。
TestLambda11.png

右側のようにHTMLを記載しておきます。
TestLambda12.png

で、アクションからデプロイします。
TestLambda13.png

APIのデプロイでステージ名を適当に設定します。
TestLambda14.png

デプロイできたのでURLを叩いてみると、テキストのまま表示されています。HTMLはうまく帰ってきているので、問題は最後のレスポンスですね。。。
TestLambda15.png

レスポンスの設定でtext/htmlに変更します。ここの設定でブラウザ側が認識してくれます。
TestLambda16.png

て、ことで再度アクセスしてみます。無事に取得できました。
TestLambda17.png

少し頭を整理してみる

うまくいったものの、このままでいいかは少し考えてみる必要がありそうです。サーバー側(と言ってもサーバーレス)の処理はLambdaで実行できています。前回のチュートリアルと同じようにLambdaにデータベースへのアクセス権限を与えて実装すればいろいろなことはできるでしょう。ただ、問題もいろいろありそうです。ざっと思いつく問題は以下です。

  • HTMLの生成ってこれでいいのか?簡単な記載ならこれでも良さそうだけど、複雑な生成をしようとすると統合レスポンスの記載は不便そう
  • Lambdaの処理でDBアクセスする場合のセキュリティ設定はどうすべきかがまだわかっていません。直接Lambdaにどうこうすることはできないので、APIGatewayの設定をミスしていなければ問題ないのかもしれませんが(APIGatewayをDMZ的な働きにできる?)もうちょっと検討は必要
  • URLからの値を引き渡してDBへのクエリに使う場合はSQLインジェクション対策が必要(普通のアプリと同じ)

一番の問題は1つ目の課題かなぁと思います。事前にいくつかのサイトを調べたんですが、
https://qiita.com/hkusu/items/13af2b1a328719ea2946
だとLambdaでHTMLを生成しています。それでもできなくはないですが、問題は何も解決していないので、もうちょっと考察が必要ですね。一旦今日はここまで。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1