サーバーレスって何が便利なの ? AWS でサーバーレスを構築するためのサービスをグラレコで解説
Author : 伊藤 ジャッジ向子(さきこ)
本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。
※ awsgeek.com は Amazon Web Services, Inc. プリンシパル・テクニカル・エバンジェリスト、ジェリー・ハーグローブが運営しているサイトです。
サーバーレスとは
皆さんの中には何かのシステムを動かすため、「1. プログラムを書く」そして「2. 実行する」というお仕事(または趣味?)をされている方もいらっしゃるかと思います。
歴史的にこの二つはセットで、プログラムを実行するためには、実行環境のサーバー構築やメンテナンスをする必要もありました。でも、どんなに良いプログラムも、実行環境であるサーバーがさばききれる能力以上のリクエストが集中して、実行環境がクラッシュしてしまっては、元も子もありません。
そのため従来のサーバー環境ではリクエストに応じて、またはリクエストが増えることが事前に分かっている場合は、実行環境であるサーバーの CPU やメモリやストレージの量や数を増強する必要があります。その作業のため、プログラムを書く部隊とサーバーのメンテナンスをする部隊が別にいるシステム構築チームが編成されることが多いと思います。
来るかもしれないリクエストのために実行環境の増強をしたり、サーバーのメンテナンスに人的リソースや労力を割くようなビジネスに直接の価値を生み出さない作業を減らしていく方法はないでしょうか。
そんな労力から解放するため、2014 年、AWS はサーバーレスのコンピューティングを担うサービス、AWS Lambda を発表しました。Lambda 関数でシステムを構築することにより、サーバーのプロビジョニングや管理をする必要がなくなります。
すべて AWS が管理する(マネージド)ため、プログラムを書いたら後は AWS が実行環境の面倒を見まます。
では、サーバーレスコンピューティングのサービスである Lambda にはサーバーの管理から解放するためにどのような機能があるのでしょうか。
サーバーレスコンピューティングの自由度:関数
Lambda はAWS が実行環境の面倒をみる点がメリットですが、とはいっても、皆さんで Lambda の実行環境をコントロールすることもできます。
Lambda のマネジメントコンソールから、使用するメモリ量、Lambda 関数にアクセスできる AWS サービス、ユーザー等、アクセス許可ならびにセキュリティの設定が可能です。
サーバーレスコンピューティングの自由度:ランタイム
AWS Lambda で選択できるランタイムは多く、複数の言語がサポートされます。また、独自のランタイム(カスタムランタイム)を使用することもできますので、PHP や COBOL といった使用者が従来のオンプレミス環境で慣れ親しんだ言語で AWS Lambda を使うことができます。
従来のオンプレミスの実行環境で取得していたコード実行のログは、Amazon CloudWatch ならびに AWS CloudTrail を使って取得することができます。
したがって AWS Lambda は、従来のオンプレミスの実行環境と同じようにコードの実行が可能で、なおかつサーバーレスであるためサーバーの管理から解放されるメリットがあります。
「コードだけ書いたら、後は実行環境の面倒を見てもらえる!そんな素敵サービス、でも…お高いんでしょう?」
と考える方も多いでしょう。次に AWS Lambda の料金を見てみましょう。
料金
Lambda の使用料は実行したリクエストと時間分だけ支払います。リクエスト課金は 100 万リクエストにつき 20 セントです。また、1 つのプログラムを実行するために 1 GB のメモリを使用した場合、東京リージョンでは 1 秒あたり $0.000016667です。
Lambda で設定した使用メモリが 128 MB なら、もしプログラムの実行時間が 100 ミリ秒なら、$0.000000208 だけ、支払うことになります。プログラムが実行していない時間には課金されないため、実行環境のサーバーを常に稼働させているより、無駄なリソースを費やすことがなく安上がりということになります。
月ごとの支払いは下記のようになります。(下記は 2020 年 2 月現在 東京リージョンにおける、ごく一例となります)
関数に 128 MB のメモリ量を割り当てて 50,000,000 回実行し、毎回の実行時間が 100 ミリ秒間だったとします。
- 1 か月のコンピューティング価格
- 1 GB/秒につき 0.00001667 USD
- 合計コンピューティング (秒) = 50,000,000 × (0.1 秒) = 5,000,000 秒
- 合計コンピューティング (GB/秒) = 5,000,000 秒 x 128MB ÷ 1024 = 625,000 (GB/秒)
- 625,000(GB/秒)– 無料利用枠 (400,000 GB/秒)の無料利用枠 = 225,000 (GB/秒)
= 1 か月のコンピューティング料金 = 225,000(GB/秒) × 0.00001667 USD = 3.75 USD
- 1 か月のリクエスト料金:
- 1,000,000 件のリクエストにつき 0.20 USD
- 50,000,000 件のリクエスト– 1,000,000 件の利用無料枠のリクエスト = 49,000,000 件のリクエスト
=1 か月のリクエスト料金 = 49,000,000 × 0.2 USD ÷ 1,000,000 = 9.8 USD
- 1 か月の合計金額
3.75 USD + 9.8 USD = 13.55 USD
イベント駆動:様々なトリガー
AWS における他のコンピューティングサービスとして、Amazon EC2 があります。
EC2 インスタンスは、インスタンス稼働中にコンピューティングを行います。一方、サーバーレスコンピューティングサービスである Lambda はイベントが発生してリクエストが送られたときのみリクエストをトリガーとして、コンピューティングを行います。
では、実行リクエストはどこから Lambda に送るのでしょう。Lambda 関数は、他の AWS のサービスから呼び出したり、ストリームまたはキューから読み取るように Lambda を設定して関数を呼び出すこともできます。
たとえば、Amazon S3 バケットにファイルをアップロードしたイベントをトリガーとして、Lambda に実行リクエストを送ることができます。Lambda は 47 の他の AWS サービスと連携して使用することができる (2020 年 2 月時点) ため、お客様が AWS サービスを組み合わせて使用する際に有効に組み込むことができます。
また、Lambda を使用したコンピューティングは、場合によっては費用が節約できることもあります。
例えば、イベントが発生したときのみコンピューティングリソースを使う場合は Lambda の使用は費用が節約できる場合もあります。具体的には S3 バケットへアップロードをトリガーとしたコンピューティングのためだけに、EC2 インスタンスをずっと稼働させているより、アップロード時のみ Lambda を実行するほうが、コンピューティングのための費用が節約できます。
もちろん各コードのテストなどの際には、Lambda 関数をマネジメントコンソール、Lambda API、AWS SDK、AWS CLI、AWS ツールキットで直接呼び出すことができます。
各プログラムで共通で使うプログラム:レイヤー
多くの AWS サービスと組み合わせることができるとは言っても、Lambda はプログラム単体ごとに管理されています。もし従来の実行環境で複数のプログラムで共通して使用していたライブラリを使いたい場合はレイヤーの形式で Lambda 関数に設定することができます。レイヤーは、ライブラリ、カスタムランタイム、またはその他の依存関係を含む ZIP アーカイブです。
関数のライブラリを使用することができますので、各 Lambda のパッケージごとに含める必要はありません。複数の Lambda 関数で使用することが可能です。
Lambda@Edge
ここまで Lambda 関数の実行環境についてみてきましたが、最後は AWS Lambda が AWS の他のサービスで使用されている例を紹介します。
例えば、アプリケーションが東京リージョンにあり、リクエストしたユーザーがヨーロッパにいた場合、リクエストからレスポンスまで地理的に遠いため、このユーザーへの返答時間は、東京にいるユーザーからのリクエストよりは、比較的長くがかかってしまいます。世界各地のユーザーからのリクエストへのレスポンスをキャッシュし、レスポンス時間を短縮するためにコンテンツ配信ネットワーク、AWS CloudFront があります。Lambda@Edge は、Lambda と同じように関数を設定し、CloudFront が使用するアプリケーションのユーザーに近いロケーションで関数を実行することにより、ヘッダー情報やコンテンツを変更して、ユーザーに配信することを可能にします。
最後に、全体の図を見てみましょう。
Lambda を使用することにより、リクエストが多くなる「かもしれない」という予想により事前からリソースに投資して実行環境であるサーバーを増強する必要がなくなります。サーバーの管理のために労力を浪費する必要もなくなります。
サーバーレスでイベント駆動のシステム構築をご検討の方は、この機会にぜひお試しください。
実際にサーバーレス開発を行う際に役立つ記事をご紹介
AWS グラレコ解説のその他の記事はこちら
- 選択
- 今話題のブロックチェーンをAWSで実現する仕組みをグラレコで解説 »
- サーバーレスって何が便利なの ? AWS でサーバーレスを構築するためのサービスをグラレコで解説 »
- 機械学習のワークフローってどうなっているの ? AWS の機械学習サービスをグラレコで解説 »
- 外部から AWS のバックエンドサービス利用を実現する仕組みをグラレコで解説 »
- AWS でデプロイの自動化を実現するベストプラクティスをグラレコで解説 »
- コンテナを使ってモノリスを分割する方法をグラレコで解説 »
- クラウドへ移行する理由とそのステップをグラレコで解説 »
- Windows ワークロードをクラウドへ移行するためのベストプラクティスをグラレコで解説 »
- サーバーレスのイベントバスって何 ? Amazon EventBridge をグラレコで解説 »
- サーバーレスで SaaS を構築する方法をグラレコで解説 »
- 「あなたへのおすすめ」はどう生成するの ? Amazon Personalize で簡単に実現する方法をグラレコで解説 »
- クラウド設計・運用のベストプラクティス集「AWS Well-Architectedフレームワーク」をグラレコで解説 »
- 特定の顧客セグメントにメッセージ送信。「Amazon Pinpoint」の仕組みをグラレコで解説 »
- アプリにユーザー認証機能を簡単に追加できる「Amazon Cognito」をグラレコで解説 »
- わずか数分で WordPress サイトを構築できる「Amazon Lightsail」をグラレコで解説 »
- 異なるアプリケーション同士の疎結合を実現。「Amazon SQS」をグラレコで解説 »
- Web アプリを高速に開発できる「AWS Amplify」をグラレコで解説 »
- 機械学習の知識ゼロでもテキストデータを分析。Amazon Comprehend をグラレコで解説 »
- ビジネスデータをまとめて可視化 & 分析。Amazon QuickSight をグラレコで解説
- 人工衛星の地上局を 1 分単位で利用。AWS Ground Station をグラレコで解説
- カオスエンジニアリングで本当にカオスにならないための進め方をグラレコで解説
- GraphQL API を簡単に作成 & 運用。AWS AppSync をグラレコで解説
- IoT 環境を必要な機能を選択するだけで構築。AWS IoT をグラレコで解説
- 高い可用性と耐久性のオブジェクトストレージ。Amazon S3 をグラレコで解説
- サーバーレスでイベント駆動型アプリケーションを実現。AWS Lambda をグラレコで解説
- データサイエンス教育の強い味方。Amazon SageMaker Studio Lab をグラレコで解説
- 高速で柔軟な NoSQL データベースサービス。Amazon DynamoDB をグラレコで解説
- リレーショナルデータベースを簡単・迅速に実現。Amazon RDS をグラレコで解説
- アプリのワークフローを視覚的に構成。 AWS Step Functions をグラレコで解説
- データ保護に使う暗号化キーを一元管理。AWS KMS をグラレコで解説
- アプリケーションへのトラフィックを効率的に負荷分散。Application Load Balancer をグラレコで解説
- AWS で簡単にコンテナアプリケーションを構築 ! Amazon ECS をグラレコで解説
- 大規模データセットも簡単クエリ! Amazon Athena をグラレコで解説
- キャッシュ機能でアプリの高速化を実現 ! Amazon ElastiCache をグラレコで解説
- 使い慣れたプログラミング言語でクラウド環境を構築 ! AWS CDK をグラレコで解説
- ストリーミングデータを簡単にキャプチャ、処理、保存 ! Amazon Kinesis Data Streams をグラレコで解説
- AWS で始める機械学習はじめの一歩 ! AWS の主要な AI/ML サービスをグラレコで解説
- リレーショナルデータベースをサーバーレス化 ! Amazon Aurora Serverless をグラレコで解説
- ML 駆動の検索エンジンで企業の情報管理を革新! Amazon Kendra をグラレコで解説
- オンプレミス、エッジ、どこでも楽々コンテナ管理 ! Amazon EKS Anywhere をグラレコで解説
- 生成 AI アプリケーション開発をもっと身近に、簡単に ! Amazon Bedrock をグラレコで解説
- わずか数クリックで多様な脅威を監視しクラウドを保護 ! 脅威検出サービス Amazon GuardDuty をグラレコで解説
- データの改ざん耐性と変更履歴の検証可能性を実現 ! 台帳データベース Amazon QLDB をグラレコで解説
- 生成 AI x クラウドがもたらす次世代のイノベーション ! AWS Summit Japan Day 1 基調講演をグラレコで解説
- ビジネス向け生成 AI アシスタント Amazon Q Business をグラレコで解説
- 生成 AI コーディングアシスタント Amazon Q Developer をグラレコで解説
- フロントエンドとバックエンドを統合開発 ! フルスタック TypeScript 開発環境 AWS Amplify Gen 2 をグラレコで解説
筆者紹介
伊藤 ジャッジ向子(さきこ)
アマゾン ウェブ サービス ジャパン合同会社
テクニカルライター。
2016 年にアマゾン ウェブ サービス ジャパン合同会社 テクニカルサポート部入社。AWS Snowball 等のストレージ系サービスのサポート、ならびに IoT サービスをメインにサポートを行い、2019 年より現職。
趣味はインドアでは小さなセンサーと Raspberry Pi でおもちゃを作ること。アウトドアでは犬を連れてのハイキングとキャンプ。
AWS を無料でお試しいただけます