T1
AWS Lambda ── 関数1つ、0.1秒単位の課金
メタデータ
- 日付
- 年代
- 2010s
- Tier
- T1
- 参照年表
- クラウドコンピューティングの歴史
- 出典数
- 07
- 関連項目
- 02
AWS Lambda は 2014年11月13日、Amazon の年次カンファレンス re:Invent 2014 で発表され、同じ日に プレビュー版 として公開された。イベントに応じてコードの断片 ──「関数」── を実行し、課金はリクエスト数と、コードが実際に動いた時間(100ミリ秒単位)だけ。サーバを選ぶことも、大きさを決めることも、パッチを当てることもない。プレビューを終えて本番利用可能と宣言されたのは 2015年4月9日、2つ目の言語である Java への対応は2015年6月15日だった。
この考え方は今日 サーバーレス と呼ばれている。2014年11月の時点では、言語は1つ、実行時間は60秒まで、リージョンは3つという小さなサービスだった。
何が発表されたか
当日 AWS ブログに載った Jeff Barr の記事は、目標から書き始めている。開発者がコードに集中でき、スケーラビリティや信頼性はあって当然のものとして扱える環境を作りたい、というものだ。会場の記録によれば、発表は2日目の Werner Vogels の基調講演で行われ、同じ講演では Docker コンテナを動かす EC2 Container Service も発表された。
プレビュー版の制約ははっきりしていた。
| 項目 | プレビュー版(2014年11月) |
|---|---|
| 言語 | Node.js のみ |
| メモリ | 関数ごとに 128MB〜1GB |
| 最大実行時間 | 60秒 |
| リージョン | 米国東部(バージニア北部)、米国西部(オレゴン)、欧州(アイルランド) |
| イベントの発生元 | Amazon S3、DynamoDB、Kinesis ストリーム |
| 課金 | リクエストごと+100ミリ秒単位の実行時間 |
| 無料枠 | 月100万リクエストと、最大320万秒の実行時間 |
メモリの設定はメモリだけを決めるものではなかった。Barr によれば、CPU やネットワーク、I/O の帯域の割り当ても、この値に応じて決まる。無料枠の実行時間が「最大」なのも、選んだメモリ量によって変わるためである。
どう動いたか
Lambda 関数は状態を持たないコードである。実行された機械に永続的なデータを残すことはできず、Barr の記事は S3 か DynamoDB を使うよう求めている。イベントが届くと AWS が関数のコピーを起動し、終われば止める。
例として挙げられたのは、AWS の中ですでに起きた出来事への反応だった。S3 のバケットに画像がアップロードされたらサムネイルを作る、DynamoDB のテーブルが変わったら処理する、Kinesis ストリームにレコードが届いたら処理する。Barr は、起動・管理すべき EC2 インスタンスも、予約しておく容量もないことを強調した。請求されるのは処理そのものだけである。
変わったのはこの課金の単位だった。2006年の S3 以来、AWS は容量を「1GB を1か月」や「インスタンス1時間」で売ってきた。Lambda はそれを、リクエスト1回と0.1秒で売った。
プレビューから本番へ
2015年4月9日、Barr は Lambda が本番提供に入ったと告げた。同じ更新で次のものが加わっている。
- 同期呼び出し。イベントを投げるだけでなく、呼び出し側が関数の結果を待てるようになった
- Amazon SNS の通知を起動のきっかけにできる
- Android と iOS 向けの AWS Mobile SDK から関数を呼べる
- IAM ロール1つで済む、簡素な権限モデル
- 同時実行数の既定上限を、プレビュー中の50から100へ
Java はこの更新にはまだ入っておらず、記事は近く対応する予定だと書いていた。実際に加わったのは2015年6月15日で、Barr は Java 8 で Lambda 関数を書けるようになったと告げている。
| 日付 | 出来事 |
|---|---|
| 2014年11月13日 | re:Invent で発表。Node.js のみのプレビュー |
| 2015年4月9日 | 本番提供。SNS トリガー、同期呼び出し、モバイル SDK |
| 2015年6月15日 | Java 8 に対応 |
最初の10年
10周年の記事で Barr は、始まりは Tim Wagner との雑談 ── 開発者がインフラではなくコードに集中できる方法についての ── だったと振り返り、その後 Wagner がこのサービスの PRFAQ(Amazon 社内で使われる、プレスリリースと想定問答の形をとった提案書)を書いたと記している。同じ記事はプレビュー以後に加わったものを年ごとに並べている。
| 年 | AWS によれば加わったもの |
|---|---|
| 2016年 | Python、実行時間上限の延長、VPC 内の資源へのアクセス、環境変数、SAM フレームワーク |
| 2018年 | 任意のプログラミング言語で関数を書けるように |
| 2020年 | 最大 10GB のメモリと6 vCPU、コンテナイメージ、1ミリ秒単位の課金 |
| 2021年 | Graviton(Arm)プロセッサ |
| 2022年 | SnapStart、関数用の HTTPS エンドポイント |
| 2023年 | スケーリングの高速化、レスポンスストリーミング |
いちばん分かりやすい流れは課金の単位で、2014年の100ミリ秒が2020年には1ミリ秒になった。AWS は2024年の利用規模として、150万の利用者と月に数十兆回の呼び出しという数字も示している。AWS 自身の集計である。
Lambda の位置
コードをプラットフォームに預け、サーバを管理しないという発想自体は Lambda が最初ではない。Google App Engine は2008年に、Web アプリケーション丸ごとについてそれを実現していた。Lambda が変えたのは単位である。イベントで起動し、呼び出し1回ごとに課金される1つの関数。サーバーレスという言葉が指すようになったのは、この単位だった。
Lambda は AWS のコンテナサービスと同じ週に登場し、同じ年には Google が Kubernetes をオープンソース化 している。マシンを丸ごと管理せずにコードを動かすという同じ問いに対し、関数とコンテナという2つの答えが並んだ。コンテナのほうの答えを実用的にしたのは、前年の Docker である。
会社としての Amazon は Amazon に、前後の流れは クラウドコンピューティングの年表 にある。
よくある質問
- AWS Lambda はいつ始まったのですか。
- 2014年11月13日に re:Invent 2014 で発表され、同日プレビュー版として公開されました。本番利用可能になったのは2015年4月9日です。
- 公開当初の Lambda にはどんな制約がありましたか。
- 対応言語は Node.js のみ、メモリは関数ごとに128MB〜1GB、実行時間の上限は60秒、提供リージョンは米国東部・米国西部・欧州(アイルランド)の3つでした。起動のきっかけにできたのは S3・DynamoDB・Kinesis です。
- Lambda が Java に対応したのはいつですか。
- 2015年6月15日です。2015年4月9日の本番提供の時点では Java はまだ近日対応の予定で、本番提供で加わったのは SNS トリガーや同期呼び出しでした。
- Lambda の課金単位はどう変わりましたか。
- 2014年の公開時は、リクエスト数に加えて実行時間を100ミリ秒単位で課金していました。AWS によれば、2020年に1ミリ秒単位の課金になっています。
出典
一次資料AWS Lambda – Run Code in the Cloud — Jeff Barr, AWS News Blog, Nov 13, 2014
発表日、プレビューの言語・メモリ・実行時間・リージョン・イベント発生元、課金方式と無料枠
本番提供の日付、同期呼び出し・SNS・モバイル SDK、同時実行数50→100、Java は近日対応
一次資料AWS Lambda turns ten – looking back and looking ahead — AWS News Blog, 2024
Tim Wagner の PRFAQ、2016〜2023年に加わった機能、1ミリ秒課金、利用規模(AWS の数字)
二次資料AWS re:Invent Keynote Day 2 Takeaways — The Agile Admin, Nov 13, 2014
Werner Vogels の2日目基調講演で Lambda と EC2 Container Service が発表されたこと
最終更新: