Lambda †
Quota: 制限 †
S3にアップロードするzipパッケージを作る †
poetry install --only main --sync
mkdir -p dist/lambda-package
cp --recursive .venv/lib/python*/site-packages/* dist/lambda-package/
cp --recursive my_project_source_directory dist/lambda-package/
pushd .
cd dist/lambda-package
zip -r ../../dist/lambda.zip .
popd
# show files
zip -sf dist/lambda.zip
docker imageの利用 †
記事:
設計 †
記事:
LambdaかECSか? †
- 軽量な処理はLambda, 複雑な処理はECS
- 以下ボトルネックの全てyesならLambdaでも良いが、将来どれが一つでも許容できない可能性があるならECS。
Lambda:
- リクエストがあってから起動。
- コスト: 安い。数百円/月〜。無料枠がある。1か月あたり 40 万 GB 秒のコンピューティング時間
- 用途: ワークロード、ペイロードが小さい用。インフラ定期メンテナンスがほぼ不要
- 開発: JavaScript, Python等のソースをzipにしてs3へ。
- Quotaの制限内に収まるか? Memo/AmazonWebServices/Lambda#l9e1e773
- ペイロードが6MBに収まるか?
- 実行時間が15分以内に収まるか?
- レイテンシが10秒前後となるコールドスタートを許容できるか?
- リクエスト量が時間によってムラがあるか?
- ALB, API Gatewayは不要にできる。Lambda Function URLsを関数に設定するとインターネットに公開可能。
ECS:
- 常時起動。
- コスト: Lambdaと比べて高い。7000円/月〜
- 用途: ワークロードが大きい。インフラ定期メンテナンスが必要
- 開発: コンテナベース。コンテナをECRに置くならコストが追加。
記事:
Web Adapter: node.js等のwebアプリをコンテナ化してlambdaで動かす †
記事:
RDSとの組み合わせ †
パフォーマンスチューニング †
python向け †
タイムアウト対応 †
S3へのアクセス制限 †
応答速度の改善/コールドスタート対策 †
Lambdaのコールドスタート時はレスポンスが遅くなる。
- コンテナが存在しない時
- コードが変更されて初回実行時
- 一定時間経過後
対策:
ベストプラクティス †
EOL(End Of Life): 古いランタイムバージョンの廃止 †
VPCでの利用 †
VPC Lambdaからインターネットへのアクセス †
VPCにLambdaを置くと、インターネットへアクセスできなくなる。
インターネットへアクセスしたい場合は、NAT gateway等を置く。その分コストは増える。
Lambda@Edge: CloudFrontで配信しているコンテンツのカスタマイズ †
- Lambda@Edge - AWS Lambda
Lambda@Edge では、Lambda 関数を実行して CloudFront が発信するコンテンツをカスタマイズし、ビューワーに近い AWS 地域でこの関数を実行できます。この関数は、プロビジョニングや管理の必要なく、CloudFront イベントに応答を実行します。Lambda 関数を使用して、次の時点で CloudFront リクエストとレスポンスを変更できます。