1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonでLambda関数を非同期で呼び出す方法

Posted at

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関数を非同期で実行することができます。非同期実行は、処理をブロックせずに次のアクションを進めることができるため、パフォーマンスやユーザー体験の向上に役立ちます。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?