2025年12月21日日曜日

AWS LambdaなどのFaaSがアプリケーションのポータビリティを下げてしまう理由

AWS re:Invent 2025での講演でデジタル庁の職員が、ガバメントクラウドでは移植性が重要なのでFaaS(i.e. AWS Lambda)よりコンテナーを使う方が望ましいような事を言って、イマサラふざけんなと言う声があがっている*1。デジタル庁はこれまでコンテナーよりもFaaSを推奨してきた。

FaaSは、イベント処理のコードを書いて、それをトリガーになるイベントに関連付けてパブリッククラウドに登録するだけで、実際に処理が実行できるサービスだ。オブジェクトストレージへのファイルアップロードのイベントに紐付けて、画像ファイルを縮小するような処理が典型例となる。AWS Lambdaでは、API GatewayでRESTful APIにエンドポイントへのアクセスもイベントにできるし、AWS Step Functionsで順番に実行させていくこともできる。

1. FaaSのポータビリティが低い理由

利点としては、実装するコードの量が小さいし、スケーラビリティがあり、クラウド料金が安めになっている。欠点は、応答が遅めになることがある*2、パブリッククラウドが混雑しているとエラーを出して動かない事がある、状況によってはデバッグが快適ではない*3、アプリケーションのポータビリティが大きく下がることだ。

ポータビリティが下がる理由は、FaaSはパブリッククラウドの独自機能であるため、アプリケーションがクラウド事業者にあわせたコードをかなり含むことになる*4し、オンプレミスでは推奨されない変則的な構造になるからだ。プライベートクラウドに移植しようとすると、トリガーになるイベントでコードを走らせてくれる代替となるミドルウェアが無いかも知れない。イベントトリガーやジョブ管理システムである程度似たような事はできると思うが、すべてではないし、最近は推奨されない設計だ。

2. コンテナー化とマネージドサービスは高い

マネージドサービス全般がポータビリティを下げるわけではなくて、FaaSが問題であることには注意しよう。コンテナーやデータベースやオブジェクトストレージには互換ミドルウェアがあると言うか、データベースはAWSの方がオープンソース製品などを(改造)流用している。AWS Fargate/RDS/S3と言う構成のマネージドサービスを全面的に使ったアプリケーションは、そのコードが規範的であれば、データの移転とハードウェアの準備がされていて、高速なインターネット回線とつながっていて、パッケージリポジトリーの障害などの稀なトラブルが起きなければ、Linux OSのインストトールからはじめても、オンプレミスでのアプリケーション起動まで3時間かからない。接続情報の書き換えはあっても、ソースコードの書き換えはないからだ。

3. ハイパースケーラー間のポータビリティは、意義が薄い

FaaSを用いるとプライベートクラウドへの移植が(コンテナ化マネージドサービス利用よりも)困難になるわけだが、AWSから他のハイパースケーラーへの移転はそうではないと思ったかも知れない。確かに、AWS FaaSからOCI Functionsに移転する場合は、同等の機能のサービスがある範囲においては、AWS独自ライブラリをOCI独自ライブラリに書き換えれば済むので、プライベートクラウドに移転するよりはずっと楽になる。しかし、ハイパースケーラーのクラウド料金やデータ主権の問題から他に移転する事を考えたときに使えるのは、プライベートクラウドか、相対的にサービスが弱小クラウド事業者になる。想定状況まで考えると、ハイパースケーラー間のポータビリティは、ポータビリティと言えない。

4. 必要移行日数でポータビリティの数値的評価を

ポータビリティを考えるとFaaSを使うなとなるが、費用面から言えば使ったほうがよい。この按配をどうすべきかに一概に言える正解はない。しかし、どの程度のポータビリティがあるかは、把握しておいたほうがよい。オンプレミスに移転させるまで必要な時間で評価しよう。

なお、10営業日2週間で済めば、高いポータビリティだ。半年で十分では無いかと思った人もいると思うが、トランプ大統領がICCへの制裁を命じ、ICCのKarim Khan主任検察官の銀行口座も閉鎖され、Microsoftのサービスのメールアカウントが凍結されたとき、猶予期間は2週間ほどであった。全国の地方自治体のアカウントが同時に凍結されるような事があれば、2週間でハードウェアの調達ができないかもだが。

即時凍結される可能性もあるので、1営業日と言いたいところではあるが、これはそうは簡単にいかない。コンテナー化とマネージドサービスの構成であれば1日でいけそうではあるが、ハードウェアのリードタイムやデータ転送にかかる時間もある。1日で終わらせるためには、クラウドのデータをデイリーに近い頻度でオンプレミスにバックアップしておく必要がある。

*1デジタル庁、FaaS(Lambda)推し辞めるってよ

*2FaaSはパブリッククラウドで実行環境の中にイベント処理のコードを埋め込みコンテナ化してから実行するのだが、間欠的に使用しているとこの初期化処理が毎回動くことになる。ただし、永続化するサービスもある。

*32025年7月17日にIDEでデバッグできるようになったので、もうあまり変わらないかも知れない。

*4イベントハンドラーの部分を書くことになるのだが、イベントハンドラーの形式が独自であり、またデータベース接続などのライブラリもクラウド事業者提供のものを使うことになる。

0 コメント:

コメントを投稿