0
会員になると、いいね!でマイページに保存できます。
共有する
AWS Lambdaは、AWSが提供するサーバレスコンピューティングサービスの1つです。活用することで、利用者はインフラ管理を気にすることなく、コード開発に集中できます。本稿では、AWS Lambdaの特徴、料金体系や責任範囲、利用方法まで詳しく説明していきます。説明の中にはAWSのほかのサービスへの言及もありますが、ぜひ過去の連載とあわせて読んで、学びを深めましょう。
AWS Lambdaとは
AWS Lambda(以下Lambda)はサーバレスコンピューティングサービスです。オペレーティングシステム(以下OS)などのインフラストラクチャの管理が不要で、利用者はプログラムコードを準備し、Lambdaにアップロードするだけで実行できます。
サーバレスという言葉になっていますが、実際に稼働するサーバが無いというわけではなく、AWS側で実行基盤が管理されるため利用者の管理するサーバが無いということになります。利用者はインフラ部分の管理をAWS側に任せられるため、ビジネスロジックに関わるコード開発に集中できます。
現時点でLambdaは次の言語をサポートしています。
Node.js
Python
Ruby
Go
Java
PowerShell
C#
これ以外の言語を使用する場合は、カスタムランタイムという機能を使用して実装可能です。また、2020年12月にはコンテナイメージのサポートも開始し、利用者が作成したコンテナイメージをLambdaへデプロイできるようになっています。
AWS Lambdaを利用するメリット
OSやプラットフォームの管理をAWSに任せることができるため、次のような利点があります。
・セキュリティ
OSなどのインフラストラクチャのパッチ適用など、実行基盤のセキュリティはAWSで管理され、利用者は自分が書いたコードのみ責任を持って開発すれば良いため、より簡単にセキュアな実行環境を実現できます。
・コスト
Lambdaではコードが実行される時間1ミリ秒ごとに課金されます。これまで紹介したAmazon EC2(以下EC2)やAmazon RDS(以下RDS)では、たとえ処理が行われていなくても起動している時間分料金が発生しますが、Lambdaでは実行していない時間は料金が発生しないため、コスト削減につながりやすいです。
・可用性
Amazon VPCで紹介したように、AWSには複数の物理的に独立したアベイラビリティーゾーン(以下AZ)がありますが、LambdaではAWS管理のもと複数のAZに渡って関数が実行されます。利用者が意識せず高可用性、耐障害性が保たれています。
・拡張性
Lambdaは複数の処理を受けると、自動的に処理用のAWSが管理するインスタンスが立ち上がり、自動拡張されます。東京リージョンでは同時実行数が最大1000となっており、この値は申請により引き上げることも可能です。
AWS LambdaとAmazon EC2との違い
EC2 と比較すると次のようなイメージとなります。
Lambdaの利点だけ聞くと、EC2は使用せずにLambdaだけ利用したほうが良いと思うかもしれません。実際には、すべてのユースケースでLambdaを使用するというのは難しいです。EC2はLambdaに比べて次のような利点を持ちます。
オンプレミス上のアプリケーションをAWSへ移行する場合、OS設定などそのまま移行しやすい。
インスタンスタイプやOS、ネットワークなどを自由に設定できるという柔軟性がある。
大量のトラフィックやアクセスを常時処理する場合、EC2のほうが安くなる場合もある。
EC2ではサーバにプログラムをデプロイ(配置)するという従来の方式で開発を進められる。LambdaにはAWS独自の設定方法や開発方法があるため、初心者は難しい場合もある。
稼働するアプリケーションの状況、開発する組織のスキルなど、場面に応じて適切なサービスを選択することが重要です。
Lambda関数の作成と実行
Lambdaでは、「関数」という単位でプログラムコードを管理し、処理も関数単位で実行します。
関数の作成は、複数のツールから可能で、AWSマネジメントコンソールの画面上からも作成できます。ここではPythonを例に、関数の作成方法を見ていきます。
Lambdaの画面から関数の作成を選ぶと次の画面が表示されます。任意の関数名を指定して、使用したいランタイム(プログラム言語とバージョン)を選択します。今回はPython 3.8を選択します。
関数を作成すると、画面上にデフォルトのプログラムコードが表示され、そのまま画面上で編集できます。
作成した関数は、画面上からテスト実行が可能です。画面上に表示されているTestボタンを押下し、関数に渡すデータをJSON形式で指定します。そのまま作成を押してテストイベントを作成します(今回実行するデフォルトのコードではこのJSONデータの中身は使用しません)。
再度コード編集画面に戻ってTestボタンを押下すると関数が実行され、実行結果が表示されます。今回はデフォルトコードのままで、「Hello from Lambda!」という文字列を含むデータを表示する関数を実行しています。
関数を画面上から作成し、プログラムコードを書くだけで実行ができました。このように環境の準備をせず簡単に実行できる点がLambdaの魅力の1つです。なお、画面上でコードの編集ができるのはPythonやNode.jsなど、コンパイルが不要な一部の言語のみとなります。
AWS Lambdaを他のサービスと連携して実行する
テスト実行では、利用者が指定したJSON情報をインプットとして関数を手動実行しました。ユーザーのアクセスやデータ連携など、何かをきっかけに自動的にLambda関数を実行する場合はほかのAWSサービスと連携します。いくつか例を見ていきます。
・ユーザーのリクエストに応じてLambda関数を実行する
Amazon API Gateway(以下API Gateway)というサービスとLambdaを組み合わせることで、ユーザーのHTTPリクエストを契機(トリガー)としてLambda関数を実行できます。これにより簡単なWEBアプリケーションが作成可能です。
API GatewayがユーザーからHTTPリクエストを受け取ると、API GatewayはGETなどのHTTPメソッドや、/apiなどのリクエストパスの情報を含むJSONデータをLambda関数に渡して実行します。Lambda関数で応答内容を返すようコードを書いておくことで、API Gateway経由で応答を返します。WEBブラウザであれば、WEBブラウザの画面上にレスポンスデータが表示されます。
・S3データ格納時に自動処理を行う
Amazon S3(以下S3)バケットにデータが格納されたら、格納されたデータに対してLambdaで自動処理を行うこともできます。たとえばデータに含まれる情報を加工して別のS3バケットに格納するといった処理が可能です。
この場合もS3バケットやデータ情報がJSONとしてLambda関数に渡されるため、関数のコードでその情報を元にデータを処理します。
・定期的にLambda関数を実行する
毎日12:00など、決まった時間に処理を実行したい場合は、Amazon EventBridgeというサービスとLambdaを組み合わせることで実現できます。
Amazon EventBridge側にルールという形で日次実行する定義を設定しておき、ターゲットにLambda関数を指定することで定期実行が可能です。
たとえば毎日決まった時間にEC2を停止または起動するといった運用もこの構成で可能です。
3つの構成を例として紹介しましたが、実際には他のサービスも含むさまざまな構成パターンでLambdaは実行されます。代表的な構成例としてこういった使い方があると理解してください。
【次ページ】AWS Lambdaで利用者が決定するパラメータ、利用料金や責任範囲の解説も
関連タグ