動機
- Notionのダッシュボードにワークログを作った
- これを毎晩デイリーページに転機して、ダッシュボードからはクリーンアップする処理を定期実行したい
- AWS幼稚園児・GCP高校生くらいのスキル感なので、AWSで構築してみる
料金体型
Lambda
こいつがタダで結構使えることは知ってるが、一応確認しておく
今回想定しているのは大体10秒くらいで終わる処理なので、全然余裕で収まる
AWS Lambda の無料利用枠には、1 か月あたり 100 万件の無料リクエストと、1 か月あたり 40 万 GB-s のコンピューティングタイムが含まれており、x86 および Graviton2 プロセッサの両方を搭載した機能を利用できます。
Lambda の無料利用枠は、Provisioned Concurrency が有効になっている関数には適用されません
EventBridge
なんかいっぱいあってわからんけど、たぶんスケジューラーってやつかな
であればこれも余裕でタダだ
スケジューラー
無料利用枠: 無料利用枠の場合、EventBridge Scheduler を無料でご利用いただけます。月間 14,000,000 回の呼び出しを無料で行うことができます。いくつかのアプリケーションは、この無料利用枠内で運用できる場合があります。
料金ついでにNotionのAPIキーに関してはParameter Storeを使わずLambdaの環境変数に入れておけば十分かな。
外部から叩かれる用途ではないし、KMSで暗号化されるみたいだし。
https://blog.flatt.tech/entry/lambda_secret_security
Lambdaを建設
-
とりあえずおててでLambdaを作る。
-
CI/CDに関してはあとで考えたいので、とりあえず手元でzipにしてアップロードする。
▲ zip -r source.zip notion-create-daily-report -
設定>環境変数で環境変数を追加する
-
おもむろに実行してみるとエラー。
2024-01-27T07:11:19.298Z undefined ERROR Uncaught Exception { "errorType": "Runtime.ImportModuleError", "errorMessage": "Error: Cannot find module 'index'\nRequire stack:\n- /var/runtime/index.mjs", "stack": [ "Runtime.ImportModuleError: Error: Cannot find module 'index'", "Require stack:", "- /var/runtime/index.mjs", " at _loadUserApp (file:///var/runtime/index.mjs:1087:17)", " at async UserFunction.js.module.exports.load (file:///var/runtime/index.mjs:1119:21)", " at async start (file:///var/runtime/index.mjs:1282:23)", " at async file:///var/runtime/index.mjs:1288:1" ] }- ディレクトリをzipしてたので階層が深くなっていたのが原因。
-
修正するも、またエラー。
"errorMessage": "2024-01-27T07:28:30.070Z 540d8c70-d7ef-438e-9a60-bb2843ffbea5 Task timed out after 3.02 seconds"- デフォルトのタイムアウトが3秒らしく、10秒くらいに伸ばしてみると成功した。
-
ケチケチするために、CloudWatch Logsの保持期間を1週間にしておく。

スケジューラの設定
-
EventBridge>スケジュールで設定していく

-
フレックスタイムウインドウの使い道が謎
フレックスタイムウィンドウ
フレックスタイムウィンドウを選択した場合、スケジューラは指定した時間枠内でスケジュールを呼び出します。例えば、15 分を選択した場合、スケジュールはスケジュールの開始時刻から 15 分以内に実行されます。
-
-
再試行は無効化した。落ちても人が死ぬバッチじゃないし、気付かずに無料枠食い尽くすのを避けたい。
-
ウィザードに従って進めたらできあがった

- 出来上がったはいいが、即時実行みたいなコマンドがなかったのでスケジュールをいじってすぐ実行するように変更したら、そのままLambdaが実行された。
感想
- Lambdaはともかく、EventBridge Scheduleは簡単に設定できてよかった。
- GithubActionsで定期実行でもいいけど、あっちはあくまでCI/CDだからバッチ的な用途は想定外だよね
-
60日間リポジトリ動かしてないと無効化されるみたいだし
-
- おててでzipデプロイは流石に体験が最悪なので、次回はGithubActionsでのlambdaデプロイの設定をするぞ