ブログ記事|システム開発のIC

AWSサーバーレス入門!環境構築するためのステップを紹介|システム開発のIC

作成者: Admin|Apr 1, 2024 3:00:00 PM

現代では、クラウドコンピューティングの進化により、サーバーを所有する必要がなくなりました。AWSのサーバーレス技術であるLambdaを中心に、必要な時だけリソースを使用し、コストを最適化できます。

そこで本記事では、AWSにおけるサーバーレスの概要と、環境構築の手順、実践的なユースケースを解説します。サーバー運用の手間を大幅に削減できるサーバーレスの魅力について見ていきましょう。

 

 

サーバーレスコンピューティングとは

サーバーレスコンピューティングとは、サーバーをプロビジョニングしたり管理したりすることなく、コードを実行できるクラウドのコンピューティングモデルです。

従来のクラウドサービスはリソースを事前にプロビジョニングする必要がありましたが、サーバーレスコンピューティングではリソースの割り当てや管理が自動的に行われます。AWSのサーバーレスコンピューティングサービスの代表が「AWS Lambda」となり、Lambdaはイベントドリブンのコード実行環境で、サーバーをプロビジョニングすることなくコードを実行できます。

まずはサーバーレスコンピューティングとクラウドの違いについて見ていきましょう。

 

クラウドとの違い

サーバーレスはクラウドサービスの一種ですが、従来のクラウドサービスとは異なる点があります。従来のクラウドサービス(PaaSやIaaS)では、以下の作業が発生します。

 

  • サーバーの用意
  • OSやミドルウェアのインストール
  • アプリケーションの構築
  • デプロイ

 

一方、サーバーレスでは以上の作業が不要になります。 サーバー環境の管理から開放されるため、本来のアプリケーション開発に専念できるでしょう。

 

従来のクラウド

サーバーレス

サーバー管理が必要

サーバー管理不要

固定費用発生

従量課金制

 

サーバーレスは、利用した分のみの従量課金制が一般的です。 アプリケーションの利用状況に合わせて、柔軟にコストを最適化できるでしょう。

 

AWSサーバーレスの代表「AWS Lambda」とは


「AWS Lambda」は上記でも簡単に紹介しましたが、AWSのサーバーレスコンピューティングサービスの代表格となっています。

Lambdaは、プログラミング言語を用いて関数を登録するだけで、その関数を実行することができます。利用できる言語には、Java、Ruby、Python、Goなどがあります。

Lambdaの利用料金は従量課金制で、以下の2つの料金を支払います。

 

料金種別

無料利用枠

超過した場合の課金

リクエスト料金

1,000,000件まで無料

1,000,000件ごとに0.2oUSD

コンピューティング価格

400,000GB/秒まで無料

1GB/秒につき0.00001667USD

 

Lambdaの特徴として、サーバーの準備や管理が不要なことが挙げられます。関数の実行環境はAWSが用意してくれるため、ユーザーはアプリケーション開発に専念できるでしょう。

 

「AWS Lambda」の使い方やメリットについては、以下の記事でさらに詳しく解説しています。ぜひご覧ください。

 

「EC2」と「Lambda」の違い

EC2とLambdaの最大の違いは、利用者側で用意する環境の有無にあります。EC2は以下のようにインフラ環境を利用者側で構築する必要があります。

 

  • OS、ミドルウェア(DB、HTTPサーバーなど)のインストール
  • アカウント作成
  • 権限設定 ・最適化、
  • セキュリティパッチの適用 など

 

一方、Lambdaはクラウド側で実行環境がすべて用意されているため、利用者側でインフラ環境を構築する必要はありません。利用者は関数の実装と定義さえすれば、Lambdaに実装した処理を実行できます。

EC2はインフラ環境の構築・運用が必要ですが、Lambdaは不要なため、アプリケーション開発に専念できるというメリットがあります。

 

Amazon EC2については以下の記事でさらに詳しく解説しています。サーバーレスコンピューティングサービスの導入を検討されている方は、ぜひご覧ください。

『Amazon EC2とは?インスタンスの料金体系やメリット・注意点』

 

AWSでサーバーレス環境構築するためのステップ

AWSでサーバーレスは、以下のステップを踏んで環境構築しましょう。

 

  • ​​アプリケーションの設計
  • 開発環境の構築
  • Lambda関数の作成と設定
  • API Gatewayを使用したAPIの構築
  • データストアとしてのDynamoDBの利用

 

それぞれのステップについて詳しく解説します。

 

アプリケーションの設計

AWSサーバーレスアーキテクチャにおいて、アプリケーションの設計はビジネスロジックを機能コンポーネントから切り離すことが重要です。これにより、モジュール性が高まり、堅牢で進化的なアーキテクチャを実現できます。

具体的には、以下の2つのアプローチが一般的です。

 

アプローチ

特徴

単一責任のLambda関数

ひとつの関数にひとつの責務を持たせる。コードの分離が容易でリソースの最適化が可能。

Lambda-lith

ひとつの関数にすべての責務を持たせる。コード凝縮度が高く、設定の一元化が可能。

 

いずれのアプローチにも一長一短がありますが、適切に設計することで、堅牢で保守性の高いサーバーレスアプリケーションを構築できます。

 

開発環境の構築

AWSサーバーレス環境を構築するための開発環境は、主に以下の2点を整備する必要があります。

 

  • SAM CLIのインストール

ローカル開発に必要な「AWS Serverless Application Model(SAM)」のコマンドラインツールです。

  • AWS Toolkitのインストール
    開発ツールに追加するプラグインで、AWS連携・SAM操作が円滑にできます。 Visual Studio Code、Eclipse、IntelliJ IDEAなど、使用する開発環境に応じたツールキットをインストールします。

 

SAM CLIとAWS Toolkitをインストールすれば、ローカル環境でのAWSサーバーレス開発が可能になります。

 

Lambda関数の作成と設定

次に、Lambda関数の作成と設定をしましょう。Lambda関数を設定するためには、以下の手順を踏みます。

 

  • 基本情報の入力
    • 関数名の設定
    • 実行ロールの設定(新規作成も可能)
  • ランタイムの選択
    • Python、Node.js、Javaなど言語を指定
  • ハンドラー指定
    • コードの実行開始地点を指定
  • メモリ、タイムアウト、VPCの設定
    • デフォルト設定のままでも可

 

作成後は、テストイベントを用意しテスト実行することで、関数が正常に動作するかを確認できます。

 

API Gatewayを使用したAPIの構築

AWSでサーバーレスアプリケーションを構築する際、API Gatewayを使ってAPIを公開することができます。API Gatewayは、以下のような機能を提供しています。

 

  • APIの作成、メンテナンス、公開を一元管理 
  • クライアントからのリクエストの受け取り
  • 応答の返却 
  • 認証の実装

 

例えば、Lambda関数をAPIとして公開する場合は、以下の手順で行います。

 

  1. API Gatewayコンソールから「REST API」を作成
  2. リソース(エンドポイント)とHTTPメソッドを設定
  3. リソースとLambda関数を統合する
  4. APIをデプロイしてURLを公開

 

このようにAPI Gatewayを使うことで、Lambdaなどのサーバーレスリソースを外部に公開できるようになります。

 

データストアとしてのDynamoDBの利用

AWS LambdaからDynamoDBにデータを書き込む際は、DynamoDBのPutItemAPIを利用します。PutItemAPIではプライマリキーを指定し、そのキーがテーブル内に存在しなければ新規にアイテムを追加、存在すればアイテムの内容を置き換えます。

例えば注文IDをプライマリキーとし、PutItemAPIで注文情報を書き込むと以下のようになります。

 

def create_order(dynamodb, tableName, orderId, customerId, count): table = dynamodb.Table(tableName) try: response = table.put_item( Item={ "order_id": orderId, "customer_id": customerId, "count": Decimal(count), "order_created": Decimal(str(datetime.now().timestamp())) } ) except: print("create an order item error!") return response

 

このように、同じ注文IDで複数回実行されても最終的な結果は変わらずに、べき等性 (ある操作を複数回行っても結果(状態)が同じになる性質) が担保されます。

AWSサーバーレスの実践的なユースケースと例

AWSサーバーレスは、さまざまなユースケースで活用できます。

 

  • ウェブアプリケーション:Lambda、API Gateway、DynamoDBを組み合わせてウェブアプリのバックエンド処理を実装できます。
  • データ処理:Lambda関数でデータ加工処理を行い、Amazon S3などのストレージと連携できます。
  • 自動化バッチ処理:AWS Step FunctionsやAmazon CloudWatchEventsと組み合わせてバッチ処理を自動化できます。

 

それぞれのユースケースについて詳しく見ていきましょう。

 

ウェブアプリケーション

AWSサーバーレスでウェブアプリケーションを構築する場合、以下のようなアーキテクチャが一般的です。

 

サービス

役割

AWS Lambda

サーバーレス関数を実行

Amazon API Gateway

HTTPリクエストを受け付け、Lambdaを呼び出す

Amazon DynamoDB

NoSQLデータベースとしてデータを永続化

Amazon S3

静的ウェブサイトの配信、アプリデータの保管

 

このようにAWSの各サービスを組み合わせることで、スケーラブルでレジリエントなウェブアプリケーションが実現できます。 例えば、Lambdaでサーバーサイドのロジック処理を行い、DynamoDBにデータを格納、S3でフロントエンド側の静的コンテンツを配信するといった運用が考えられます。

 

データ処理

データ処理の例として、AWS LambdaとAmazon Kinesisを活用したリアルタイムストリーム処理があります。Kinesisでデータストリームを作成し、Lambdaでストリームへレコードを追加するなどの処理が可能です。

また、画像処理のユースケースもあります。例えばAWS LambdaとAmazon S3を組み合わせて、アップロードされた画像をリアルタイムでサムネイルに変換したり、その他の加工を施すことができます。

さらに、バッチ処理も重要なユースケースのひとつです。例えば、AWS Lambdaを使って定期的にAmazon S3のファイルを処理し、別のストレージにデータを移行することができます。

 

自動化バッチ処理

自動化バッチ処理は、AWSサーバーレスのよくあるユースケースのひとつです。大量のデータを効率的に処理することができるため、ファイル取り込み処理やキューベースの処理、トランザクションジョブなどに活用されています。

例えば、ファイル取り込み処理をサーバーレスで実現する場合は以下のようなアーキテクチャが考えられます。

 

  • S3バケットにファイルがアップロードされるとLambda関数が起動
  • Lambda関数がStep Functionsのワークフローを呼び出し処理開始
  • ワークフローがファイルを分割し、各チャンクを並列処理
  • 処理済みのチャンクファイルを結合し、メールで送信

 

このようにAWS Step Functions、Lambda、S3などを組み合わせることで、サーバーレスでスケーラブルな大規模バッチ処理を実現できます。

 

Lambda以外のAWSサーバーレスサービス


AWSでは、Lambdaの他にもさまざまなサーバーレスサービスが提供されています。

 

  • Amazon API Gateway:RESTful APIやWebSocket APIをビルドし、Lambdaと連携できるAPIサービス
  • AWS Step Functions:マイクロサービスの調整やデータ変換などの分散アプリケーションを構築
  • Amazon SNS(Simple Notification Service):プッシュ通知配信のためのメッセージングサービス
  • Amazon SQS(Simple Queue Service):メッセージキューイングサービス
  • Amazon S3(Simple Storage Service):オブジェクトストレージサービス
  • Amazon DynamoDB:フルマネージド型の高速NoSQLデータベースサービス

 

本項目では、これらのAWSサーバーレスサービスについて解説します。サーバーレスサービスを組み合わせ、サーバーを管理する必要がないスケーラブルなアプリケーションを構築しましょう。

Amazon API Gateway

Amazon API Gatewayは、Amazon Web Servicesが提供するフルマネージド型のWebサービスAPIです。 Amazon API Gatewayでは、AWS上のデータ、ビジネスロジック、あるいはその他のサービスをWebサービスとして公開することができます。

クライアントアプリケーションからの受信リクエストを処理し、適切なバックエンドサービスにルーティングしてくれます。セキュリティ制御、監視、スロットリングなどの機能も備えています。

AWS Step Functions

AWSのサーバーレスサービスのひとつであるAWS Step Functionsは、マイクロサービスワークフローのコーディネーションにおいて重要な役割を果たします。Step Functionsではステートマシンを構築し、複数のAWSサービスをまたいだタスクフローを簡単に定義できます。例えば次のようなユースケースがあります。

 

  • データ処理パイプラインの構築
  • マシンラーニングモデルのトレーニングと推論のワークフロー
  • IoTデバイスからのデータ収集と処理
  • バッチ処理やETLワークフロー

 

このようにStep Functionsを利用することで、複雑なマイクロサービスアーキテクチャでも、サーバーレスで簡単かつ信頼性の高い実行を実現できます。

 

Amazon SNS

Amazon SNS(Simple Notification Service)は、アプリケーション間(A2A)およびアプリケーションからユーザーへ(A2P)の2つの方法で通知を送信できるサーバーレスのPub/Subメッセージングサービスです。

A2Aでは、分散システムやマイクロサービス、イベント駆動型のサーバーレスアプリケーション間での高スループットなプッシュベースの多対多メッセージングが可能です。対象サービスは以下の通りです。

 

サービス

説明

Amazon SQS

メッセージキューイングサービス

AWS Lambda

サーバーレス実行環境

その他HTTPSエンドポイント

-

 

A2Pでは、SMSテキスト、プッシュ通知、Eメールを活用し、ユーザーへの通知配信が可能です。

 

Amazon SQS

Amazon SQS(Simple Queue Service)は、AWSのマネージドメッセージキューサービスです。メッセージの送受信を簡単に行えるよう設計されており、サーバーレスアプリケーションの構成要素としてよく利用されます。

メッセージキューはアプリケーションの疎結合を実現する手段として有用で、以下のようなメリットがあります。

 

  • 送信側と受信側を分離できる
  • バーストトラフィックに対する緩衝機能がある
  • 障害発生時のリトライが容易

 

Amazon SQSには以下のような特徴があります。

特徴

説明

高可用性

複数のアベイラビリティゾーンに冗長化

スケーラビリティ

トラフィックの増加に合わせて自動スケーリング

セキュリティ

VPC 内でのプライベートキューが利用可能

AWSのマネージドサービスなので、メッセージングのインフラ構築・運用は不要で、開発に専念できるでしょう。

 

Amazon S3

Amazon S3(Simple Storage Service)とは、クラウド上でオブジェクト(ファイル)を格納・管理するための、高可用性・高信頼性・高パフォーマンスなオブジェクトストレージサービスです。

Amazon S3を使えば静的なウェブサイトをホスティングできます。ウェブサーバーの設定や管理は不要で、HTMLやCSS、JavaScriptなどの静的コンテンツをS3バケットにアップロードするだけで公開できます。

 

Amazon DynamoDB

Amazon DynamoDBはNoSQLの分散型データベースサービスです。従来のリレーショナルデータベース(RDS)とは異なり、データを完全に分散させることで、理論上無限の読み書き性能を実現できます。

RDSとDynamoDBの違いは以下の通りです。

 

RDS

DynamoDB

強い一貫性

最終的な整合性(デフォルト)

スケール性能に限界

無限の拡張性

 

このように、DynamoDBは一貫性を若干犠牲にする代わりに、高いスケーラビリティを確保しています。そのため、大量データの処理が必要なIoTシステムや、可用性の高いWebアプリケーションなどに適しています。

 

サーバーレスの導入をご検討中ならICにお任せください


株式会社ICの「ITソリューション」は、業界・規模を問わず幅広い企業のシステム開発を請け負っています。ソフトウェア開発からインフラ設計構築、24時間フルサポートのシステム運用支援で、貴社をサポートいたします。

経験豊富なスタッフが、プロジェクトの規模に応じて最適なチームを編成し、高い技術力でお客さまのニーズに対応します。また、開発から運用までワンストップで対応可能なのが特徴です。

運用体制や業務フローの見直しも定期的に実施しているので、開発・導入後もご安心ください。

 

ITソリューションのサービスについてさらに詳しく知りたい方は、以下のページをご覧ください。

システム開発のIC

 

まとめ

今回は、AWSサーバーレスの代表「AWS Lambda」やAWSでサーバーレス環境を構築するためのステップについてご紹介しました。

AWSのサーバーレスサービスを活用すると、サーバーの管理運用が不要になり、開発者はアプリケーションの開発に専念できるようになります。従来のサーバー環境と比べ、コスト削減やリソース最適化、高い拡張性などのメリットがあります。

しかし一方で、サーバーレスアーキテクチャには「リソースに割り当てるメモリは最大10GB」、「AWS Lambdaの最大実行時間は15分」などの制約があることも覚えておきましょう。

このようにサーバーレスには適した用途と適さない用途があるため、アプリケーションの要件を考慮して適切に設計する必要があります。

サーバーレスサービスの導入を検討されている方は、システム開発のICにご相談ください。サーバーレスを含むクラウドソリューションの構築から運用まで、高い技術力とサービスでお客さまをサポートいたします。

 

※2024年4月時点の仕様です。現在は異なっている可能性があります。