Help us understand the problem. What is going on with this article?

[JAWS-UG CLI] Lambda Blueprint解説: Lambda共通編 (Python)

More than 3 years have passed since last update.

LambdaのPython初心者向け解説です。

Lambdaの解説

ハンドラ

LambdaがインポートするLambda関数内の関数のこと。

コード(例)
   def lambda_handler(event, context):

ハンドラ関数: eventデータ

Lambdaはeventパラメーターを使用してイベントデータをハンドラーに渡します。

このパラメータは通常、Pythonの辞書タイプです。

イベントソースがCloudWatchEventsの場合のイベントデータ(サンプル)
   {
     "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タイプです。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-context-object.html

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に例外情報をシリアル化して返します。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-exceptions.html

コード例
   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"
   }
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした