LambdaのPython初心者向け解説です。
Lambdaの解説
ハンドラ
LambdaがインポートするLambda関数内の関数のこと。
def lambda_handler(event, context):
ハンドラ関数: eventデータ
Lambdaはeventパラメーターを使用してイベントデータをハンドラーに渡します。
このパラメータは通常、Pythonの辞書タイプです。
{
"account": "123456789012",
"region": "ap-northeast-1",
"detail": {},
"detail-type": "Scheduled Event",
"source": "aws.events",
"time": "1970-01-01T00:00:00Z",
"id": "cdc73f9d-aea9-11e3-9d5a-835b769c0d9c",
"resources": [
"arn:aws:events:ap-northeast-1:123456789012:rule/my-schedule"
]
}
list、str、int、float、NoneTypeタイプも使用できます。
ハンドラ関数: Contextオブジェクト (Python)
contextパラメーターを使用して、LambdaのContextオブジェクトに格納されたランタイム情報にアクセスします。
このパラメータはLambda Contextタイプです。
Lambda関数の実行中に、Contextオブジェクトにより次のようなランタイム情報を取得できます。
-
Lambda関数を終了するまでの残り時間
- タイムアウトはLambda関数の設定で変更可能
-
実行中のLambda関数に関連付けられたCloudWatchロググループとログストリーム。
-
Lambda関数をインポートたクライアントに返されたAWSリクエストID。
- AWSサポートでへの問い合わせに利用できる。
-
Lambda関数がMobile SDK経由で呼び出された場合は、Lambda関数をインポートするモバイルアプリケーションの詳細を知ることができます。
メソッド
- get_remaining_time_in_millis()
プロパティ
- function_name
- function_version
- invoked_function_arn
- memory_limit_in_mb
- aws_request_id
- log_group_name
- log_stream_name
- identity
- client_context
ハンドラ関数: 返り値
オプションで、ハンドラーは値を返すことができます。
クライアントが RequestResponse インポートタイプ(同期実行)を指定した場合
インポートを行ったクライアントに結果が返ります。
return event['time']
- 同じ情報は、CloudWatch にも送信されます。
クライアントが Event インポートタイプ(非同期実行)を指定した場合
Lambdaは何も返しません。
- 代わりに、CloudWatchログにエラー情報がログ記録されます。
- CloudWatchメトリックスでエラーメトリックスを確認することもできます。
Lambda関数のログ
-
print関数(標準出力)
- CloudWatch Logsにログを書き込みます。
print('Check complete at {}'.format(str(datetime.now())))
-
logging.* 関数
-
CloudWatch Logsにログを書き込みます。
-
各ログエントリにタイムスタンプやログレベルなどの追加情報を書き込みます。
-
Lambda関数の例外
Lambda 関数で例外が発生した場合、Lambdaはエラーを認識してJSONに例外情報をシリアル化して返します。
def always_failed_handler(event, context):
raise Exception('I failed!')
{
"errorMessage": "I failed!",
"stackTrace": [
[
"/var/task/lambda_function.py",
3,
"my_always_fails_handler",
"raise Exception('I failed!')"
]
],
"errorType": "Exception"
}