cloudpackサーバーレス開発ホワイトペーパー
本ホワイトペーパーでは、より多くの方々にLambdaについて理解していただくことを目的として、Lambdaのサービス的な位置付け、特長と仕組み、利用方法、cloudpackが手がけたLambdaの導入事例などを掲載しています。このホワイトペーパーは、パートナー企業様のレビューを受けながら、cloudpackチームによって執筆されたものです。このページおよびホワイトペーパーは定期的に更新されるため、新しいコンテンツがないか定期的にご確認ください。
1. 概要
本ホワイトペーパーは、AWSのクラウドサービス上でアプリケーションを開発・運用される方やサービス提供事業者のマネジメント層の方に対して、AWSクラウドネイティブなサービスを利用した開発技法について、ご理解いただくことを目的にご提供するものです。
対象読者:
- AWSクラウドサービス上で、アプリケーションを開発・運用している方
- AWSクラウドサービス上で、アプリケーションサービスを提供している事業者のマネジメント層の方
- AWSクラウドサービス上で、アプリケーションを構築することで、コストの削減やセキュリティの向上を検討している方
- AWSクラウドサービスを活用することで、工数の削減を目指そうと検討している方
2. サーバーレス運用で目指すさらなるコスト削減
一般にシステムの運用には、プログラムを動かすためのサーバーが必要です。そしてそのサーバーは、常に稼働していなければなりません。この常識を覆すのが、AWS Lambda(ラムダ。以下、Lambda)です。
Lambdaは、サーバーを必要としない、イベント駆動型のプログラム実行環境です。サーバーを必要としないので、サーバー自体のコストがかからないのはもちろん、運用や保守のコスト、さらにシステムの開発工数を減らす効果もあり、コストの削減に大きく貢献します。
Lambdaの登場は、クラウド業界における大きなターニングポイントであり、Lambdaはこれからのクラウド運用を大きく変えていくとcloudpackは考えています。
2.1 これからのクラウド:さらなるコスト削減を実現するLambda
EC2インスタンスの「1時間単位の課金」や「起動のオーバヘッド」といった「限界」を突破することができるAWSのソリューションがLambdaです。
2.1.1 実行した実時間と回数で課金されるLambda
Lambdaは、事前に登録しておいたプログラムを実行するための、小さな実行環境です(プログラムの実行には、EC2インスタンスを使いません)。登録されたプログラムは、あらかじめ指定されたトリガーにより瞬時にLambda環境にロードされ、実行されます。Lambdaを利用することにより、「起動のオーバヘッド」というEC2インスタンスの1つ目の「限界」を突破することができるのです。
Lambdaでは、実行した「時間(100ミリ秒単位)」と「回数」で課金されます。プログラムは、Lambdaに登録しただけではコストがかからず、純粋に実行に必要としたリソース分だけの課金となります。Lambdaを利用することにより、「1時間単位の課金」というEC2インスタンスのもう一つの「限界」を突破することができるのです。
待機が多いシステムや負荷に緩急があるシステムでは、Lambdaへ移行することで、90%以上もコストを削減することが可能です(図3)。
2.1.2 セキュリティリスクの低減
Lambdaには、セキュリティリスクを下げる効果もあります。EC2とLambdaとでは、AWSと利用者の責任分岐点が異なります。(図5)
EC2では、EC2インスタンス上で動く、すべてのソフトウェア――OS、ライブラリ、言語のランタイムなど――は、利用者の責任です。それに対してLambdaでは、これらすべてがAWSの責任になります。
そのため管理をAWSに任せられるだけでなく、これらに関するセキュリティリスクを利用者が負わずに済みます。例えば、セキュリティパッチを適用する場合、適用手順を誤ると二次災害が起きる可能性がありますが、Lambdaなら、セキュリティパッチの適用はAWSが行うので、その危険を利用者が冒す必要がありません。
Lambdaを使えば、管理・運用の煩わしさから解放され、プログラムコードの開発に注力することができます。
2. Lambdaはイベント駆動型プログラミング
EC2インスタンスを使ったすべてのシステムを、この魅力的なLambdaにすべて置き換えが可能なのでしょうか?
残念ながら、答えはNoです。LambdaとEC2インスタンスはプログラムの動き方が違うため、必ずしもEC2インスタンスの代替にはなりません。
Lambdaを活かすには、その性質を理解したシステム設計が不可欠となります。本章では、実際にLambdaの導入をする上で必要な知識についてご紹介します。
3.1 AWSサービスを糊付けするようにプログラミングする
Lambdaは、スクリプトを実行するための実行環境です。Lambdaに登録したスクリプトのことを「Lambda関数」と呼びます。Lambda関数は、AWSのさまざまなサービスと連携して動作するように作ります。
例えば「ストレージに何か書き込まれたらメールする」という処理をしたいときは、ストレージサービスである「AmazonS3(以下、S3)」からデータを読み取り、メール送受信サービスである「AmazonSES(以下、SES)」にメールの送信を依頼するというスクリプトを書きます。
Lambdaは、さまざまなAWSサービスを疎結合で糊付け(グルー)する仕組みです。AWSには、多種多様なサービスがありますから、それらをうまく組み合わせることで、開発者が記述すべきプログラムの量を大幅に減らせます。
表1に、Lambdaとよく組み合わせて使われる主なAWSサービスを記します。
サービス名 | 概要 |
---|---|
Amazon S3 | ストレージサービス。HTTPプロトコルなどでファイルの読み書きができる |
Amazon Kinesis | 大量のデータを記録して解析するサービス |
Amazon DynamoDB | NoSQLデータベース |
AWS CloudFormation | テンプレートからシステム全体を構築するためのオーケストレーションシステム |
Amazon CloudWatch | クラウドリソースとアプリケーションのモニタリングサービス |
Amazon CloudWatch Logs | ログのモニタリングサービス |
Amazon SNS | 各種サービスやモバイルに通知を送信するメッセージサービス |
Amazon SES | 電子メールサービス |
Amazon SQS | キューイングサービス。Lambdaと、直接関係しないが、Lambdaでの処理をキューイングして順次処理したいときに、よく用いる |
IAM | さまざまなAWSサービスに対する権限を示すオブジェクト。例えば、DynamoDBにデータを書き込もうとする場合、そのLambda関数は、適切なIAM権限の設定が必要となる |
付録
【事例1】S3にアップロードされた画像をデータベース化し、ランダムに取り出す
事例1は、LambdaとS3、DynamoDB、SQSを利用し、エンドユーザーが投稿した写真をランダムに選択してモニタに表示するシステムです。
本ホワイトペーパーをご覧になりたい方は、下記のボタンよりダウンロードの上、ご確認ください。