AWS Lambda
https://gyazo.com/dc1f5059cfd2c433637290d7a8ee562e
#FaaS #サーバレス
概要
/tmpには書き込みができる
実行パス(/usr/local/bin:/usr/bin/:/bin:/opt/bin)
RDSへアクセス→データベースプロキシ
AWS EFSをローカルにマウントすることでlambdaが共有リソースにアクセスできる構成
後続のイベントの処理時間を短縮するには、初期化中にAWS SDKクライアントなどの再利用可能なリソースを作成する
ラムダサービスのVPC内で展開されていて直接アクセスすることはできない。lambda api経由でのアクセス
lambdaはデフォルトだとawsのvpc上に展開されてパブリックエンドポイント(lambda api)経由でlambdaを呼び出すことになる
lambdaをvpc内に置くメリットは基本的にない
lambdaをvpc内に置く(eniを置く)メリットはないが、EC2や RDSなどのプライベートなVPC内のリソースにアクセスする際にはそうせざるをえない→データベースプロキシで解決できるならそうする
コンテナサポート
AWSが提供するベースイメージはLambdaのサービス基盤にあらかじめキャッシュされている(FROM public.ecr.aws/lambda/python:3.8みたいな)
ZIPパッケージは解凍後に250Mが上限
コンテナイメージの場合は最大10GBまでデプロイ可能
lambdaで大容量ファイルを扱う
S3から/tmpにファイルをDLする
コンテナイメージに含めておく
概念
Function
Trigger
lambda関数を呼び出すリソース
イベントソースマッピング
ストリーム/キューから項目をバッチで読み取り、関数を起動できる
関数の入力は複数になる
DynamoDB,Kinesis,SQS,Kafka
Event
lambda関数に渡されるJSON形式のドキュメント
デプロイパッケージ
zip
コンテナ
Layer
Lambda関数が使用するライブラリを共通化できる。ビジネスロジックの共通かなど
/optに展開される
最大5つまでのLayer
ユースケース
イベント駆動
ファイル処理
通知処理
ストリーム処理
フォームハンドラー
シンプルなバックエンド(AWS SAM、AWS Amplify)
ワークフロー(AWS Step Functions)
AWSの機械学習サービスへのフック
S3にメディアが置かれたらキックしてAWSの機械学習サービスを呼び出すみたいな感じ
デプロイ方法
マネコンからソースコード編集
zipファイルをアップロード
S3に配置したzipをデプロイ
ECRからデプロイ
Layer
KLayers:ap-northeast-1のpythonラムダレイヤーを使えばお手軽にライブラリ使える
/opt以下に展開されるのでpythonライブラリをレイヤーにする場合は/opt/pythonに配置されるようにすればおk
Layerを作成してみるサンプル
https://gist.github.com/hiroki1117/d3f352dcdca8348b00acd6c58a4a38e3
aws公式layerを作成する手順ドキュメント
VPC Lambda
lambdaをVPC内に配置するとlambdaに対してENIが付与される
lambda自体がENIを作成、削除できるようにlambdaに対して権限設定する必要がある
AWSLambdaVPCAccessExecutionRole
VPCサブネットのIPを消費するのでlambda用のサブネットを作成するのがベスト
lambdaのeniにはパブリックIPが付与されないので外部ネットワークと通信するにはNATゲートウェイが必要
複数の Lambda 実行環境が Hyperplane ENI を共有して、 Hyperplane ENI から VPC 内の ENI に NAT 処理を行うことで VPC 内のリソースへアクセスすることが可能となります。
ただし、この場合は AWS 外のサービスなどに直接パブリックインターネット経由でアクセスすることはできません。
https://blog.serverworks.co.jp/aws-lambda-provides-iam-condition-keys-vpc-settings
https://gyazo.com/c06101a2885e62aede6dddfb53afda05
https://youtu.be/neqNR7Ffq-s
参照
aws公式lambdaドキュメント