Power Unit Inc. | 想像力のない者に翼はない | AWS Lambda
17407
page-template,page-template-full_width,page-template-full_width-php,page,page-id-17407,qode-quick-links-1.0,woocommerce-no-js,ajax_fade,page_not_loaded,,side_area_uncovered_from_content,columns-4,qode-theme-ver-16.8,qode-theme-bridge,qode_header_in_grid,wpb-js-composer js-comp-ver-5.5.2,vc_responsive
 

AWS Lambda

Amazon Lambda

サーバーのプロビジョニングや管理なし(サーバーレス)でコードを実行できます

AWS Lambda ってすごいんです。

AWS Lambda を使用すると、データの変更、システムステータスの遷移、またはユーザーによるアクションをトリガーとし、その応答として任意のコードを実行できます。Lambda は、S3、DynamoDB、Kinesis、SNS、CloudWatch といった AWS の各種サービスから直接トリガーできるため、さまざまなリアルタイム型の、サーバーが不要(サーバーレス)なデータ処理システムを構築できます。

AWS Lambda は以下のように機能します。

  • AWS Lambda にコードをアップロードします。
  • 各種 AWS サービスにおける、データの変更、ステータスの変化や遷移、モバイルアプリや HTTP エンドポイントから HTTP メソッドを介したユーザアクション(アクセス)を直接トリガーとする応答としてアップロード済みのコードを実行します。
  • AWS Lambda は、サーバーのプロビジョニングが不要(サーバーレス)で、トリガーが発生した時だけリアルタイムでコードを実行します。
  • AWS Lambda は、実行されたワークロードだけ料金が発生します。常に仮想サーバーインスタンスが動作している Amazon EC2 のように、実行インスタンスを維持するための料金は発生しません。
リアルタイムファイル処理

Amazon S3 を使用して AWS Lambda をトリガーし、アップロードしたデータを直ちに処理することができます。例えば、画像のサムネイル作成、ビデオのコード変換、ファイルのインデックス作成、ログの処理、コンテンツの検証、およびリアルタイムでのデータの収集とフィルタリングなどに使用できます。

下の図は、保存された写真(イメージファイル)を異なる解像度のデバイスに最適化されたイメージにリアルタイムにあらかじめ変換しておく例です。

リアルタイムにファイルを処理する時に推奨するアーキテクチャー(デザインパターン)は下の図のようになります。

  1. Amazon S3 (ストレージ)にカメラで撮影したイメージファイルを追加します。Amazon S3 はイメージファイルが追加されると Amazon Simple Notification Service (Amazon SNS) にメッセージを送信します。
  2. Amazon SNS はイベントのトリガーを設定しているすべての受信者に通知します。
  3. AWS Lambda 1 は、データを処理するためのレイヤーを構築して、データを処理して、結果のレイヤーに送信します。例えば、モバイル(スマートフォンやタブレット)に最適化された解像度のイメージを S3 に保存します。
  4. AWS Lambda 2 は、③のデータ処理と並行して異なるデータ処理をします。例えば、パソコン(ノートブックやデスクトップ)に最適化された解像度のイメージを S3 に保存します。
  5. AWS Lambda N は、他とは異なる、プロビジョニングやマネージドサーバーが必要ない(サーバーレス)でデータを処理するプロセスを生成します。
  6. あらかじめ処理された結果が、コストが安くかつ冗長性のある Amazon S3 に保存されます。
  7. ⑥とは別に、非構造化データつまり低レイテンシーな and/or 処理に最適な NoSQL データベースの Amazon DynamoDB に保存されます。
リアルタイムストリーム処理

AWS Lambda と Amazon Kinesis(AWS のリアルタイムストリーミングデータ解析向けのプラットフォーム)を使用してリアルタイムのストリーミングデータを処理することで、アプリケーションのアクティビティの追跡、注文のトランザクション処理、クリックストリーム分析、データクレンジング、メトリクスの生成、ログのフィルタリング、インデックス作成、ソーシャルメディア分析、および IoT デバイスデータのテレメトリと測定を行えます。

Amazon Kinesis の詳細は、「分析」の項目を参照してください。

下の図は、ソーシャルメディアのメッセージに含まれているハッシュタグをリアルタイムに抽出しデータベースに保存し、後から分析をすることができるようにします。

リアルタイムにストリームを処理する時に推奨するアーキテクチャー(デザインパターン)は下の図のようになります。

  1. リアルタイムにイベントデータが Amazon Kinesis(ストリーム)に送信されます。Kinesis は大規模で 24 時間対応で冗長性があり、同じイベントに対応する複数の AWS Lambda のファンクションを実行します。
  2. AWS Lambda のファンクション 1 は、入力されたイベントを処理して低レイテンシーな and/or 処理に最適な NoSQL データベースの Amazon DynamoDB のテーブルにイベントデータを保存します。
  3. AWS Lambda のファンクション 1 は、また、同時に、統計マトリクス用に Amazon CloudWatch(監視サービス)に値を送信します。
  4. AWS Lambda のファンクション 2 は、入力されたイベントを冗長性がありコストに優しく長期保存に適したAmazon S3 に保存します。Amazon S3 に保存されたデータは、ダウンストリーム処理や分析のために簡単にアクセス可能です。
抽出、変換、ロード

AWS Lambda を使用することで、Amazon DynamoDB テーブル内のデータの変更すべてに対して検証、フィルタリング、ソート、またはその他の変換を実行し、変換されたデータを別のデータストアにロードすることができます。

下の図は、EC サイトで注文があった時に、(単純な)注文データを DynamoDB に保存すると同時に AWS Lambda で様々なデータ処理をして、結果をビッグデータ解析用のデータウェアフハウス Amazon Redshift に保存します。

リアルタイムにファイルを処理する時に推奨するアーキテクチャー(デザインパターン)は下の図のようになります。

  1. 低レイテンシーな and/or 処理に最適な NoSQL データベースの Amazon DynamoDB のテーブルにデータを送信します。このテーブルは、更新内容を DynamoDB のストリームに発行するようにできます。
  2. AWS Lambda ファンクションは DynamoDB から更新されたデータの塊を受信するためにストリームをサブスクライブ(購読)しています。更新されたデータの塊は、圧縮された CSV 形式に変換されます。この時、データに対して高度な情報(例えば Geo-IP lookup:参照元位置情報)を追加できます。
  3. AWS Lambda ファンクションは圧縮された CSV 形式のコンテンツ(もちろん他の形式でも構いません)を Amazon S3(ストレージ)にアップロードします。この時 Amazon Redshift で読み込むように設定します。S3 に保存さえれたデータは、長期間保存することも、さらに Amazon Glacier(永続的データストア)に保存することも、適当なタイミングで削除するように設定することもできます。
  4. AWS Lambda ファンクションは定期的に Amazon Redshift(データウェアハウス)に対して、新たに蓄積された CSV ファイルを Amazon S3 から読み込むために COPY コマンドを呼び出します。AWS Lambda ファンクションが Amazon Redshift の COPY コマンドを呼び出すと、Amazon Redshift は CSV ファイルを抽出し、クラスター全体のタスクで受信できるように分散配信します。
  5. Amazon Redshift は Amazon S3 から最近(更新があった)のコンテンツを取得して、並列的に読み込むクラスターノード全体に、抽出した CSV ファイルを分散的に配信します。
IoT バックエンド

AWS Lambda と Amazon Kinesis を使用して、IoT (モノのインターネット) デバイスデータのテレメトリと分析のためのバックエンドを構築できます。

下の図は、トラクターのセンサーからのデータが AWS Lambda に送信され、データを処理するコードが実行し、トラクターの部品の異常を検知し自動的に新しい部品の発注します。

IoT(モノのインターネット)のバックエンドを構築する時に推奨するアーキテクチャー(デザインパターン)は下の図のようになります。

  1. デバイスが Amazon Kinesis(ストリーム)にイベントデータを送信します。Amazon Kinesis は、イベントに対する膨大な容量と冗長性の保証するストレージ機能を提供し、同一のイベントに対応した複数の AWS Lambda を並列的に呼び出します。
  2. AWS Lambda ファンクション 1 は低レイテンシーな and/or 処理に最適な NoSQL データベースの Amazon DynamoDB のテーブルにイベントデータを保存します。DynamoDB は、設定値を変えるだけで必要なテーブルの容量をプロビジョニング(事前準備)できます。AWS Lambda ファンクションは、同時に、 単純な統計分析のために AWS CloudWatch に値を送信します。
  3. AWS Lambda ファンクション 2 は ファンクション 1 と同じイベントを処理しますが、ファンクション 2 は、入力されたイベントをコストが安く冗長性のある長期保存用の Amazon S3(ストレージ)に保存します。 S3 に保存されたデータは、Amazon Elastic MapReduce (Amazon EMR) (ホスト型Hadoopフレームワーク)や Amazon Redshift(データウェアハウス)を用いて統計分析することを容易にします。
  4. AWS Lambda ファンクション 3 は、DynamoDB からデータを抽出するためにデバイスを直接呼び出すための同聞インターフェースを提供します。
  5. コストを削減するために、Amazon S3 に保存しているデータからオンラインでは必要ないイベントは、自動的にAmazon Gracier に移行するか、S3 のオブジェクトのライフサイクル管理に従って、一定時間経過したデータは自動的に削除します。
  6. Amazon EMR は DynamonDB と S3 に対して直接 READ/WRITE ジョブを実行し、データを分析し、統計情報を生成し、デバイスから集められた大量のイベントの集合からマトリクスを作成します。S3 のイベントデータは、標準的な SQL 呼び出しで、対話的な調査やデータ処理のために Amazon Redshift に読み込まれます。
モバイルバックエンド

AWS Lambda と Amazon API Gateway を使用して、API リクエストの認証と処理のためのバックエンドを構築できます。Lambda によって、機能が豊富でカスタマイズされたアプリケーション体験をより簡単に作成できます。

下の図は、ユーザーがステータスの更新を送信します。モバイルアプリがバックエンドのエンドポイントに RESTful API を呼び出します。Lambda がトリガーされ、友達リストを検索して、ユーザーの友達に対して更新通知を送信します。

モバイルのバックエンドを構築する時に推奨するアーキテクチャー(デザインパターン)は下の図のようになります。

  1. モバイルユーザーは、Amazon Cognito(モバイルサービス)からアイデンティティ(識別子)を抽出します。Amazon Cognito はモバイルアイデンティティの管理とモバイルデバイス間のデータの同期機能を提供します。モバイルユーザーがアイデンティティを一旦取得すると、ユーザーは、AWS サービスに自由にアクセスできるようになります。
  2. ユーザーが生成したメディアファイル(写真など)は、大量のデータ管理と冗長性を備えた Amazon S3(ストレージ)に保存されます。
  3. モバイルユーザーは、アップロードしたデジタル資産を高速なコンテンツデリバリーネットワーク(CDN)の Amazon CloudFront を通して Amazon S3 からアクセスできます。
  4. モバイルユーザーはアプリケーションロジックとダイナミックデータを起動する Amazon API Gateway(RESTful API)にリクエストを送信します。API Gateway は、AWS Lambda で実行中のコードの中から対応した機能にアクセスするモバイルアプリケーションのエントリーポイントとして機能します。
  5. モバイルアプリケーションは、ユーザーによって作成された様々な要求をサポートするために高度にスケール可能なバックエンドインフラが必要です。AWS Lambda は要求に対する応答のコードを実行して、自動で管理され、リソースのサイズに応じて自動的にスケールします。AWS Lambda ファンクション 1 は、ユーザーが非構造化データを低レイテンシーな and/or 処理に最適な NoSQL データベースの Amazon DynamoDB へ保存したり抽出したりするエンドポイントを提供します。
  6. AWS Lambda ファンクション 2 は、Amazon DynamoDB Stream を用いて、ユーザーによる変更を抽出し、検索可能なドキュメントを生成します。
  7. AWS Lambda ファンクション 3 は、Amazon CloudSearch(マネージド型検索サービス)からユーザーがデータを検索できるように同期インターフェースを提供します。
  8. AWS Lambda ファンクション 4 は、モバイルアプリケーションでユーザー同士が互いに通信しあうための非同期のエンドポイントを提供します。ファンクションは、それぞれの通信リクエストを形式化し、Amazon SNS によって繋がっているプッシュ通知を発信します。
ウェブアプリケーション

開発者は、AWS Lambda を AWS の他のサービスと組み合わせることで、スケールアップまたはスケールダウンを自動的に行う強力なウェブアプリケーションを構築し、複数のデータセンターにまたがる可用性の高い設定で実行できます。スケーラビリティ、バックアップ、または複数データセンターによる冗長性を、管理に労力を費やすことなく実現できます。

下の図は、まず、フロントエンドのコードが Amazon S3 に保存されています。ユーザーが地元の天気を取得するためにリンクをクリックします。ウェブアプリがバックエンドのエンドポイントに RESTful API を呼び出します。Lambda がトリガーされ、地元の天気を Amazon DynamoDB から取得してユーザーに返信します。

投票をリアルタイムに処理する機能を備えたウェブアプリケーションのバックエンドを構築する時に推奨するアーキテクチャー(デザインパターン)は下の図のようになります。

  1. ユーザーは、 Twilio のようなサードパーティーのサービスが提供する電話番号やショートコードを利用して投票します。
  2. Twilio のようなサードパーティーは、メッセージの内容を送信するように設定され、Amazon API Gateway(RESTful API) が生成したエンドポイントに送られ、さらに AWS Lambda へと送信されます。
  3. ファンクションの応答が AWS Lambda で生成されます。このファンクションはメッセージに含まれる投票を展開し、結果などを低レイテンシーな and/or 処理に最適な NoSQL データベースの Amazon DynamoDB に書き込みます。
  4. Amazon DynamoDB にメタデータが書き込まれます。このテーブルは、 DynamoDB Stream を有効化し、循環的にテーブルの変更をトラッキングすることができます。
  5. アップデートがあると DynamoDB Stream は別の AWS Lambda ファンクションに通知され、投票を計算し、カテゴリー別の合計だけが保存された集約化された DynamoDB のテーブルに書き戻されます。
  6. 投票の結果を表示するダッシュボードが生成されます。このダッシュボードは、HTML と JavaScript が利用され、Amazon S3(ストレージ)に静的に保存されます。このWebページは、AWS JavaScript SDK を用いて、集約化された DynamoDB のテーブルを呼び出して、リアルタイムに投票結果を表示します。
  7. 最後に、Amazon Route 53(DNS)は、プロバイダーとして利用し、Amazon S3 のバケツ(内容)をカスタムドメインネームで指すホスティングゾーンを生成します。