Lambda
https://cdn.worldvectorlogo.com/logos/aws-lambda.svg
Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを実行できるコンピューティングサービスです。Lambda は可用性の高いコンピューティングインフラストラクチャでコードを実行し、コンピューティングリソースに関するすべての管理を行います。これには、サーバーおよびオペレーティングシステムのメンテナンス、容量のプロビジョニングおよび自動スケーリング、さらにログ記録などが含まれます。Lambda を使用すると、実質どのようなタイプのアプリケーションやバックエンドサービスに対してもコードを実行できます。必要なのは、Lambda がサポートするいずれかの言語でコードを指定することだけです。
コードを Lambda 関数に整理します。Lambda は必要に応じて関数を実行し、1 日あたり数個から 1 秒あたり数千個のリクエストまで自動的にスケーリングします。課金は実際に消費したコンピューティング時間に対してのみ発生します。コードが実行されていない場合、料金は発生しません。
Lambda API を使用して Lambda 関数を呼び出したり、他の AWS のサービスからのイベントに応答してLambda が関数を実行したりできます 例えば、Lambda を使用して以下のことができます。 AWS のサービス (Amazon Simple Storage Service (Amazon S3) や Amazon DynamoDB など) のデータ処理トリガーの構築。
Amazon Kinesis に保存されたストリーミングデータの処理。
AWS 規模、パフォーマンス、セキュリティで動作する独自のバックエンドの作成。
Lambda を再現する Docker イメージ
ローカル開発環境で実行する
code: (bash)
docker run --rm \
-v "$PWD":/var/task:ro,delegated \
lambci/lambda:python3.8 \
lambda_function.lambda_handler
# http リクエストを許可する
docker run --rm \
-p 9001:9001 \
-e DOCKER_LAMBDA_WATCH=1 -e DOCKER_LAMBDA_STAY_OPEN=1 \
-v "$PWD":/var/task:ro,delegated \
lambci/lambda:python3.8 \
lambda_function.lambda_handler
# リクエストを投げる
サンプルコード
code: Dockerfile
FROM public.ecr.aws/lambda/python:latest
COPY requirements.txt ${LAMBDA_TASK_ROOT}
RUN pip install --upgrade pip && \
pip install -r requirements.txt
COPY app.py ${LAMBDA_TASK_ROOT}
code: compress-image.py
import os
import boto3
import urllib.parse
from io import BytesIO
from PIL import Image, ImageFilter
TARGET_BUCKET_NAME = os.environ.get('TARGET_BUCKET_NAME')
def lambda_handler(event, context):
s3 = boto3.client('s3')
# Putされたバケット名やキーを取得
key = urllib.parse.unquote_plus(
# 画像をGet
response = s3.get_object(Bucket=origin_bucket_name, Key=key)
# 圧縮
im = Image.open(response'Body') im = im.convert('RGB')
im_io = BytesIO()
im.save(im_io, 'JPEG', quality=50, progressive=True)
# 画像をPut
s3.put_object(Body=im_io.getvalue(),
Bucket=TARGET_BUCKET_NAME, Key=key)
return None
Reference