おっさん社内SEエンジニアの勉強ブログ

勉強記録のブログとなります。

AWS認定学習記録-サーバレス-Lambdaの概要

AWS Lambdaの仕組み

f:id:In-houseSE:20211017082953p:plain

公式サイトのURL:

aws.amazon.com

今回のテーマ:Lambdaの概要

概要

Lambdaとは、インフラを気にすることなくアプリケーションコードを実行できるデータ処理サービスとなります。
例えば、クライアントからEC2インスタンス経由でデータ登録する単純な動作をしている場合、 Lambdaに置き換えてサーバレスに実行処理をすることが可能です。

概略図は以下のようになります。

f:id:In-houseSE:20211017084835p:plain

Lambdaの特徴

サーバレスによりEC2インスタンスの代わりにコードを実行することで効率的なアーキテクチャを実現します。
ポイントしては以下のようなものが挙げられます。

  • 行基盤はすべてAWSが管理
  • AWSサービスと連携させることで簡単にイベントトリブンなアプリケーションを実行可能
  • Node.js/Javaなどで書かれたコードを実行(他の言語はpythonもあります。)
  • 100ミリ秒単位で、コード実行時間に対しの課金
  • コスト効率が非常に高い
  • オートスケール

Lambdaの仕組み

利用方法もシンプルで、WEBアプリやモバイルアプリから利用可能となります。
仕組みの概要は以下の2ステップとなります。

  • STEP1:Lambdaファンクションを用意
  • STEP2:アプリからLambdaを呼び出す

また、イベント発生後に数ミリ秒以内にLambdaコードが実行されます。
トリガーとする項目は以下のようなものが挙げられます。

  • 画像アップロード
  • アプリケーション内の実行処理
  • WEBサイトのクリック
  • 接続デバイスからの出力

Lambdaの起動

Lambdaの起動は、Pushモデル/Pullモデルによって実行されます。

Pushモデル

S3/Cognito/SNSなどAWSサービスとカスタムイベントが直接実行することにより、起動するLambdaファンクションとなります。
ポイントは以下のようなものが挙げられます。

  • サービスもしくはアプリが直接実行
  • 実行時は順不同
  • 3回までリトライ

Pullモデル

DynamoDBとKinesisなどのデータ処理は、Lambdaに対し直接的なイベント発行を行いません。
そのため、Lambadaがそれらのポーリングを行い自らイベントを取得します。
ポイントは以下のようなものが挙げられます。

  • ストリームに入ってきた順に処理
  • イベントソースで登録したストリームに対し、Lambdaが自動的にデータ取得などのファンクションを実行
  • イベントごとに複数レコードを取得可能
  • データが期限切れになるまでリトライ

また、Lambadaが自らPullしてKinesisストリームの処理データの項目を取得します。
概要図は以下のようになります。

f:id:In-houseSE:20211017091526p:plain

Lambdaの処理タイミング

Lambadaの処理タイミングは、他のAWSサービスやSDKを利用したモバイルアプリもしくはWebアプリからの呼び出しが可能です。
実行タイミングは以下の2種類があります。

非同期実行

  • リクエストが正常に受け付けられたというレスポンス内容が返ってくること

同期実行

  • 実行完了時にLambdaファンクション内でセットしたレスポンスが返ってくること

Lambdaのパーミッション

Lambdaのパーミッション(アクセス許可)は、Lambdaファンクション作成時にLambda側で自動作成したり、クロスアカウントアクセスも設定可能です。
アクセス許可の設定は以下の2種類があります。

Execution

  • LambdaファンクションがAWSリソースにどういったアクションを実行させるか決定
  • 指定されたIAMロールに沿ってAWSリソースへのアクセス許可

Invocation

  • Lambdaファンクションをどのリソースが実行できるか決定

Lambdaの連携

Lambdaが連携するAWSサービスとして以下のようなものが挙げられます。

Lambdaの設定

Lambdaを設定する方法として以下のような流れになります。

1.コードをアップロードする
  -直接エディタ記述/S3インポート/zip形式でアップロード
2.関数を設定
  -スケジュール関数は実行頻度を指定
  -イベント駆動型関数はイベントソースを指定
3.必要なメモリ容量を指定
4.タイムアウト時間を指定
5.VPCアクセス用にVPCを指定
6.関数を起動

ブループリント

ブループリントとは、Lambdaファンクションをコーディングする際、サンプルコードになります。
活用する際のポイントは以下のようになります。

  • Lambdaを利用するユースケースを設計
  • ブループリントにサンプルコードを検索
  • サンプルコードを修正し、Lambdaファンクションを作成

スケジュール機能

スケジュール機能は、特定時刻をトリガーにしてLambdaファンクションを実行します。

バージョニング

バージョニングは、ファンクションの一時店を記録管理することが可能となります。
発行方法や特徴のポイントは以下のようになります。

バージョンの発行方法

  • Lambdaファンクションの作成/更新時にpublishパラメータによりバージョンが発行
  • PublicshVersionにより明示的にバージョン発行が可能

バージョンの特徴

  • 一度発行すると変更不可
  • 単純にバージョン番号が増加
  • 特定バージョンに対するポインタ(エイリアス)を設定し、特定時点にマークが可能
  • エイリアスを作成することでバージョン番号を把握してなくても指定バージョンを呼び出すことが可能

VPCアクセス

インターネットを経由せずVPC内のAWSリソースへアクセス可能となります。 概要としては以下のようなものがあります。

VPC内リソースへのアクセス

  • AWSのすべてのVPC内リソースへインターネットを経由せずアクセスが可能
  • Elastic Network Interface(ENI)を利用し実現
  • ENIは指定したサブネットのIPがDHCPで動的に割り当て

アクセス制御

  • VPC内リソースにアクセスさせたいLambdaファンクションに対し、VPCサブネットおよびセキュリティグループを指定
  • ファンクションに割り当てるIAM Roleに「AWSLambdaVPCAccessExecutioRole」のポリシーをアタッチが必要

Lambda Layer(2018年 re:invent)

Lambdaファンクション間で共有するコンポーネントをLambda Layerとして定義し参照が可能です。
Lambda Layerは最大5つまでとなります。
概要図は以下のようになります。

f:id:In-houseSE:20211017100120p:plain

ロードバランサー機能(2018年 re:invent)

ALBのバックエンドにLambdaを呼び出すことが可能となり、WebアプリにLambdaファンクションを組込み易くなりました。
概要図は以下のようになります。

f:id:In-houseSE:20211017100730p:plain

その他Lambdaのユースケース(使用事例)

  • Alexa:Amazon Echoの音声処理をトリガーとして、Alexaスキルを呼び出し
  • ログの異常検知:S3内のCloudTrailのログ分析により異常検知した場合、Lambdaを起動しメール通知
  • ストリーミング:Lambdaファンクションでストリーミングデータの傾向に応じスケーリングを実施
  • モバイルアプリ:モバイルから写真管理をLambdaを通し実施するなども容易

Lambdaエッジ

Lambdaの機能とCloudFrontのエッジロケーション処理の機能を合わせたサービスとなります。
イベントに関連されたLambdaファンクションが、エッジロケーションで実行されて実行結果を返答します。
概要図は以下のようになります。

f:id:In-houseSE:20211017102701p:plain

公式サイト: aws.amazon.com

今回のテーマは以上です。