前回は、システムの疎結合化の例として、コーポレートサイトの動画処理機能を追加しました。ユーザーが動画ファイルをAmazon S3にアップロードすると、Amazon SNSがそのURLをサムネイル作成、スマートフォン向けエンコード、PC向けエンコードという三つの機能に分けて設けたSQSキューに送り、機能ごとの複数台のEC2インスタンスで処理するというものです。

 三つの機能を一つの処理系にまとめず分離させることで、スケーラビリティーや可用性を高めやすくなります。半面、ユーザーの手間が増えます。EC2インスタンスの可用性の確保やスケーリングはユーザーが行います。さらに、サムネイル作成や動画エンコードの実行環境を自前で構築しなければなりません。

 運用保守の手間も掛かります。OSや言語フレームワークのアップデートやセキュリティパッチ当て、AMI(Amazon Machine Image)の作成、スケーリング、監視、障害復旧などを、ユーザーが行います。

 ここまで聞いて「疎結合化すると、仮想マシンの台数が増えて運用保守が大変になる」と思ったかもしれません。そんな疎結合化のデメリットを解消するのが今回取り上げるAWS Lambda(ラムダ)です。

 Lambdaはコード(Node.js、Java、Python、C#など)をイベントや時間間隔を指定して実行するサービスです。特徴として、サーバーの管理が不要、自動スケーリング、コードを実行した分だけの課金があります。

 Lambdaを使用すると、インフラストラクチャー(EC2インスタンスやAuto Scalingグループ)の管理が不要でコードを実行できます。サーバー、OS、プログラミング言語のメンテナンス、コードのデプロイ、監視、ロギングといったコンピューティングリソースに関する管理作業は全て自動化されます。必要な作業は、Lambdaがサポートする言語のコードの用意のみになります。

 コードの実行環境は1日当たり数個のリクエストから1秒当たり数千のリクエストまで、イベントの発生頻度に合わせて自動でスケールします。コードはイベントが発生したあと数ミリ秒以内に実行されます。

 EC2はコードを実行しているかどうかに関係なく料金が発生しますが、Lambdaではコード実行に使用した時間について100ミリ秒単位で支払います。さらに毎月100万件のリクエストなどの無料利用枠もあります。

 このような特徴を持つことから、従来EC2インスタンスを使用していた部分をLambdaに置き換えることで、運用が楽になり、可用性を高められ、大幅にコストを削減することが期待できます。

 コーポレートサイトの例のような、サムネイル作成、動画エンコードといったシンプルな機能やアプリケーションのためだけにEC2インスタンスを使用している場合や、高可用性、スケーリング、アプリケーションのデプロイ、管理について煩わされたくないといった場合はLambdaの導入を推奨します。

 Lambdaの使用方法は次の通りです。

  • Lambdaにコードを(zip形式で)アップロードする
  • イベント駆動させる場合はイベントソースを、スケジュール実行させる場合は実行頻度を指定する
  • 必要なコンピューティングリソースを指定する
  • タイムアウト時間を指定する
  • VPC内リソースにアクセスが必要となる場合はVPCを指定する

 コードは、zipファイルをアップロードするだけでなく、コンソールのエディターで記述したり、Amazon S3バケットからインポートしたりすることもできます。

 Lambda実行のトリガーとなるイベントソースにはAWSの様々なサービスを指定できます。例えばS3バケットのオブジェクトが更新されたとき、DynamoDBのテーブルに更新があったときといった具合です。スケジュール実行する場合は、実行頻度を1分ごと、1時間ごと、1日ごとといったように指定します。

 リソースのサイジングは、メモリー容量を指定するだけです。128MB~1.5GBの間で選択が可能で、そのメモリー容量に合わせてCPUとネットワーク帯域が割り当てられます。

 リソースのサイズに応じて料金が上がります。リソースが不足してCPU使用率が高くなりすぎたり、メモリー容量が不足したりするとコードの実行時間が予想以上に長くなり、コスト増につながります。そういった場合は割り当てるリソースを大きくすることで、コードの実行時間を短くし、コストを抑えることが期待できます。

 タイムアウト時間は100ミリ秒~5分の間で指定できます。5分以上掛かる処理については、コードを分割したり、Lambdaの代わりにコンテナサービス「AWS Fargate」の利用を検討したりします。

 コードがセットされ起動したLambdaの実行環境を「Lambdaファンクション」と呼びます。「VPC内のプライベートサブネットに配置されたRDSインスタンスにアクセスする」といった具合に、Lambdaファンクションで直接VPC内のリソースにアクセスできます。その場合、アクセスしたいリソースがあるVPCのサブネットとSecurity GroupをLambdaファンクションに割り当てます。

この先は有料会員の登録が必要です。今なら有料会員(月額プラン)が2020年1月末まで無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら