Amazon SageMakerのノートブックインスタンスを毎日停止するLambda関数

はじめに

最近、機械学習を勉強しておりAmazon SageMakerを利用していますが、 高頻度でノートブックインスタンスを停止し忘れてしまいます。

2018/10現在東京リージョン最も安価なml.t2.medium$0.0608/hourで30日立ち上げっぱなしだと、$43ほど。 結構無駄なので、僕が寝ているときは停止してもらうことにしました。

[toc]

概要

機能としては、、

  • 毎日2:00にcron(Cloudwatch Event)が起動し、Lambda関数を起動する
  • Lambda関数で、ステータスがInServiceのノートブックインスタンスをリストする
  • 該当のインスタンスがなければ、その旨をSlackに通知する
  • あればそのインスタンスを停止させた上で、その旨をSlackに通知する
  • あくまで個人のAWS/Slackアカウントでの運用を想定
  • ↓こんな感じ

利用した技術/ツールは、、

  • Python3(Lambda)
  • Cloudwatch Event (cron起動)
  • Apex (Lambdaのデプロイ)
  • Terraform(apex infra / IAM作成、Cloudwatch Event設定)

リポジトリは以下。

https://github.com/mickey390/sagemaker-observer

手順

READMEに書いておきました。

実施した環境は、以下の通り。

$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.6
BuildVersion: 17G65

$ apex version
Apex version 1.0.0-rc2

$ terraform version
Terraform v0.11.9

まとめ

  • やりたい機能は実装できた
  • ちょっとした機能のLambda関数の管理は、今の所Apex+Terraformがシンプルで使いやすい
  • IAM(Lambda用)作成→Lambda作成の流れが、やはり煩雑に感じる

参考情報