LoginSignup
468
460

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-07-28

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

しかし、「放置可能なサービス」というタイトルに反し、この記事で作成した楷書体サービス、とうとうメンテを行うことになりました。
理由は、node v0.10 のサポートを Lambda が打ち切るためです。
コードそのまま node v6 で動かせるとは思いますが、それでも放置できなかったことには変わりありません。謹んでお詫び申し上げます。

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

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


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

作ったもの

入力された文字列を楷書体の画像にして返すサービスです。
子供の命名書に筆入れするための見本のために作りました。

構成

Kaisho.png

  1. S3 に置かれた HTML を取りに行って
  2. HTML に書かれた JS が API Gateway を叩きにいって
  3. API Gateway が Lambda を発火して
  4. Lambda が楷書体の画像を作って S3 に配置して
  5. API Gateway からのレスポンスで画像のURLが帰ってくるから、その画像を JS で img タグ作って取りに行く

と、こんな感じです。

ソースコード

  • 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円ほど必要になることがわかりました。タダじゃないじゃないか!訴訟!
……アカウントが事故らない限りは運用する気がします笑

468
460
7

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
468
460