オープンソースデータを使って検索機能を備えたサンプルWebアプリを作成
コンソールでGo on APEXの動作を確認できたところで、もう少し本格的なアプリの作成へと福井さんは進んだ。目指しているのがnoteの検索機能なので、キーワード検索を実装したWebアプリを作ってみることに。
「Webアプリの仕様としては、キーワードが含まれるデータをAPI Gateway、Lambda、Elasticsearch Serviceを介して取ってきたものを表示するものです。サンプルデータはオープンソースで公開しているレストランデータを借りました」(福井さん)
まずが20万件のサンプルデータを読み込むところから始めなければならない。サンプルデータはCSVで提供されているので、これを読み込んで構造体に変換し、Elasticsearch Serviceにインサートする。
「Elasticsearch Serviceにはいくつかライブラリが用意されていますが、今回はその名の通りElasticというライブラリを使って実装してみました」(福井さん)
Lambdaで動いているプログラムでもElasticライブラリを使ってデータを検索。ヒットしたデータをElasticsearch Serviceから取り出して構造体に変換して返す仕組みだ。
実際にアプリを作ってみてわかった、サーバーレス開発のポイントと今後の課題
資料で理解するのと、実際に動くコードを書いてみてわかることには、大きな隔たりがある。福井さんもサンプルアプリを作ったことで、各サービスの設定や実装、デプロイまでの過程を実体験として理解したという。また、API GatewayとLambdaのつなぎ込み、LambdaとElasticsearch Serviceのつなぎ込みの方法も実践的に学ぶことができた。
「検証中にハマったポイントもいくつかあったので、紹介します。ひとつは、API GatewayとLambda間のマッピング設定、もうひとつはAPI GatewayにおけるCORS(Cross-Origin Resource Sharing)の設定です」(福井さん)
API Gatewayで受けたリクエスト情報をLambdaから参照するためには、マッピング設定が不可欠だ。そのテンプレートにはApache Velocityというテンプレートエンジンが使われており、福井さんはその設定につまずいたようだ。
またAPI GatewayでCORSを有効にして、Access-Control-Allow-Originを設定しておく必要もあった。この設定を行なわないと、「'Access-Control-Allow-Origin' header is present on the requested resource.」というエラーが発生し、アプリが正しく動作しない。
「API Gatewayの設定変更が反映されないという問題にも行き当たりました。マッピングの設定は反映されているのに、CORSの設定が反映されませんでした。これはAPI Actions画面のdeploy APIを実行することで反映されたのですが、deployしないでも反映されるものとdeployが必要なものがあるということのようなので、設定変更が反映されなかったらここを疑ってみるといいと思います」(福井さん)
実際にアプリを作ってみたことで、Lambdaのデバッグが思いの外面倒くさいと福井さんは感じたようだ。コードを修正するたびに毎回デプロイする必要がありせいだ。ただし「ローカルでLambdaを動かせるServerlessで開発すれば、その点は解消できるかもしれない」とも語っていた。またデバッグ時には、apex logsコマンドが役立ったそうだ。
アプリ制作を通じてわかったことを元に、福井さんは今後の課題について語った。
「今後、実際のサービスに実装していくためには、Lambdaの言語選定から始めないといけません。ひとりでやるのではなくチームのスキルセットや言語に対するモチベーションを重視して選ばなければなりません。また、Lambdaのログの可視化、分析方法も考えないといけないと感じました」(福井さん)
メインのアプリケーションと使用言語が異なる場合は、言語間の資源の共有が難しいという問題もある。noteのアプリケーションはRuby on Railsで作られており、Lambdaで違う言語を使った場合は変換するなどの工夫が必要になるだろうと福井さんは言う。他にもユーザに公開するサービスなので、APIの認証に工夫も必要だ。
「Elasticsearch Serviceのサポート状況にも気になる部分があります。現状ではVPCに未対応なので、セキュリティ担保はIAMと特定IP許可などで対応しなければなりません。バージョン追従の遅さも気になるところです。2016年6月25日現在、本家は2.3.3が最新になっていますが、AWSで使えるElasticsearch Serviceは1.5.2です。最新のバージョンを使いたい場合は、自前でがんばるしかないのかもしれません」(福井さん)
その他、スケーリングやパフォーマンスに対する懸念なども語られた。これらの課題についてはサービスに使う前提で考えられており、参考になる情報の多いプレゼンテーションだったのではないだろうか。
この連載の記事
-
第8回
デジタル
青森観光アプリ開発コンテスト、緊迫の選定結果をこの目で見た -
第7回
デジタル
ギーク達がリゾート地で火花を散らす青森観光アプリ開発コンテスト -
第6回
デジタル
実践している先達に学び、山形で新しい働き方について考えた -
第5回
デジタル
寒さに負けず、11月11日のJAWS-UG山形を目指そうぞ! -
第3回
デジタル
6月25日はJAWS-UG青森第5回勉強会に行くぞ! -
第2回
デジタル
初登壇からICDP、アドテクまでバラエティ豊かなJAWS-UG青森 -
第1回
デジタル
東北のITの息吹を感じるJAWS FESTA Tohoku 2014開催中 -
デジタル
JAWS-UG東北勉強会レポート - この連載の一覧へ