最近LIGの業務でAWS Lambdaを使うことが多くなってきました。
知れば知るほど大変便利なサービスです。今回のBlogでは備忘録としてAWS Lambdaの活用方法であったり、使用するにあたっての注意点についてまとめてみました。この記事を読んで、実際の業務ないし設計やアーキテクト検討されているエンジニアの皆さんにも役立ててもられば幸いです。
AWS Lambdaとは何か
AWS LambdaとはAWSが提供しているサービスです。SQSやタイマーなどをトリガーとして一時的にAWSがコンピューターリソースを用意し、プログラムを稼働するサービスとなります。
あらかじめサーバーを用意せずともプログラムが稼働するため、俗にサーバーレス型のシステムとして使われています。
AWS Lambdaを使うメリット
具体のAWS Lambdaの特徴はご覧の通りとなります。
- AWS内において獲得するコンピューティングリソース(メモリサイズ)の調整が可能
- 起動するコンピューティングのOSやパッチなどについてはすべてAWS側で管理される(フルマネージド型)
- Lambda内は様々なプログラミング言語(Node, Python、Ruby)でプログラム稼働することができる
- SQSやSNS、Cloudwathcのメトリック値の上昇など様々なトリガーでLambdaを起動することが可能
- Lambda自体は同時起動(最大で1000*1)することが可能かつ、独立したコンピューティングで動作することが可能
*1については申請することで上限撤廃することが可能
AWS Lambdaを使う場面
上記のとおりLambda自体はトリガーに応じて一時的にコンピューティングリソースを用意してプログラムを動作するサービスとなります。そのため本流のサーバーとは別に非同期で時間がかかるプログラム実行する場合に使うことが多いです。
筆者自体は以下の例でLambdaを活用してきました。
- データベースのデータを夜間に取得して、S3へアップロード
- 大量ファイルのアップロード並びにダウンロード
AWS Lambdaを使うデメリット
そんなAWS Lambdaですが良いところだけではありません。私自身も使ってみて以下の点がデメリットかなと感じました。
- フレームワークが使えない(プログラム自体はPure JavaやらPHPなどで構築する必要性あり)
- Lambdaのライフサイクル自体が最大で15分のみ
フレームワークが使えないことについては、フレームワークで実施しているようなOR MapperのようなDB操作などは一切使うことができず、自身でSQLインジェクション対策などのセキュリティ対策を施す必要性があります。
またLambdaのライフサイクル自体は15分となり、15分経過すると強制的にシャットダウンします。継続的にプログラムを実行する場合は対策が必要となります(例えばリトライ起動の検討など)。
まとめ
AWS Lambdaはサーバーレス型のコンピューターとして、非同期で一時的に本流サーバーとは別に何かしらのバッチやジョブ実行する場合において有効なサービスとなります。
必要なときのみにプログラム実行すること、豊富なコンピューター資源から大量の重たい処理を実行する場合において、大変有効です。
ただ一方で、開発自体はフレームワークが使えず、Pureな言語のコーディングスキルやセキュリティ対策が求められます。非同期でプログラム実行したい場合は、フレームワークでも様々なサービスが存在しているため、それを使うことも一つの選択肢にもなりえます。
ただしそうなった場合は、サーバーのリソース管理などの手間が増えるリスクもあります。実際の想定利用頻度と照らし合わせて、採用するしないというジャッジメントが必要になるかと考えます。これらを鑑みて設計ないし技術選定をされてみてはいかがでしょうか。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。