こんにちは、ささそらとです。
今回はAWSのLambdaについて説明していきます。
Lambdaは、サーバレスでプログラムを動作することができるサービスになります。
本来、何かしらプログラムを動作させようとするとサーバを構築したり、構築したサーバに動作環境を構築する必要があります。
簡単にどういったことが実現可能かを記載していこうかと思います。
Lambdaでできること
サーバレスであるため、サーバのスペックをあまり意識する必要がありません。
プログラム言語は、nodejs、java、pythonなど使用することができます。
管理コンソール上で、関数の作成を行えばインラインエディターですぐにプログラムを書いて実行することも可能です。(javaは使用できませんが、nodejsとpythoはインラインエディターで管理コンソール上で修正が可能)
他のサービスとの連携が豊富で、API Gatewayと連携すればよくあるRestAPIとしての実装が可能であったり、S3やDynamoDBと連携すれば、ファイルが格納されたタイミングで起動やテーブルのレコード追加したタイミングで起動などもできます。
他にもAWS IoTのエンドポイントとしても利用可能で、MQTTのあるトピックがきたらこのLambdaを実行するといったことも可能です。
Lambdaの注意点
簡単に使用できるLambdaですが、いくつか注意点があります。
以下の注意点が要件的に問題ないかあらかじめ検討する必要がなります。
実行時間の制限がある
現在(2019年12月)は、最大処理時間が15分になっています。(少し前は5分でした。。。)
したがって、時間がかかる負荷の高い処理は、タイムアウトする恐れがあります。
例えば、大量のデータを処理したり解析したりなどです。
ただ、Lambda毎に使用メモリを割り当てることが可能で、メモリー数を上げれば処理速度が上がったりします。(ただ、意味なく大きなメモリを使用してしまうと料金に加算されてしまうので調整が必要になるかと思います)
もし、15分で足りない場合はEC2の使用を検討しましょう。
同時実行数の制限がある
現在(2019年12月)は、最大同時実行数が1,000になります。
(サポートに申請すれば上限をあげることも可能)
ですので、急に大量の処理を実行してしまうと1,000を超えたものがエラーになってしまいます。
色々、解決方法はございますが、私がよくしていたのが、SQSというキューサービスを利用して、一旦キューに溜めて少しづつ処理させる方法です。
一気に処理の要求を流さずに一旦歯どめを作るイメージです。
開発を行う際に非機能要件などがあるかと思いますので、使用の際は注意いただければと思います。
RDBとの相性があまりよくない
MySQLなどデータベースシステム側で同時接続数の制限があったりします。
そのため、Lambdaを複数起動した際に個々のLambdaがデータベースに接続してデータベース側の同時接続数を超えてしまいます。
javaとかですとJVM上のコネクションプールを利用したりなど、接続を使いまわしたりできるのですが、Lambdaは基本的に個々の関数が独立して起動するので、それができなさそうです。
結構、アンチパターンとして記載されていたりしますので、使用する際はご注意いただけたらと思います。
料金について
簡単にですが、料金体系についても記載しておきます。(具体的な料金はAWSのサイトを参照いただけたらと思います)
Lambdaの料金体系は以下の2つです。
- 実行した回数
- 実行時間と設定したメモリ
「実行した回数」については、記載の通りLambdaを起動した回数になります。
「実行時間と設定したメモリ」についてはLambdaで設定したメモリ数と実行時間によって課金されます。(コンピューティング料金と言われたりします。)
簡単に言いますと大きいメモリで長い時間動作させてしまうと料金が高くなります。
まとめ
いかがでしたでしょうか。
便利なLambdaですが、いくつか注意点もあり、要件と一致するかあらかじめ確認が必要なところもあります。(私もAWSの構成を設計する際に色々と悩まされました)
同じ境遇の方がおられましたら少しでもお力になれればと思います。
コメント