【要約】完了タスクが溜まってNotionが重くなったので、自動アーカイブするLambdaを作った [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
タスク管理エージェントの運用者が、Notionでタスク管理を継続した結果、完了済みタスクの蓄積によりシステムパフォーマンスが低下した。具体的には、以下の問題に直面した。
- ・完了タスクが500件を超え、DBの表示速度が著しく低下した。
- ・タスク取得APIのレスポンスが遅くなり、エージェントの動作に悪影響を及ぼした。
- ・手動でのアーカイブ作業は手間がかかり、定期的なメンテナンスを継続することが困難であった。
// Approach
開発者は、AWS LambdaとEventBridge Schedulerを組み合わせ、毎週日曜の深夜に自動実行されるメンテナンスジョブを実装することで、運用の自動化を図った。具体的な解決手法は以下の通りである。
- ・Notion APIの
has_moreとnext_cursorを利用し、ページネーションを考慮した全件取得を行う。 - ・
last_edited_timeを解析し、30日以上経過したタスクを抽出対象とする。 - ・
archived: trueをPATCHリクエストで送り、ページを削除ではなくアーカイブする。 - ・
DRY_RUNフラグにより、実際の更新を行わずに件数のみ確認できる安全な検証機能を備える。
// Result
自動アーカイブジョブの導入により、NotionのDBパフォーマンスとAPIの応答速度が劇的に改善した。運用者にとっての具体的な成果は以下の通りである。
- ・完了タスクの蓄積が自動的に抑制され、快適なタスク管理環境が維持された。
- ・深夜の自動実行により、業務時間中のAPI競合を避けつつメンテナンスが完了する。
- ・DRY_RUNによる事前検証が可能となり、本番環境への誤操作リスクを最小化した。
- ・エージェントのAPIレスポンスが向上し、システム全体の利便性が高まった。
Senior Engineer Insight
> バッチ処理における「安全設計」が徹底されており、実戦的な内容である。特にDRY_RUNモードの実装は、本番環境への影響を最小化する上で極めて重要だ。また、Pythonのタイムゾーン処理における
Zサフィックスの扱いなど、細かな実装上の注意点も示されている。ただし、データ量が数万件規模に達する場合、Lambdaの実行時間制限やNotion APIのレートリミットがボトルネックとなる。その際は、処理の分割やリトライ戦略の導入を検討すべきである。