109
108

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS LambdaでHTMLを出力してみた

Last updated at Posted at 2016-02-05

はじめに

AWS Lambdaを最近触り始めたのですが、この仕組みの便利さにもう夢中です。
Lambdaを活用して真っ当なことは、Qiitaにも沢山の事例が出ているので、
せっかくだから、あえて変なことをやってみた結果を投稿していきたいと思います。

最初のチャレンジはEC2なしでWebサイトを構築できるかどうか、
LambdaでHTMLの出力にチャレンジしてみよう、です。

HTMLコードの出力

まずは、シンプルにHTMLコードの出力を試してみました。

index.js
exports.handler = function(event, context){
    context.done(null, "<html><head><title>Hello</title></head><body>Hello HTML</body></html>")
}

結果は

"<html><head><title>Hello</title></head><body>Hello HTML</body></html>"

となりました。ぱっと見、HTMLが出力されているように見えますが、
ブラウザで確認してみるとこんな感じです。
2016-02-06.png

HTMLとして認識されずに、そのまま出力されちゃっています。
うむむ、残念。

Content Typeの設定

そこでAWS API GatewayのMethod ResponseでContent Typeをtext/htmlに指定します。
出力データの形式は標準でapplication/jsonとなっているので、
あえて指定しないとブラウザはデータをJSONと認識してしまいますね。

2016-02-06 (1).png

そうすると、こんどはちゃんとHTMLとして認識してくれました。
ただ、前後にダブルクォーテーションが出ちゃっています。

2016-02-06 (2).png

Mapping Templateの設定

次にチャレンジするのは、API GatewayのIntegrationでMapping Templateを設定します。
ここで、Lambdaの戻りのjsonをhtmlに変換してやります。
2016-02-06 (3).png

さて、結果は・・・・
2016-02-06 (4).png

やった!ダブルクォーテーションがなくなって、ただしいHTMLになりました♪

Lambda + API Gateway でMVC

こうなると調子に乗りたくなってきますね。
Lambdaで直接HTMLコードを出力するのはやめて、きちんとjsonを出力します。

index.js
exports.handler = function(event, context){
    context.done(null, {message: "Hello MVC"})
}

そして、API GatewayのIntegration ResponseのMapping TemplateにHTMLを記述します。
結果がはっきり分かるようにh1タグで囲んでおります。

2016-02-06 (5).png

はてさて、結果は~?

2016-02-06 (7).png

ちゃっちゃちゃ~ん♪きれいにHTMLが出力されました。
ということで、AWS LambdaとAPI Gatewayを使って
なんっちゃってMVCっぽいことが出来ることは確認できました。

109
108
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
109
108

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?