参考にした講演はこちらです。
https://www.youtube.com/watch?v=QvPgjEwgiew&t=1314s
AWS Lambdaの基本(part1)
Lambda関数
- Lambda関数とは、AWS Lambdaで実行するアプリケーションのこと
- それぞれが隔離されたコンテナ内で実行される
- 実行の際に呼び出す
- コードは依存関係も含めてアップロード
サポートされている言語
サポートされていない言語はカスタムランタイムを実装することで利用可能
Lambdaファンクション基本設定
- メモリ
- 64MBごとに128MB~3008MB
- 容量に応じてCPU能力も比例
- メモリ容量が一定を超えると使用するコア数も増える
- タイムアウト
- 最大15分
- 実行ロール
- AWSリソースアクセス用のIAMロールを準備
Lambdaファンクションの制限
- インバウンドネットワーク接続はブロックされる
- アウトバウンドはTCP/IPとUDP/IPソケットのみ
- ptraceシステムコールはブロックされる
- TCP 25番ポートのトラフィックはブロックされる
Lambda の実行環境
イベントソース
- イベントソースとは・・・イベントの発生元となるAWSのサービスまたはユーザが開発したアプリケーション
- イベントソースには3タイプ
- ポーリングベース・・・Lambdaがポーリングをして処理するデータが有る場合にLambda関数を実行
- ストリームベース
- ストリームベース以外
- ポーリングベース以外
- Lambda関数はイベントソースから呼び出される
- ポーリングベース・・・Lambdaがポーリングをして処理するデータが有る場合にLambda関数を実行
呼び出しタイプ
Lambda関数のライフサイクル
- ENIの作成
- コンテナの作成
- デプロイパッケージのロード
- デプロイパッケージの展開
- ランタイム起動・初期化
- 関数/メソッドの実行
- コンテナの破棄
- 1~6を新規に実行するのがコールドスタート
- コールドスタートが起こる条件 = 利用可能なコンテナがない場合
- 1つもコンテナがない
- 利用可能な数以上に同時に処理すべきリクエストがきた
- コード、設定を変更した
- コールドスタートが起こる条件 = 利用可能なコンテナがない場合
- 1~6を再利用するのがウォームスタート
- 安定的にリクエスト数が発生している場合はウォームスタート?
ユースケース
-
サーバーレスサムネイル作成
-
サーバーレス CRON Job
- CloudWatch 1時間ごとにラムダのタスクを実行するようにする。
- ※一時的なタスク実行をCRON Jobというらしい。
ラムダの制限
- RAM 128mBから3G
- CPU
- RAMに依存する
- 2 vCPU
- 時間制限
- 15分間
- /tmp ストレージ 512MB 大きなファイルを処理不可。
- パッケージ容量制限 250MB
- 同時実行数
- ある時点における実行中のLambada関数の数
- 実績に応じて制限緩和申請が可能
- Function burst concurrency 1000?(増やすこと可能) 500-3000
ラムダ レイテンシー
★ここわからん
セキュリティ
- IAMロール
- ラムダが他のAWSサービスにアクセスできるようにIAMロールを割り当てる。
- リソースベースポリシー for Lambda
- 他のアカウントがLambdaをアクセスできるように許可
- 他のAWSサービスがLambdaをアクセスできるように許可
- VPCとの併用
- ラムダをVPC内にデプロイすることが可能。
- VPC内にデプロイしたラムダからインターネットに接続するには設定が必要。
- プライベートサブネット内のEC2→インターネットと同様の設定をする
- 参考 VPC に接続した関数のインターネットアクセスとサービスアクセス
- https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-vpc.html
- ラムダの監視
- CloudWatch
- 実行ログは CloudWatch Logsに格納
- メトリックスはCloudWatch Metricsに表示
- 重要 ラムダ関数がCloudWatch logsへの書き込み(IAMロール)権限を持っているか確認
- X-Ray
- (X-Ray勉強しないとわからん)
- トレースできる
- 重要 ラムダ関数が実行ロールあるか確認
- CloudWatch
同期呼び出し(Invocation)
- CLI, SDK, API GWが対応
- すぐに結果が帰ってくる
- エラーハンドリングはクライアント側で行う
- https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-sync.html
非同期呼び出し(Invocation)
- S3, SNS, CloudWatch Events・・・
- ラムダはリトライを試みる(3回)
- ユースケース例. S3にファイルが作成されたとき
- プロセスが冪等(idempotent)かを確かめる
- 冪等性について勉強が必要
- dead letter queueの送信
- プロセスが失敗したときにSNS or SQSへ送信する
- https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-async.html
イベントソースマッピング
- Kinesis, DynamoDB, SQS, SQS FIFOが対応
- https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-eventsourcemapping.html
- (これわからない)
疑問点
冪等性とは??
- 1回だけ処理したいものが1回だけ処理される?
- Lambdaは1回だけ処理したいものが複数回処理が行われることがあるから、DynamoDB等で冪等性を保証しないといけない。
https://dev.classmethod.jp/articles/lambda-dynamodb/