AWS Lambda
開発者ガイド

コンテキストオブジェクト (Go)

Lambda 関数の実行中に、AWS Lambda とやり取りをして次のような有益なランタイム情報を入手できます。

  • AWS Lambda が Lambda 関数を終了するまでの残り時間 (タイムアウトは Lambda 関数の設定プロパティの 1 つです)。

  • CloudWatch ロググループと実行している Lambda 関数に関連付けられるログストリーム。

  • Lambda 関数を呼び出したクライアントに返された AWS リクエスト ID。AWS サポートで、フォローアップの問い合わせにリクエスト ID を使用できます。

  • Lambda 関数が AWS Mobile SDK を通して呼び出された場合は、Lambda 関数を呼び出すモバイルアプリケーションの詳細を知ることができます。

  • 以下に一覧表示するオプションに加えて、Go 用 AWS X-Ray SDK を使用して、重要なコードパスの識別、パフォーマンスのトレースおよび分析のためにデータをキャプチャすることもできます。

AWS Lambda はこの情報を、サービスが Lambda 関数ハンドラーにパラメータとして渡す context.Context オブジェクトを経由して提供します。詳細については、「有効なハンドラ署名 」を参照してください。

以下のセクションでは、context オブジェクトを使用する 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.CognitoPoolID) } func main() { lambda.Start(CognitoHandler) }

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

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

次の例では、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) }

Lambda コンテキストライブラリは、次のグローバル変数を提供します。

  • MemoryLimitInMB: Lambda 関数に対して設定したメモリ制限 (MB 単位)。

  • FunctionName: 実行中の Lambda 関数の名前。

  • FunctionVersion: 実行中の Lambda 関数のバージョン。エイリアスを使用して関数を呼び出した場合、FunctionVersion はエイリアスが指すバージョンになります。

  • LogStreamName: CloudWatch は特定の Lambda 関数の実行のストリーム名を記録します。提供された IAM ユーザーに CloudWatch アクションのアクセス権限がない場合、null になることがあります。

  • LogGroupName: 呼び出される Lambda 関数と関連付けられた CloudWatch ロググループ名。提供された IAM ユーザーに CloudWatch アクションのアクセス権限がない場合、null になることがあります。

Lambda コンテキストオブジェクトには、次のプロパティも含まれています。

  • AwsRequestID: リクエストに関連付けられた AWS リクエスト ID。これは、この Lambda 関数を呼び出したクライアントに返された ID です。AWS サポートで、フォローアップの問い合わせにリクエスト ID を使用できます。AWS Lambda が関数を再試行する場合 (たとえば、Kinesis レコードを処理する Lambda 関数が例外をスローする状況)、リクエスト ID は同じままです。

  • ClientContext: AWS Mobile SDK を通じて呼び出されたクライアントアプリケーションとデバイスに関する情報。null とすることができます。クライアントコンテキストでは、クライアント ID、アプリケーションのタイトル、バージョン名、バージョンコード、アプリケーションのパッケージ名などのクライアント情報が提供されます。

  • Identity: 前の例で使用されています。AWS Mobile SDK を通じて呼び出された場合の、Amazon Cognito ID プロバイダーについての情報。null とすることができます。

  • InvokedFunctionArn: この関数の呼び出しに使用された ARN。関数 ARN またはエイリアス ARN を指定できます。非修飾 ARN は $LATEST バージョンを実行し、エイリアスはそれが指定する関数のバージョンを実行します。

次のステップ

ログ記録 (Go)