Lambdaとは?
サーバのプロビジョニングや管理なしでコードを実行できる技術(サーバレス)です。課金は実際に使用したコンピューティングの時間に対してのみに発生し、コードが実行されていない時間は料金が発生しない。また、プラットフォームの仕様も公開されていないので脆弱性をついた攻撃をしづらくなっている。
サーバレスとは?
プログラムを実行するためのサーバが必要ないということです。Lambdaはプログラムを実行する環境を提供してくれます。簡単にいえば、EC2も、その上にのるWebサーバもアプリケーションを実行するアプリケーションサーバも不要になるのです。
対応言語
- Java
- Node.js
- C#
- Pyathon
pythonのプログラム例
下記はs3バケットにアップロードしてあるa.jsonをb.jsonに変更する処理です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import boto3 import json from collections import OrderedDict def handler(event,context): BACKET_NAME = event('bucket_name') BACKET_KEY = event('bucket_key') UPLOAD_BUCKET_KEY = 'b.json' s3 = boto3.client('s3') obj = s3.get.object(Bucket=BACKET_NAME, Key=BACKET_KEY) data = json.loads(obj['Body'].read().decode('utf-8')) print(f'{BUCKET_KEY}の内容: {data}') s3 = boto3.resource('s3') obj = s3.Bucket(BUCKET_NAME).Object(UPLOAD_BUCKET_KEY) data = OrderedDict(file_name=UPLOAD_BUCKET_KEY, author=data['author'],age=(data['author'] + 1)) res = obj.put(Body=json.dumps(data)) if res['ResponseMetadata']['HTTPStatusCode'] == 200: print(f'[SUCCESS] upload {UPLOAD_BUCKET_KEY}') |
def 関数名(event,context):
lambdaでは関数を定義する必要があります。
event
lambdaを実行する際にjson形式で色々な値を渡すことができるオブジェクトです。サンプルコードの中で「bucket_name」と「bucket_key」をプログラムに渡しています。lambda側のテストイベントに変数を設定するとプログラムから呼び出せるようになります。
context
トリガー
何らかのイベントが発生したら、設定した処理を実行できる環境
対応しているイベントのAWSサービス
- S3のファイルアップロード
- DynamoDB
- Kinesisストリームデータのリアルタイム処理
具体的な用途
- S3に画像がアップロードされたらリサイズしたサムネイル画像を生成する。
- ログ等のストリーミングデータを分析する。
- IoTセンサーからデータを受け取りDBに登録する。
- APIリクエストによるバックエンド処理
- バックアップ処理
- アクセス数の増減が激しいWebアプリケーション
- ツイッターボットのような四六時中動いている必要がないアプリには最適
上記のような用途があるので、Lambdaを使えばいちいち監視サーバや分析サーバを別途作成する必要がなくなります。
料金
毎月100万リクエストまで無料(無料利用枠)
ログ
コードのエラーやデバッグ情報、Lambdaで受け取ったイベント内容などは全てCloudWatchで閲覧できる。
Lambdaの非同期呼び出し
いくつかのサービス(S3、SNS)では非同期に呼び出すことが可能です。
設定
成功、失敗時の送信先
- Amazon SQS
- Amazon SNS
- 別のLambda
- Amazon EventBriage
この記事へのコメントはありません。