【サンプル有】サーバーレスとは?AWSを使用した事例とともに紹介
サーバーレスのメリットともに、実際にLambdaを使用して簡単なサーバーレスのプログラムを実行するところまでをご紹介します。
サーバーレスのメリットともに、実際にLambdaを使用して簡単なサーバーレスのプログラムを実行するところまでをご紹介します。
スキルアップ
2021/01/28 UP
- プログラミング
- AWS
LambdaやGoogle Cloud Functionsなど、サーバーレスといわれるサービスに注目が集まっています。このサーバーレスサービスは、Webサーバーのように定期的にくるようなリクエストではなく、スポットで大きな処理をしたい時などにとても便利です。
ここではサーバーレスのメリットともに、実際にLambdaを使用して簡単なサーバーレスのプログラムを実行するところまでをご紹介します。
サーバーレスとは?
一般的に、システムを運用するには、プログラムを稼働させるためのサーバーが必要となります。さらにそのサーバーは常に動いていなければなりません。しかしサーバーレスの場合はサーバーが不要で、プログラムを動かす際に自動で立ち上がるようになっています。このように、サーバーレスは、「サーバーを使用しない」サービスではなく、「サーバーの管理が不要」なサービスという位置づけになります。
サーバーレスの代表的なサービスとしては、Amazonの提供する「Lambda」、Googleの提供する「Google Cloud Functions」、IBMの提供する「OpenWhisk」、マイクロソフトの提供する「Azure Functions」などがあります。
サーバーレスのメリット・デメリット
サーバーレスはメリットとデメリットがはっきりしていて、向いているアプリケーションとそうでないものがあります。
サービスを使いこなすためには、正しい知識を身につけて理解を深めることが大切です。ここからは、サーバーレスのメリットとデメリットについて説明していきます。
メリット
サーバーレスのメリットとしては、インフラ設計に頭を悩ませずに済むこと、サーバーの管理と運用が不要になること、コストの削減がしやすいことの3つが挙げられます。
・インフラ設計に頭を悩ませないで済む
1つ目のメリットは、インフラ設計のために頭を悩ませずに済むという点です。
例えばAmazon EC2などを使用する場合、負荷分散の際は「ALB(Application Load Balancer)」を選んだり、オートスケーリングの設定をしたりと、大変な手間がかかります。
一方、多くのサーバーレスサービスでは、オートスケール機能というものがあるので、アクセス数や負荷に合わせて自動で設定したスケーリングを行ってくれます。これによりユーザーは、サーバーを意識せずにプログラムの実行が可能となります。
・サーバーの管理や運用が不要になる
2つ目のメリットは、サーバーの管理や運用が不要となる点です。
サーバーレスでは、サーバーの運用をシステム側(Lambdaの場合であればAmazon)が行うので、サーバーの管理は不要となります。ソフトウェアをインストールしたり、セキュリティを設定したり、ハードウェアをメンテナンスしたりする必要もなく、サーバーの管理や運用の工数を減らすことが出来ます。
・コスト削減
3つ目のメリットは、コストの削減がしやすい点です。
例えば「Lambda」の場合、プログラムの実行時間と回数によって料金が生じます。待機の時間は課金されないので、設計次第ではあるものの、処理の内容によってはコストの大幅な削減が可能となります。
デメリット
サーバーレスにはもちろんデメリットも存在します。ここでは、知っておくべきデメリットを3つ紹介します。
・まだまだ一般的な運用方法とはいえない
1つ目のデメリットは、まだ運用方法として一般的ではない点です。
サーバーレスによる開発や構築が行えるエンジニアの数は依然として多くはありません。そのため、人材を確保することが難しい場合があります。
・監視が難しい場合がある
2つ目のデメリットは、監視が困難となる場合がある点です。
サーバーレスでは、幾つものサービスが連動するので、一般のアプリケーションよりモニタリングなどが複雑となります。そして、ランタイムの大半がクラウドの内部に隠れているので問題の解析が簡単ではありません。
・コールドスタート問題
3つ目のデメリットは、起動に時間のかかるコールドスタート問題です。
例えば「Lambda」 が「Lambda 関数」の実行をする際、「Amazon Linux」が動作するコンテナが使用されます。この環境を「実行コンテキスト」といいます。
この「実行コンテキスト」の起動から行うことをコールドスタートといい、立ち上げる際に多少の待ち時間が生じます。そのため、低レイテンシーを求める場合「Lambda」は向きません。
【サンプルで実行】AWSを用いた事例紹介
ここからは、実際にLambdaを用いて、サーバーレスなアプリケーションを構築していく方法について説明していきます。サンプルに沿って実行することで、Lambdaには、コードを実行するためのサーバーの管理やプロビジョニングの必要がないことがわかるかと思います。
Lambdaでシステムを構築
Lambdaでシステムを構築する方法について、サンプルコードや操作画面を用いて実行までを詳しく解説していきます。
・AWSマネジメントコンソールのLambdaの管理画面を開く
アプリケーションの構築は、マネジメントコンソールで行います。まずはAWS マネジメントコンソールの検索窓から「Lambda」で検索し、Lambdaのページへと移動して下さい。
それでは関数の作成をしていきましょう。画面左側の項目から「関数」のボタンをクリックし、右上の関数関数作成の画面に移動します。
・一から作成
次に、関数の情報を設定していきましょう。複数のオプションがありますが、ここでは「一から作成」を選択して下さい。
そして「関数名」という項目に、関数の目的について説明する名前を記述します。ここは自由に決めて入力して大丈夫です。
次に「ランタイム」を選びます。「ランタイム」とは関数の言語という意味です。ここではNode.js 12.xを選択して下さい。
ここまで設定が完了したら、「デフォルトの実行ロールの変更」を開いて下さい。この中では「実行ロール」で「基本的なLambdaアクセス権限で新しいロールを作成」を選択します。
その下に「ポリシーテンプレート」という項目がありますので、「基本的な Lambdaアクセス権限で新しいロールを作成」を選びます。
・関数の作成
必要な項目を全て入力し終えたら、右下にある「関数の作成」というボタンをクリックして下さい。構築が完了すると画面が移動し、サンプルコードが表示されているはずです。
簡単に説明をすると、リクエストを受けることで「Lambda」関数が呼ばれ、そのリクエストの情報が1行目の「event」に渡されます。ここでは「API」に「"Hello from Lambda!"という文字列を返すように」という処理が実行され、結果として返されます。
//デフォルトで入っているコード
exports.handler = async (event) => { // TODO implement const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
Webに接続
ここまでで、ベースとなるLambdaの処理が完成しました。ここから、この処理をHTTP経由で実行できるようにしていきます。
まずは画面上部の左側に「トリガーの追加」と書かれているのを確認して下さい。
「トリガーを追加」をクリックすると、プルダウンがあるので「API Gateway」を選択して下さい。APIタイプは「HTTP API」を選択します。下部のセキュリティは「オープン」を選択して追加して下さい。
・確認する
ここまでで、リクエストした際の処理と、リクエストのためのゲートウェイが設定されました。では早速、実行してみたいと思います。
「API Gateway」をクリックすると、下部に設定画面が表示されます。
ここの詳細をクリックすると、実際のAPIエンドポイントがでてきますので、これをブラウザで表示してみて下さい。
ブラウザで「"Hello from Lambda!"」と表示されれば成功です。この文字列は、最初の「デフォルトで入っているコード」で設定したものですので、こちらを更新の上デプロイしなおすと、表示も変更されます。
このように、リクエスト方法と、リクエストされた際の挙動の2つを設定することで、簡単にLambdaを実行することが可能です。
サーバーレスは今後加速する可能性!今から触り始めよう!
サーバーレスは、「サーバーレス」といってもサーバーがないわけでありません。しかし、サーバーの保守や管理は不要で、実行するプリケーションに集中できるアーキテクチャといえます。
今回はサーバーレスサービスの代表としてLambdaを用いて、実際にサーバーを設定せずにリクエストの手段とリクエストした際の挙動を設定するだけで、簡単なシステムを実行するとこまで実例でご紹介しました。本稿を参考に、皆さんもぜひ一度試して見ていただければ幸いです。