このページについて

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)
Retrieves metadata for all runs of a given job definition.

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

参考記事

おはようアンダーソン君これは私の備忘録だ。取っておきたまえ事の発端AWS Lambda上でEC2のインスタンス情報(describe_instances)で掘り堀りする某スクリプトがありました。instanceIDがすべ...

元記事はこちら

[boto3] NextTokenを使って情報取得
著者:Issei Matsuki


アイレットなら、AWS で稼働するサーバーを対象とした監視・運用・保守における煩わしい作業をすべて一括して対応し、経験豊富なプロフェッショナルが最適なシステム環境を実現いたします。AWS プレミアコンサルティングパートナーであるアイレットに、ぜひお任せください。

AWS 運用・保守サービスページ

その他のサービスについてのお問合せ、お見積り依頼は下記フォームよりお気軽にご相談ください。
https://www.iret.co.jp/contact/service/form/