背景
最近、AzureFunctionを利用してシステムの一端を構築することになったのですが、コードは書けてもどうやってクラウド上に反映させるのか、どういう仕組みで動くのか、良く分かっていなかったので今更ながら調査しました。その内容をまとめておこうと思います。
FaaS(Function as a Service)の仕組み
「イベントが起きた瞬間だけ関数を起動し、処理が終われば環境ごと破棄する」サーバレス実行モデル。サーバ管理はクラウド側が担当し、開発者はコードだけに集中できる。
1. イベント駆動で関数が起動する
作成した関数を実行するきっかけとなるトリガーの種類は複数ある。
トリガー例:
- HTTP リクエスト
- ファイルアップロード
- メッセージキュー
- タイマー(cron)
- DB の変更イベント
2. 関数はステートレスで、実行後は破棄される
関数実行後は、環境ごと破棄される。
メリット:
- 不要なリソースが残らない
- スケールが容易
- コストが最小化
状態が必要な場合は外部ストレージ(DB、キャッシュ)を利用する。
3. 必要なときだけ自動スケール
オートスケーリングが可能で、開発者はスケール設定を意識する必要がない。
- リクエストが増える → 自動で並列実行数が増える
- リクエストが減る → 実行数がゼロまで落ちる
4. インフラ管理はクラウド側が担当
インフラ管理は気にしなくてよいので、開発者はコードと設定だけに集中できる。
クラウド側が担当するもの:
- OS パッチ
- コンテナ管理
- スケール
- ログ収集
- セキュリティ更新
5. 従量課金(使った分だけ課金)
使用した分だけ課金されるプランが多い。
課金対象:
- 実行時間
- メモリ量
- リクエスト数
FaaSの内部動作フロー
- イベント発生、トリガー起動
- 実行環境の割り当て(軽量コンテナなど)
- 関数コードをロードして実行
- 結果を返す(HTTP レスポンスなど)
- 実行環境を破棄
FaaSと他のクラウドモデルの比較
| モデル | 管理範囲 | 特徴 |
|---|---|---|
| IaaS | OS〜アプリを自分で管理 | 仮想マシンベース |
| PaaS | OS 管理は不要、アプリは自分で管理 | Web App など |
| FaaS | コードだけ管理 | イベント駆動・自動スケール |
FaaSが向いているケース
- イベント駆動の処理
- トラフィックが読みにくいサービス
- バッチ処理
- API ベースのマイクロサービス
- 小規模チームで高速開発したい場合
最後に
FaaSのイメージは把握できたような気がしますが、具体的にどうやって実装するのか分からないので後は手を動かして経験を積んでいきたいと思います。