AWS
lambda
APIGateway

Amazon API Gateway & Lambda & S3 で放置可能なサービスを作ってみた

More than 1 year has passed since last update.

1年半ほど前に書いたこちらの記事、タイミングが良かったのか naoya 砲なのか分かりませんが、色んな方に読んで頂けたようです。

しかし、「放置可能なサービス」というタイトルに反し、この記事で作成した楷書体サービス、とうとうメンテを行うことになりました。

理由は、node v0.10 のサポートを Lambda が打ち切るためです。

コードそのまま node v6 で動かせるとは思いますが、それでも放置できなかったことには変わりありません。謹んでお詫び申し上げます。

いやまぁ1年半もメンテナンスせずに動いてたんだからすごいじゃんと思う。今クリックしたら普通に動いてびっくりした

また、近年 serverless や microservices の流れがあったり、 GCP も Azure も対抗サービス出したりして、Lambda と API Gateway を取り巻く環境は大きく変わりました。自分の会社でも既に実戦投入してますし、そもそもその記事の構成は、今となってはもっといいやり方があります。今から読む方は、昔はこんなだったんだなーと思いながら読んで下さい。


先日発表された API Gateway に、話題の Lambda、S3 と、どれもリクエスト数が少なければタダ同然のサービスなので、組み合わせれば放置可能なサービスが作れるかな? と思って試してみました。


作ったもの

http://kaisho.s3-website-us-east-1.amazonaws.com/

入力された文字列を楷書体の画像にして返すサービスです。

子供の命名書に筆入れするための見本のために作りました。


構成

Kaisho.png


  1. S3 に置かれた HTML を取りに行って

  2. HTML に書かれた JS が API Gateway を叩きにいって

  3. API Gateway が Lambda を発火して

  4. Lambda が楷書体の画像を作って S3 に配置して

  5. API Gateway からのレスポンスで画像のURLが帰ってくるから、その画像を JS で img タグ作って取りに行く

と、こんな感じです。


ソースコード

https://github.com/macoshita/kaisho


  • Lambda ディレクトリに Lambda 用のコードが入ってます

  • site ディレクトリに S3 に上げてるコードが入ってます


知っておくと嬉しいかもな Lambda 知識


  • node_module ごとまとめる必要がある


    • つまり、ビルドが必要なライブラリは動かない可能性がある



  • index.js に export.handler と書いてそこに実装したら、AWS Console の方では index.hander と設定する。 app.js だったら app.handler

  • ImageMagick が入ってる ここ参照


    • ImageMagick に依存したライブラリは普通に利用できる。公式ドキュメントでも gm というライブラリを使ってる



  • Node は v0.10.36 が入ってる ここ参照


知っておくと嬉しいかもな API Gateway 知識


できなかったこと


  • API Gateway が画像を返せればなーと思ったけどできなかった


    • これは現状いけなさそう



  • API Gateway が画像へのリダイレクトを返せればなーと思ったけどできなかった


    • これは頑張ればいけそう



  • API Gateway にクエリパラメータで日本語を渡したらうまく動かなかった。最初 Path パラメータでも動かなかったけど、1日たったら直ってた。多分中の人が修正したんだと思う。


    • ともかく現状(2015/07/28時点)は日本語の扱いが若干あやしいので注意。




まとめ


  • ImageMagick でいけるレベルの画像ジェネレータは割と簡単に作れます。

  • Lambda はガッツリ使うならデプロイが面倒そうです。素直に package.json 書いて npm start で起動してほしいなーと。それ以外はそんなに文句ないけど、java のほうがもしかして現時点では使いやすいかもしれないです(使わずにいってる)。

  • API Gateway のほうがさすがにまだプレビュー版な雰囲気。特に CORS 対応はそのうちもっと楽になると思います。

  • 趣味サービスにはとてもいいと思います。


2015/08/27 追記 : 料金について

8/27までにAPI Gatewayに1,358リクエストがありました。

※S3ロギングぐらいONにしとくべきでした; こんなにストックして頂けるとは……。

私はAWS登録後1年以上経過しているので、API Gateway に1円、S3リクエストで1円、S3容量で1円、データ転送に1円かかりました。lambdaは毎月の無料枠があるので0です。1年経ってないアカウントだと年間無料枠のおかげでデータ転送の1円のみで済むのかな?

ということで、このサービスを維持するには年間4x12=48円ほど必要になることがわかりました。タダじゃないじゃないか!訴訟!

……アカウントが事故らない限りは運用する気がします笑