PythonでLambda関数を非同期で呼び出す方法
AWS LambdaをPythonから非同期で呼び出す方法について説明します。AWS Lambdaはサーバーレスのコンピューティングサービスで、コードをイベント駆動型で実行できます。Lambdaを非同期に呼び出すと、呼び出し元がLambda関数の実行結果を待たずに次の処理に進むことができます。これを利用することで、システム全体の効率性を向上させることが可能です。
前提条件
AWS SDK for Python (boto3) がインストールされていること
AWSの認証情報(アクセスキー、シークレットキー)が設定されていること
pip install boto3
Lambda関数の非同期呼び出し
Lambda関数を非同期で呼び出すには、boto3ライブラリのinvokeメソッドを使用します。非同期呼び出しは、InvocationTypeパラメータをEventに設定することで実現できます。
サンプルコード
以下のコードでは、Lambda関数を非同期で呼び出し、その前後でログを出力しています。
import boto3
import json
import logging
# ロガーの設定
app = logging.getLogger()
app.setLevel(logging.INFO)
def invoke_lambda_async(function_name, pay_load):
# 関数実行開始のログ
app.logger.info("Lambdaの関数を実行開始 function_name:%s pay_load:%s", function_name, pay_load)
# Lambdaクライアントを作成
client = boto3.client("lambda")
# payloadをJSON形式に変換
json_pay_load = json.dumps(pay_load)
# Lambdaを非同期で呼び出し
response = client.invoke(
FunctionName=function_name, # 呼び出すLambda関数の名前
InvocationType="Event", # 非同期実行
Payload=json_pay_load, # 送信するペイロード(JSON形式)
)
# 実行終了のログ
app.logger.info("Lambdaの関数を実行終了 function_name:%s response:%s", function_name, response)
# サンプルのペイロードと関数名
function_name = "myLambdaFunction"
pay_load = {"key": "value"}
invoke_lambda_async(function_name, pay_load)
説明
ロガーの設定
loggingモジュールを使って、関数実行前後のログを記録しています。
boto3.client("lambda")
AWS Lambdaを操作するためのクライアントを作成します。このクライアントを使用してLambda関数を呼び出します。
client.invoke()
invokeメソッドを使ってLambda関数を呼び出します。重要な点は、InvocationTypeにEventを指定していることです。これにより、非同期実行が行われます。
InvocationType="Event"
非同期実行を指定するために、InvocationTypeをEventに設定します。これによって、呼び出し元はLambda関数の結果を待たずに処理を進めることができます。
Payload=json.dumps(pay_load)
Lambda関数に送るデータ(ペイロード)は、json.dumps()でJSON形式に変換して渡します。
ログ出力
Lambda関数の呼び出し前後にログを出力して、実行の開始と終了を確認できるようにしています。
まとめ
AWS Lambdaの非同期呼び出しは、システムの効率性を高めるために非常に有用です。boto3ライブラリを使って、簡単にLambda関数を非同期で実行することができます。非同期実行は、処理をブロックせずに次のアクションを進めることができるため、パフォーマンスやユーザー体験の向上に役立ちます。