Last updated
Last updated
カスタムレイヤーを使用すると、pandasやnumpyなど通常は使用できないライブラリをPythonのLambdaで使用することが可能になる。
以下の実装で作成することで問題ない。
データを保存するとき
Lambdaが平文のデータを受け取る
LambdaがKMSを使ってデータを暗号化する
Lambdaが暗号文をRDSに書き込む
データを取得するとき
Lambdaが暗号文のデータをRDSから取得する
LambdaがKMSを使ってデータを複合する
Lambdaが平文のデータを返す
大量に動く可能性がある場合、KMSのAPI課金、スロットル対策のため、Lambda側でKMSの鍵情報、一次キャッシュする仕組みが必要となる場合がある。 実現する場合は、AWS Encryption SDKなどが使用可能。
ただし、RDBMSが備えるインデックスなどの利用も制限される事になるため、認識しておく必要がある。
逆にキャッシュしない方が良い場合は、ローテーションを必要とする場合など、古いキャッシュ利用が問題となったりするケース。 実装ミスなどあれば、間接的に秘匿情報の漏洩リスクなども高まるため、API課金、スロットルの心配が無い箇所で使うなら、キャッシュさせないほうがいい場合もある。
Lambdaに対する様々な拡張機能が付与可能。
リリース時はモニタリング用途、ツールのインストール、セキュリティ用途、シークレットの取得などに対応していた模様。
参考記事
Lambda Extensionsを仕組みとして使用している。
キャッシュが働くため、コスト削減にもつながる様子。
参考
実装自体は、Lambdaの実行環境内でHTTPサーバーのプロセスを起動し、このサーバーに対してリクエストすることで値を取得している。 (Lambda実行環境内でリバースプロキシをデプロイするExtensionのようなイメージ)
なので高速なのは自前実装でメモリ内でキャッシュを実現する方法のようだ。
参考
さらに細かく調べた記事によれば、実装はGoでなされており、POSTやQuery-Stringが不正などの場合は400番台のエラーを返すようです。
参考
ENIが削除できず、どのLambdaに紐づけられているか分からない場合にLambda ENI Finderが使えるらしい。
以下のような感じらしい。aws_request_idは識別子として使えるのかも。
通常はLambdaはVPC外に配置するが、プライベートなVPCで使用したい場合にはVPC Lambdaを使用する。
ちなみにVPC LambdaをpublicなVPC(IGWあり)に配置する場合、public IPをもつENIをVPC LambdaにアタッチしないとIGWと接続できないらしい。
リトライのRequest Idは同じになるらしい。
なのでリトライ回数に応じて処理を帰るなどの事例もある。
最初に読むのはすごく良い気がする
Firecrakerについてちょっと分かる
これまでSQSをイベントソースとする際の同時実行数は、Lambda関数の「同時実行の予約」で行っていたが、直感的に設定が可能になった。
ランタイムそのもののバージョン制御ではない(3.8 -> 3.9ではない)ので注意が必要。
関数の更新にアップデートするなどが選択できるが、自動が推奨。関数を更新する予定が無い場合は自動にすべきとのこと。
APIGWでは使えないので、Lambda関数URLなどを使用する必要がある。
そもそもPython 3.10の新機能にもフィーチャーして紹介されている。
Structural pattern matching (PEP 634):
構造的パターンマッチ(match-case文)の導入
Parenthesized context managers (BPO-12782):
複数contextmanagerを使う場合に、withのネストする必要がないという理解
Writing union types as X | Y (PEP 604):
Union[X,Y]
と書いていたものが、X | Y
で良くなるということらしい
User-defined type guards (PEP 647):
型チェックツールをより正確に動かすことができるということみたい
Improved error messages:
キャッシュかされていいみたい
Amazon SQS、AWS Lambda、Amazon SNS間の再帰的な呼び出しを16回行った時点で停止する
関数が Amazon SQS または Amazon SNS にイベントを送信すると、Lambda はそのイベントに基づいて関数が呼び出された回数を追跡
同じトリガーイベントによって関数が16回以上起動された場合、Lambdaは次の起動を停止し、設定されていればデッドレターキューまたは障害発生時にイベントを送信
以下のフィルタリング機能などをサポート
値の末尾の文字に対するマッチング (サフィックスフィルタリング)
大文字小文字の区別を無視する (equals-ignore-case)
複数のフィールドにまたがる条件が真である場合に単一のルールでマッチングする (OR マッチング)
また数値の境界を従来の-1e9~1e9から-5e9~5e9に増加
個人的に注目は以下
PEP 657: Fine-grained error locations in tracebacks
エラーメッセージがより分かりやすく
PEP 646: Variadic generics
型指定の改善
PEP 655: Marking individual TypedDict items as required or not-required
型指定の改善
PEP 673: Self type
型指定の改善
PEP 675: Arbitrary literal string type
インジェクションからの保護
PEP 681: Data class transforms