0
Help us understand the problem. What are the problem?

posted at

Lambdaまとめ

はじめに

Lambdaについて軽くまとめてみました〜。
個人的メモです

Lambdaメリット

(1)保守・運用に手間がかからない
・マネージドサービス。OSなどの保守を必要としない

(2)高負荷に耐えられる
・Lambdaによるプログラムの実行は、必要に応じてスケーリングする。

(3)コスト削減
・Lambdaは実行時間nに対する課金。稼働中はずっとコストが生じるEC2インスタンスでの運用に比べて、コスト削減可能

Lambdaの制限

(1)前回の状態を保持しない
・Lambdaは、実行が終わったときに環境が破棄される、ステートレスな実行環境のもとで実行される

(2)最大稼働時間は5分
・ずっと実行しなければならないプログラムを、lambdaで構成することができない

イベントドリブン型のプログラミング

Lambdaはイベントの発生によって、実行が開始、イベントになりうるのは、AWSの様々なサービス。例えば「アラームよって一定時間が経過した」「S3にファイルがアップロードされた」など。また API Gatewayと組み合わせると、HTMLフォームやAjax通信などによるリクエストをLambdaで処理することができる。つまり、WebシステムやWebサービスの構築にも活用できる

小さい関数を組み合わせて全体を作る

Lambdaプログラミングは、わずかな時間で処理が完了する小さな関数を、たくさん組み合わせてシステム全体を作るのが基本。組み合わせるときは、SQSやSNSを使うと、Lambda関数同士を疎結合でき、拡張性・保守性に優れたシステムを構築できる

Lambda関数の構造と設計

Lambdaで実行したい処理は、規定の書式にそった関数として記述しなければならない。呼び出すときに渡された値は、関数の引数として取得できる、そして関数からの戻り値が、Lambda関数の出力となる

Lambdaの利用に必要なアクセス権

Lambda関数を作ったり実行したりする操作には、適切なアクセス権が必要。そこで開発者のIAMユーザーと、Lambda関数を実行する時に使うIAMロールを、あらかじめ作成しておく必要がある

Lambda関数の実行

AWSマネジメントコンソールでは、テストイベントというものを作成することで、Lambda関数を手動で実行できる。Lambda関数が実行されると、そのログがCloudWatch Logsに書き込まれる。標準出力に出力したデータも、CloudWatch Logsに書き込まれる。

Lambdaコンテナ

Lambda関数は、Lambdaコンテナと呼ばれるLinuxベースの環境で実行。コンテナは、実行後に破棄されるステートレスな環境。2回目以降の実行ではコンテナが再利用されるため、前回実行したときの状態が、一部、残っていることがあります

同期呼び出しと非同期呼び出し

Lambda関数は、同期呼び出しと非同期呼び出しの2種類の呼び出し方がある。非同期の場合は、エラーが発生した時には、2回リトライ処理される。それでも失敗した時、DLQ(Dead Letter Queue)という場所に通知するように構成できる

2回以上の呼び出し可能性

非同期で実行されるLambda関数は、時には2回以上、実行される可能性がある

VPCへのアクセス

デフォルトでは、Lambda関数はインターネットと接続可能なパブリックなネットワーク上で実行される。しかし設定を変更することで、プライベートなVPC上で実行するようにもできる。ただし、パフォーマンスは低下する

イベントソース

Lambda関数の呼び出し元となるのが、イベントソース。S3やSQSなど、様々なリソースが使用可能

一定時間ごとにLambda関数を実行する

UINX環境のcronのように、一定期間ごとにLambda関数を実行したいときは、CloudWatchイベントを使う

S3にファイルアップロードされたときにLambda関数を呼び出す仕組み

S3の操作方法

S3バケットにアップロードされたファイルを読みとり、暗号化ZIPに変換し、それをもう一つのS3バケットに書き込む方法

(1)S3バケットからファイルの読み込み
Lambda関数が呼び出されるときには、配置されたS3バケット上でファイルを特定するキー名が渡される。そこで、そのキー名に相当するデータを、一度、Lambdaコンテナにダウンロード。AWSでは、PyhtonからAWSの様々なサービスを操作するためのBoto3と呼ばれるライブラリ提供。Lambda関数では、このライブラリを使って、S3バケットからLambdaコンテナにファイルをダウンロード。

(2)暗号化ZIPファイルの作成
暗号化ZIPを作るには、いくつかの方法がある。例えば、pymiizipとか

(3)S3ファイルの書き込み
(1)と同様にBoto3ライブラリを使って、(2)で作成した暗号化ZIPを目的のS3バケットへとアップロード

*ライブラリを使う場合は、Lambdaデプロイパッケージとしてまとめる

API Gatewayを経由してLambda関数を呼び出す

API Gatewayは、HTTPS経由でLambda関数を呼び出すための中継機能。API Gatewayを構成すると、エンドポイントと呼ばれるHTTPSのURLが作成され、そのURLに対してリクエストを送信することで、Lambda関数が実行されることになる。このときLambda関数には、HTTPSのGETメソッドやPOSTメソッドで送信されたデータやWebブラウザから送信されたUser-Agentなどのヘッダ情報が、イベント引数として渡される

DynamoDBにアクセスする

Lambda関数において、データを永続的に保存したい時によく使うのがDynamoDB。DynamoDBは完全なマネージドなNoSQL。RDSと違ってVPC環境でなくてもアクセスできる、PythonからはBoto3ライブラリを使って、DynamoDBにアクセス。

SQSを使った処理のキューイング

SQSは、メッセージをキューイングする機能。これから処理しようとする内容を、一度キューにためることで、順次。好きな時に取り出して処理できる。複数のプロセスでキューを処理するれば、並列処理も実現

SNSトピックでLambda関数を起動

SNSトピックは、任意のメッセージを通知する機能。SNSトピックは、Lambda関数のイベントソースになることができ、Lambda関数を起動する際の引き金として、様々な場面で利用できる

バウンスメールの処理

SESでメールを送信する際、宛先不明などのエラーメールは、SNSトピックとして通知される。SNSトピックからLambda関数を実行するように構成することで、バウンスメールが戻ってきた宛先を、データベーステーブルから削除するといった、バウンスが発生したときの削除処理を自動化できる

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?