🦝

Lambdaのタスク実行中に実行可能な残り時間を確認する

2022/12/21に公開

状況

  • AWS Lambda関数でPythonのスクリプトを実行したい。
  • 処理には長い時間がかかることが見込まれており、実行時間上限の15分以内には完了しない場合がある。
  • 残り時間が短くなったら適当に返り値を生成し、lambdaの処理を正常に完了させたい(実行時間超過でのエラーにより落としたくない)

対策

handlerの関数の引数であるcontextから、関数の実行可能な残り時間を取得することができるので、この値を元に分岐させる。

def main(event: dict, context) -> str:
	# context.get_remaining_time_in_millis()で残り時間msを取得できる
	print(context.get_remaining_time_in_millis())

	# 残り時間が300秒未満だったら分岐
	if context.get_remaining_time_in_millis() < 300_000:
		pass
	
	# 別の関数に渡して同様に使用することも可能
	process(link_set, url, context)

参考
https://www.radishlogic.com/aws/lambda/how-to-get-aws-lambda-remaining-time-using-python/

Discussion