LoginSignup
5
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-05-29

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タイプです。

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"
   }
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6