[boto3] NextTokenを使って情報取得
このページについて
boto3で NextToken
を使う場面があったので、 NextToken
とは?について簡単にメモします。
経緯
このGlueジョブ実行履歴取得スクリプトを作成している際に、 NextToken
の使い方を確認しました。
boto3の get_job_runs
を使用していますが、実際のジョブ実行履歴数とスクリプトで取得したジョブ実行履歴数に乖離がありました。
そこで確認したところ、最大で取得できる結果( MaxResults
)が200件までで、それ以上取得したい時に NextToken
を使う必要がありました。
ちなみに、boto3のドキュメントには記載がなく実行結果から確認しています。
また、awscliで GetJobRuns
を使うと、 MaxResults
は1,000件であり、boto3とは違いました。
参考ドキュメント
- boto3(get_job_runs)
- awscli(get_job_runs)
NextTokenとは
APIによって情報取得を行い、取得上限まで達した場合に、NextToken
にトークンが入ってきます。
"NextToken": "eyJOZXh0VGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX="
この NextToken
を使うと、その続きから情報取得できます。
よって、この NextToken
がなくなるまでループさせると全件取得できる。
各ドキュメントの説明
- boto3のドキュメント
NextToken (string) --
A continuation token, if not all requested job runs have been returned.
- AWSドキュメント
NextToken
A continuation token, if this is a continuation call.
Type: String
Required: No
スクリプト側のサンプル
NextTokenに何か入っている場合は、それを使って情報取得するようにします。
if next_token is not None and next_token != '':
response = session.client('glue').get_job_runs(
JobName = job_name,
MaxResults = 200,
NextToken = next_token
)
else:
response = session.client('glue').get_job_runs(
JobName = job_name,
MaxResults = 200
)
Lambdaで使用する際の注意点
今回は一時的に使用するだけのスクリプトだったので問題ではなかったですが、Lambdaで実行する場合は以下の注意点あり。
- 実行時間が延びるのでタイムアウトに注意。
- 今回は15分に設定。
- メモリ使用量も大きく増やす必要があるので注意。
- 今回は1024MBに設定。
- 以下のような実行エラーがあり、メモリサイズを調整しています。
RequestId: 6df00cc9-1a0f-4ea5-bce5-38dc27788fa6 Error: Runtime exited with error: signal: killed
Runtime.ExitError
参考記事
Discussion