AWS Lambda
開発者ガイド

Go の AWS Lambda Context オブジェクト

Lambda で関数が実行されると、コンテキストオブジェクトはハンドラーに渡されます。このオブジェクトは、呼び出し、関数、および実行関数に関する情報を含むメソッドおよびプロパティを提供します。

Lambda コンテキストライブラリは、次のグローバル変数、メソッド、およびプロパティを提供します。

グローバル変数

  • FunctionName – Lambda 関数の名前。

  • FunctionVersion – 関数のバージョン

  • MemoryLimitInMB – 関数に割り当てられているメモリ量。

  • LogGroupName – 関数のロググループ。

  • LogStreamName – 関数のインスタンスのログストリーム。

コンテキストメソッド

  • Deadline – 実行がタイムアウトした日付 (Unix 時間のミリ秒) が返ります。

コンテキストプロパティ

  • InvokedFunctionArn – この関数を呼び出すために使用される Amazon リソースネーム (ARN)。INVOKER によって、バージョン番号またはエイリアスが指定されたかどうかを示します。

  • AwsRequestID – 呼び出しリクエストの ID。

  • Identity – (モバイルアプリ) リクエストを認証した Amazon Cognito ID に関する情報。

  • ClientContext – (モバイルアプリ) クライアントアプリケーションによって Lambda に送信されたクライアントコンテキスト。

呼び出しコンテキスト情報へのアクセス

Lambda 関数には、環境と呼び出しリクエストに関するメタデータへのアクセスがあります。これには、パッケージのコンテキストでアクセスできます。ハンドラーにはパラメータとして context.Context が含まれている必要があり、Lambda は関数に関する情報をコンテキストの Value プロパティに挿入します。context.Contextのコンテキストにアクセスするために、lambdacontext ライブラリをインポートする必要があることに注意してください。

package main import ( "context" "log" "github.com/aws/aws-lambda-go/lambda" "github.com/aws/aws-lambda-go/lambdacontext" ) func CognitoHandler(ctx context.Context) { lc, _ := lambdacontext.FromContext(ctx) log.Print(lc.Identity.CognitoIdentityPoolID) } func main() { lambda.Start(CognitoHandler) }

上記の例では、lc はコンテキストオブジェクトがキャプチャした情報を消費するために使用される変数であり、log.Print(lc.Identity.CognitoIdentityPoolID) はその情報を印刷します (この場合は CognitoIdentityPoolID)。

関数の実行時間のモニタリング

次の例では、Lambda 関数を実行するときにかかる時間をモニタリングするためにコンテキストオブジェクトを使用する方法を紹介しています。これによって、予期されるパフォーマンスを分析し、必要な場合には関数コードを調整します。

package main import ( "context" "log" "time" "github.com/aws/aws-lambda-go/lambda" ) func LongRunningHandler(ctx context.Context) (string, error) { deadline, _ := ctx.Deadline() deadline = deadline.Add(-100 * time.Millisecond) timeoutChannel := time.After(time.Until(deadline)) for { select { case <- timeoutChannel: return "Finished before timing out.", nil default: log.Print("hello!") time.Sleep(50 * time.Millisecond) } } } func main() { lambda.Start(LongRunningHandler) }