AWS Lambda とはサーバーレスでプログラムを実行する環境を提供するAWSのサービスです。みたいな説明が多く見られますが、そもそもサーバレスってAWSそのものがサーバなのでサーバレスって表現は戸惑うと思います。
米アマゾン社公式の「AWS Lambda とは」の説明では
Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを実行できるコンピューティングサービスです。
© 2022, Amazon Web Services, Inc.
とあります。EC2インスタンスのようなサーバ管理が必要なサーバが要らないという意味でサーバレスではあるものの、あまりサーバレスという言葉にこだわる必要はありません。要は世間で言われているサーバレスとは、昔から存在する「マネージドサーバ」もしくは「マネージドサービス」の事に過ぎません。マネージドサーバとは、サーバの構築、保守、運用を代行してくれるサービスです。まったくサーバレスの定義と被っています。
そもそも広義には EC2 についても、オンプレミスで自分でサーバラックを購入しサーバーを所有する必要はないのでサーバレスと言えます。オンプレミスの対義語としてサーバレス(クラウド)という定義であれば、Lambdaに限らず AWSを使う時点であらゆるAWSコンポーネントはサーバレスです。サーバレスという言葉がインフルエンサー界隈でブームのようですが、あまり気にしなくて良いでしょう。自己所有せずクラウドサーバを使う事をサーバレスと呼称している一時的なブームに過ぎません。歴史的に今まではオンプレミスが普通だったので、クラウドサーバ=サーバレスという呼び名になっているものの、これから直ぐにサーバはクラウドで常識の時代となるので、そうなればサーバレスは呼ばれなくなります。サーバが無いのではなくクラウドに有るから厳密にはクラウドもサーバレスではないので。
話を戻します。ということで実際にはサーバ上でコードを実行するサービスが AWS Lambda です。安心してください、サーバを使います。勿論、クラウドなのでサーバ管理の手間は省けますし、EC2インスタンスを立ち上げて〜からよりもっと簡単にコードを実行する事ができます。
AWS Lambda とは
前置きが長くなりました。では改めてひとことで AWS Lambda とはなんぞやですが「AWS上でコードを実行できるサービス」です。
サーバレス云々というワードは読者の皆さんが却って混乱するかも知れません。最も理解しやすいのは、EC2インスタンスと Lambda を比較すると良いでしょう。
EC2インスタンス上でコードを実行することもできますが、インスタンスの立ち上げ、設定、サーバ管理までしないとコード実行に辿り着きません。コスト面でも常にスタンバイ状態にしておくならば、スタンバイ時間はAWS課金対象です。
ところが Lambda の場合、まずサーバ設定・管理は不要で、いきなりコードを置いておけば良いだけという手軽さがメリットのひとつです。コスト面も常時時間課金は発生しません。あくまでもコード実行単位の従量課金です。ただし長い処理時間を要するコードの実行はできません。これはデメリットになるかも知れませんが、長時間を要するバッチ処理には向かないことになります。
処理稼働時間は2022年時点で最大15分となっています。これも古い書籍やネット情報では最大5分という記述もあると思いますが、その情報は古いので注意してください。AWSは進化速度が早いので、あっという間に情報が陳腐化していまします。直近1年くらいが情報の賞味期限と思っておいて損はないでしょう。
Lambda の最大のリスクとは
まずは、大事なことなので Lambda を利用するにあたり最大のリスクを書いておきます。
無限ループのコードを実行させてしまうと地獄を見ます。先に書いた通り Lambda は実行単位課金です。無限に再帰的にコールしてしまうコードを実行させると、サーバ性能の良さも相まって知らぬうちに100億回実行とかやらかすと数十万円、数百万円の請求が発生します。Lambda 破産しないよう、くれぐれも無限ループだけは注意を払ってくださいね。
わざと無限ループさせる人は居ないと思いますが、意図しない無限ループの事例をひとつ挙げると、例えばS3にファイルを新規追加するトリガーを仕掛けて、そのアウトプットでS3にファイルを追加するようにしてしまう処理でアウトプット先を同じバケットにしてしまったら、それは無限ループになります。
Lambda で利用可能な言語
実行するコードの言語ですが、次の決められた言語のみに限られます。
- Node.js (JavaScript)
- Python
- Java
- C# (PowerShell)
- Go 言語
- Ruby
古い情報だと、4言語(Node.js、Python、Java、C#)しかサポートされていない記述があると思います。2022年2月現在では上のリストの通りサポート言語が追加されています。
ただし、コンソールのコードエディタでは Node.js、Python、Ruby のみサポートなので、簡単に動かしてみたい場合は、この3言語からお好みの言語を選ぶと良いでしょう。
Lambda の特徴
次に Lambda の特徴を考えて行きましょう。
先ず Lambda は常駐型ではなく、イベントドリブン型となっています。つまり何らかの外部イベント=トリガ条件でコードがキックされる仕組みです。したがって何をきっかけにコードを実行させるかを事前に決めておく必要があります。
トリガは「トリガーを追加」で選ぶことができます。様々なトリガが用意されているのが分かります。画面外にもパートナーイベントソース、つまりAWS外の他社サービスとの連携もできるようになっています。例えば画面下方の緑色のアイコンにS3とあります。これはS3ストレージにファイルを追加した際などの変化をトリガーにして処理実行することが可能ということです。
一番上にある紫アイコン、API Gateway を使うと Ajax つまり GET, POST リクエスト(REST)をトリガとする事も可能です。エンドポイントも貰えるので、PHP や JavaScript から関数をキックすることができます。
API エンドポイントは下例のようなURLとなります。my-test-function は関数名です。
このエンドポイントをコールすれば Lambda 関数が実行されることになります。
Lambda のコスト・料金
気になる料金ですが、Lambda では、1 か月100万リクエスト、 コンピューティング時間は毎秒40万 GB まで無料利用でき、それを超えた分から課金となります。
CPUは x86 と Arm を選べます。メモリは128MBから512MB, 1024MB から 10GB まで選べます。
例えば1ヶ月間で以下の関数を実行したとします
リージョン | アジアパシフィック(東京) |
CPU | Arm |
メモリ | 128 MB |
実行時間 | 1秒間(1,000ミリ秒間) |
リクエスト数 | 10,000,000回(1千万回) |
1,000 万回x1 秒で合計1,000万秒、1,000万回x128MBで計128GB となります。
Lambda (Arm・東京リージョン)の料金は
GB-秒あたり | 0.0000133334 USD |
リクエスト 100 万件あたり | 0.20 USD |
メモリ128MBで1ミリ秒あたり | 0.0000000017USD |
※ 1ミリ秒=1,000分の1秒、1,000ミリ秒=1秒です
なので、無料利用枠を差し引いて 13.13 USD となります。ちなみに同条件でCPUをx86にした場合は 15.97 USD です。
料金計算が複雑ですが、ひとつの目安としてください。厳密に予算見積もりが必要な場合、公式サイトにカリキュレータがあるので、それを利用すれば手計算は不要で自動で算出できます。
今日のところは、ここまでにしましょう。続編をお楽しみに!