AWS Lambda –Pythonの関数

この章では、Pythonで簡単なAWS Lambda関数を作成し、その動作概念を詳細に理解します。

AWSでLambda関数の作成に進む前に、Python用のAWSツールキットのサポートが必要です。この目的のために、以下の手順に従って、添付されている対応するスクリーンショットを確認してください-

ステップ1

AWSコンソールにログインしてLambda関数を作成し、言語をPythonとして選択します。

ステップ2

次に、をクリックします Create functionボタンをクリックして、PythonでシンプルなAWSLambdaを作成するための詳細を入力します。このコードはメッセージを返しますHello from Lambda using Python ここに示すように見えます-

ステップ3

次に、変更を保存し、コードをテストして出力を確認します。UIのテストボタンを使用してAWSコンソールでテストすると、次の出力とログが表示されます。

ステップ4

これで、Python用の任意のエディターまたはIDE内でコードを記述できます。ここでは、コードの記述にVisualStudioコードを使用しています。後でファイルを圧縮してAWSコンソールにアップロードする必要があります。

ここでは、コードを圧縮してAWSコンソールで使用しています。

ステップ5

ここで、 Upload a .ZIP file 以下に示すオプション-

Pythonのハンドラーの詳細

ハンドラーは、ファイルの名前の後に関数の名前を続ける必要があることに注意してください。上記の場合、ファイル名はhellopython.py 関数の名前は my_handler; したがって、ハンドラーは hellopython.my_handler

アップロードが完了して変更が保存されると、実際にはAWSLambdaコンソールのオンラインエディターにzipファイルの詳細が表示されます。それでは、コードをテストして出力とログを確認しましょう。

ここで、次のサンプルコードを使用してLambda関数の詳細を理解しましょう-

def my_handler(event, context):
   return "aws lambda in python using zip file"

上記のコードでは、関数名my_handlerには、イベントとコンテキストの2つのパラメーターがあります。

Pythonのコンテキストオブジェクト

コンテキストオブジェクトは、Lambda関数の名前、ミリ秒単位の残り時間、リクエストID、クラウドウォッチグループ名、タイムアウトの詳細などの詳細を提供します。

コンテキストオブジェクトで使用可能なメソッドと属性を以下の表に示します-

シニア番号 メソッド名と説明
1

get_remaining_time_in_millis()

このメソッドは、ラムダ関数が関数を終了するまでの残り時間をミリ秒単位で示します

シニア番号 属性と説明
1

function_name

これはawsラムダ関数名を与えます

2

function_version

これにより、実行中のawslambda関数のバージョンが得られます

3

invoked_function_arn

これにより、ARNの詳細がわかります。

4

memory_limit_in_mb

これは、ラムダ関数の作成中に追加されたメモリ制限を示しています

5

aws_request_id

これにより、awsリクエストIDが提供されます。

6

og_group_name

これにより、cloudwatchグループ名が付けられます

7

log_stream_name

これにより、ログが書き込まれるクラウドウォッチログストリームの名前がわかります。

8

identity

これにより、aws mobilesdkで使用した場合のAmazonCognitoIDプロバイダーの詳細がわかります。詳細は以下の通りです−

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

client_context

これにより、aws mobilesdkで使用した場合のクライアントアプリケーションの詳細がわかります。詳細は以下のとおりです。

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom-モバイルクライアントアプリからのカスタム値のdictがあります
  • client_context.env-AWS MobileSDKからの環境の詳細の辞書があります

コンテキストの詳細を出力するPythonの実用的な例を見てみましょう。以下のコードを確認してください-

def my_handler(event, context):
   print("Log stream name:", context.log_stream_name)
   print("Log group name:",  context.log_group_name)
   print("Request ID:",context.aws_request_id)
   print("Mem. limits(MB):", context.memory_limit_in_mb)
   print("Time remaining (MS):", context.get_remaining_time_in_millis())
   return "aws lambda in python using zip file"

上記のコードの対応する出力を以下に示します-

Pythonを使用したロギング

Pythonを使用して情報をログに記録するには、利用可能な印刷またはロガー機能を使用できます。上記のコンテキストの例を使用し、inCloudWatchをチェックして、ログが出力されるかどうかを確認しましょう。次のコードを確認してください-

def my_handler(event, context):
   print("Log stream name:", context.log_stream_name)
   print("Log group name:",  context.log_group_name)
   print("Request ID:",context.aws_request_id)
   print("Mem. limits(MB):", context.memory_limit_in_mb)
   print("Time remaining (MS):", context.get_remaining_time_in_millis())
   return "aws lambda in python using zip file"

CloudWatchでのこのコードの出力は次のとおりです-

次の例を観察して、ロガーを使用してログをCloudWatchに出力する方法を理解してください。

import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_handler(event, context):
   logger.info('Using logger to print messages to cloudwatch logs')
   return "aws lambda in python using zip file"

このための出力は、以下のスクリーンショットに示すようになります-

Lambda関数のPythonでのエラー処理

このセクションでは、Pythonでエラーを処理する方法を示す実用的な例を見てみましょう。ここに示されているコードを観察してください-

def error_handler(event, context):
   raise Exception('Error Occured!')

ログ表示はこちらの画像のようになります−