サーバーレスとは?AWS Lambdaを実際に使ってみた感想

  • 2021年7月26日

こんにちは
セカンドセレクションのYamanakaです。

昨今、聞かないことはない「サーバーレス」
私もはじめはオンプレミスの環境に慣れていたため、そんなことができるのか?と疑問に思っていましたが、たまたまプロジェクトでAWSを用いることがあったのでまとめてみました。

本記事をご覧いただくことで、サーバーレスとは一体どういうものなのか、実感いただきたいと思います。

サーバーレスとは

サーバーレスとは一体どういうものなのでしょうか。

wikipediaでは以下のように定義されているので、文字だらけですが引用します。

サーバーレス・コンピューティング(Serverless computing)とは、クラウド・プロバイダーがアプリケーションに必要なマシン・リソースの割り当てを動的に管理し、事前に購入されたことに基づく請求ではなく、各アプリケーション要求を満たすために使用される個々のリソース量に基づいた請求を行うようなクラウド・コンピューティングの実行モデルである。 ユーティリティ・コンピューティングの一形態である。  物理サーバーがアプリケーション・コードを提供するユーザーの視点から完全に抽象化されているため、「サーバーレス・コンピューティング」という名前が使用される。

サーバーレス・コードは、マイクロサービスなど従来のサーバー・スタイルで書かれたコードと組み合わせて使用できる。 たとえば、Webアプリケーションの一部をマイクロ・サービスとして記述し、別の部分をサーバーレス・コードとして記述することができる。 あるいは、プロビジョニングされたサーバーをまったく使用せず、完全にサーバーレスであるアプリケーションを作成することもできる。

引用元:https://ja.wikipedia.org/wiki/サーバーレスコンピューティング

オンプレミスとの比較

先の章でサーバーレスについて引用いたしましたが、言葉だけ並べられても理解しがたいところです。

従来品との比較をもってしてその実態を掴んでいただくのが良いと思いますので、本章ではサーバーレス登場以前から存在しているオンプレミスとの比較をご説明します。とはいえサーバーレスとオンプレミスとの比較は多岐に渡ります。

今回はシステムを導入する想定で、

  1. 主要な特徴
  2. システムを導入するにあたり必要になる作業
  3. メリット・デメリット

についてオンプレミス、サーバーレスの順で比較をいたします。

オンプレミス

オンプレミスの主要な特徴は以下の通りです。

  • マシンは自社で準備
  • 料金は「初期投資+月固定費」
  • マシンの保守は自社で行う
  • 自社のネットワーク上で稼働する

システムを導入するにあたり必要になる作業は以下の通りです。

  1. マシン購入
  2. 運用設定(キッティング)
  3. 設備利用設計(どんな設備・リソースをどれだけ使う予定なのか等)
  4. アプリケーション作成
  5. マシン適用
  6. 運用監視
  7. 障害対応・設備保守(機器のリプレース)

オンプレミスのメリット・デメリット

  • メリット
    • 既存の設備を流用した費用節約ができることがある。
    • 設備使用量に対し費用が変動しないので、長期長時間稼働させると効率的。
  • デメリット
    • オンプレミスは初期投資がかかる、セキュリティ対策等の運用設定を行う必要がある等、システムを稼働させるというスタートラインに立つまでに時間と費用がかかることが多い
    • 設備投資のハードルが高いため、アクセスが集中したときの予定外のスケールアップに弱い

サーバーレス

サーバーレスの主要な特徴は以下の通りです。

  • マシンはクラウド・プロバイダーのものを使用する
  • 料金は「月単位の従量制(使った分だけ)」
  • マシンの保守はクラウド・プロバイダーが実施する
  • もちろんインターネット上で稼働している

システムを導入するにあたり必要になる作業は以下の通りです。

  1. クラウド・プロバイダー契約
  2. サービス設定
  3. アプリケーション作成
  4. マシン適用
  5. 運用監視

サーバーレスのメリット・デメリット

  • メリット
    • オンプレミスで発生する設備に関わる作業が必要ないので、アプリケーションを作成できればすぐにシステムを稼働できる。
    • 主要なクラウド・プロバイダーはAI機械学習などの高性能なマシンを必要とするサービスを割と安価に提供してくれるので、高価なマシンを購入せずに思い切った取り組みをすぐ始められる。
  • デメリット
    • クラウドで障害が発生した時、自社での障害回復の手段がないため、障害が長期化したときの代替手段を余分に準備する必要がある。
    • クラウドプロバイダーの提供するサービスではデータの生成・保存・取得時に費用が発生するため、構築したシステムの運用費が高くつく可能性がある。

サーバーレスでAWS Lambdaを使ってみる

サーバーレスの手軽さを実感いただくために、AWS Lambdaを例に適用手順を紹介いたします。

※本内容のAWSコンソール画面は2021年6月時点のものです。

AWS Lambdaとは

AWS Lambdaは以下の通りです。

Lambdaは、サーバーのプロビジョニングや管理なしでコードを実行できるコンピューティングサービスです。Lambdaは、高可用性コンピューティングインフラストラクチャでコードを実行し、サーバーおよびオペレーティングシステムのメンテナンス、キャパシティプロビジョニング、自動スケーリング、コードの監視、ログ記録など、コンピューティングリソースの管理をすべて実行します。Lambda を使用すると、実質どのようなタイプのアプリケーションやバックエンドサービスに対してもコードを実行できます。Lambda がサポートするいずれかの言語でコードを記述するだけで、この機能を利用できます。」です。

引用元:https://docs.aws.amazon.com/ja_jp/Lambda/latest/dg/welcome.html

Lambda関数を作成する

とりあえず、結果を文字列で返すシンプルな関数を作成することにします。

  • Lambda関数の基本情報を入力します。

  • Lambda関数を編集します。

Lambda関数作成できると、関数編集画面が表示されます。ここで、編集画面を操作し、必要な機能を実装します。ここでは結果を文字列で返す処理を実装しています。

  • Lambda関数を更新します。

編集したら、Deployボタンを押下し、変更を反映します。

  • Lambda関数をテストします。

「Test」ボタンを押下し、テストイベントを作成し、テストイベントを実行します。

実行結果欄に、文字列が表示されています。想定通りに実装できていることを確認できました。

①~④の作業をするだけで、インターネットに自分が作ったインターフェースを公開し、動作確認までできました。

AWS Stepfunctions(Lambda関数を複数使う)

章題はLambdaですが、AWS Stepfunctionsも素晴らしいので併せて紹介します。

AWS Stepfunctionsを使ってLambda関数を複数呼び出してみましょう。

  • ステートマシンの作成を開始

Lambda関数を呼び出すにはステートマシンの作成が必要です。

ステートマシンの作成ボタンを押下します。

今回はワークフローを視覚的に設計します。

ページ下部の作成ボタンを押下します。

  • Lambdaを呼び出す設定を行う

Workflow Studioが起動します。ここで、先の手順で追加したLambda関数を呼び出します。

Workflow Studio左の「アクション」から「Invoke」をドラッグアンドドロップします。Lambda関数を複数呼び出せるようにします。

設定を確認したのち、ステートマシン設定を指定します。

ページ下部の「ステートマシンの作成」ボタンを押下します。

これで、ステートマシンを作成できました。

  • ステートマシンを実行します。

グラフインスペクターが青から緑に変わることで、無事、実行されたことを確認できました。

Lambda関数の作成からStepfunctionsのステートマシンの実行まで、わずか1時間です。とにかく早い!しかも全てWebブラウザ上での操作です。画面をポチポチ操作することで実現できました。

どのネットワークのサーバーを使うとか、ポートを指定するのかどうかとか、マシン上の設定ファイルを編集するなどの煩雑な作業をまったく意識することなく作業できました。もちろん、実際にはもっと複雑なLambda関数、ステートマシンを作成する必要があります。

現場での使い方

最後に、弊社での使用例を紹介します。1日1回、サービス利用ユーザー宛にメールを送信する機能を開発しました。

そこでデータベースに登録された情報をもとにメールデータを作って送信するバッチ処理を実装しました。そのうち、メールデータを作成する部分にAWS Lambdaを使用しました。Webアプリケーションと異なり、バッチ処理は常時稼働する必要がないため、サーバーレスは適していると言えます。

このプロジェクトで実施したのは、たったこれだけの作業です。

  • バッチ処理のLambda関数を実装する。
  • LambdaとStepfunctionsの設定ファイルを作成する。
  • リリース用のパッケージに纏めてAWSに適用する。

オンプレミスだとバッチ処理を安全に配置するために設計書を作成したり検証試験を実施したりとたくさんの作業が必要になります。しかし、AWS Lambdaがそれらを整備してくれていて安全なので、ユーザーがその部分を意識する必要がありません。よってAWS管理画面でデプロイすればすぐに適用できます。

作業の多さは品質や経費に影響を与えます。少なければ少ないほど安価かつ作業失敗のリスクが下がります。安価で安全にバッチ処理が適用されるこのメリットは大きいと感じました。

皆さんもぜひサーバーレス環境に移行していきましょう!

 

長文読んでいただきありがとうございました。

2021年よりSSコラムで情報を発信中です。

もしよろしければ弊社のHPもご覧ください。

 

 

最新情報をチェックしよう!