Azure Managed Service Column <Azure運用コラム>

サーバーレスとは

Category: 入門編

2020.11.02

はじめに

サーバーレスにより、使った分だけクラウドのサービス料を払う形が実現可能となりました。
この記事では、サーバーレスとはどんな仕組みなのか、メリット・デメリット、構造などをご紹介します。

サーバーレスとは

サーバーレスとは、基盤側の管理となるサーバーの構築や保守などをすることなく、クラウド上でプログラムを実行できる仕組みを指します。

サーバーレスコンピューティングや、サーバーレスアーキテクチャという名称でも呼ばれますが概念としては同じです。提供されているサービスによって細かい仕様は異なりますが、根本の仕組みにそれほど違いはありません。

サーバーレスと言っても、全くサーバーが存在しないわけではなく、システムエンジニアなどシステムの利用者にサーバーの管理を意識させないことがポイントとなります。通常オンプレミスでシステムを構築する際は、ハードウェア周りの設計や構築が必要となり、インフラエンジニアの手を借りるか、自分でやるかのどちらかになります。

仮想サーバーを導入しても、難易度は若干下がりますが、IaaSであればインフラの知識は必要となります。反対にSaaSを選択すると、インフラ知識は不要ですが、すでに提供されたサービスを使うことが主となり、自社で開発したプログラムを動かすような環境が提供されていることはほとんどありません。
この間をとれるため、PaaSと比較されますが、PaaSよりも、サーバーレスの方がハードウェアを意識せずにシステム構築を進めていけます。

サーバーレスはアプリやサービスの開発者にインフラの知識を要求しません。ソフトウェア部分となるプログラムにだけ集中できるのが、サーバーレスの利点です。

サーバーレスに伴うメリット・デメリット

サーバーレスは特定のイベント発生時や、特定の時間になったときに単発で動くプログラムを稼働させるのに向いていると言われます。固定費となっていたインフラ費用を変動費にできる反面、システム開発に制限をかけてしまうこともあり、一長一短です。

ここでは、サーバーレスに伴うメリット・デメリットをカテゴリに分けて解説します。

全フェーズ共通

メリット

リソースの最適化が可能になるのがサーバーレスのメリットの一つです。クラウド環境ではオートスケーリングを実装している場合が多く、処理量の増加に応じて、インフラを自動で増減してくれます。
ただし、スケールアップした後のスケールダウンが手動であったり、課金時にスケールアップしたスペックで料金表を参照していったりと、若干注意が必要なサービスもあります。

サーバーレスであれば、処理が走るごとに必要な分のリソースを使うので、スケールアップ、スケールダウンを気にすることなく、処理を走らせることができます。

デメリット

環境によっては今までのコードが動かないこともあります。新規開発となる際も、丸ごとゼロからの開発になることは稀で、既存のシステムからコピーして使える処理はそのまま使ってしまうのが基本です。
既存システムをクラウド環境へ移管する場合なら、できる限りコードには手を入れずに移管したいところですが、そのままでは使えない可能性があります。

主要な言語はサポートされていますが、サーバーレスで動かすための規則に則った変更が必要なケースがあるので、別途開発工数がかかる可能性を考慮に入れておきましょう。

開発フェーズ

メリット

決まった時間に決まった処理を動かすだけでも、その処理を動かしてくれる基盤に対して設定が必要です。サーバーレスも設定が必要な点は同じですが、GUIの画面から簡単に設定していくことができます。重ねて、決まった時間や特定のリクエスト発生時に処理を動かすことを前提として設定画面が作られているので、基本の設定は画面に沿っていくだけでできます。

デメリット

処理のタイムアウト時間や、リクエストやレスポンスでやり取りするデータの容量制限など、引っかかると厄介な機能制限がかかっていることがあります
いざ制限を受けてしまうと、処理の方法をそもそも変える必要があり、エンジニアが頭を悩ませる部分となってしまいます。他サービスと組み合わせて回避を試みるケースが多いですが、制限を知らないまま開発して、後から手戻りになることがないよう気を付けなければなりません。

運用フェーズ

メリット

インフラコストの低減ができるのもサーバーレスの魅力です。従来のサーバーはバックアップやメンテナンスの時間を除き、24時間稼働していることが前提で作られています。基本的には24時間分の利用料が課金されますが、サーバーレスは使った分だけの課金とすることが可能です。
処理を実行している間の課金のみとなることが多いので、実行する処理次第では大幅に運用コストを減らすことができます。

デメリット

サーバーダウンによる障害対応が不要になるので、一般的に運用は楽になりますが、いざ何か起きてしまった時のインパクトが大きいのも特徴です。
障害の原因がクラウド内部に隠されている部分にあるのか、構築したサービス側にあるのかの切り分けが難しくなります。サーバーレスのサービスを提供している会社や、サーバーレス開発を得意とするベンダなどの力を借りて、いざというときに備えられる体制は作っておきましょう。

サーバーレスの構造や仕組み

サーバーレスの構造や仕組みは以下のようになっています。

サーバーレス環境の構成

サーバーレスの構成はそれだけ取り出してしまえば、複雑ではありません。
特定のイベントや特定の時間にプログラムが動き、期待通りの処理をしてくれるよう設定するだけです。

メールを受信するというイベントをトリガーにして、メールの送信者の情報をデータベースに登録する、深夜2:00に別サーバーの顧客情報をコピーして格納するなどがこの処理に該当します。

プログラムはサービス上の制約に合わせて書き換える必要がないかを、きちんと確認しておきましょう。またデータ転送量などが上限を超えてしまうと処理されないことにもつながるので、最大でどれくらいの処理量が発生するのかはきちんと見積もっておく必要があります。オートスケーリングである程度の差分は吸収してくれますが、サービス上限を超えてしまうと処理が丸ごとキャンセルされる仕様のところが多いです。

サーバーレス環境の場合、処理する都度リソースが割り当てられるため、それぞれの処理の間があいてしまうと、初回処理に時間のかかる可能性があります。大量の処理や頻発する処理ではなく、定型業務や発生頻度の少ない処理に向いている構成となっています。

冗長化構造との違い

冗長化構造は万が一どこかのサーバーが停止しても、そのままサービスを継続し業務に影響を出さないために採用される方法です。サーバー停止の原因は大きく分けて二つあり、エラーが出てシステムが止まってしまうパターンと、サーバー自体が停止してしまうパターンです。クラウド環境も100%常に利用できることを保証してはいないので、停止できない重要度の高いシステムは必ず冗長構成を組む必要があります。

冗長化構造を作るためには、同じシステムを並行稼働させ、トラブル発生時にすぐに切り替えることが要求されます。リソースだけをピックアップすると、同じシステムを二つ稼働させているのと違いはありません。

サーバーレス環境は常に稼働している環境ではなく、クラウド基盤側で冗長性が確保されているため、そもそも利用者側で冗長化を考慮しなくてすみます。リソースや運用コストが節約できるのがサーバーレスでもあります。

おわりに

クラウドのリソースをそれほど使っておらず、24時間稼働しているのがもったいないと捉えたのがサーバーレスの始まりです。クラウドサービスに新たな選択肢を設けたこのサービスは、他のサービスと組み合わせることで、より効率のよいシステムの一部となっています
インフラの運用人員不足や、固定費の削減に困っているプロジェクトはサーバーレスの導入を検討すると、お悩みが一気に解決するかもしれません。

Tag: サーバーレス

Contactお問い合わせ

お見積もり・ご相談など、お気軽にお問い合わせください。

single.php