Amazon SageMakerのノートブックインスタンスや推論エンドポイントを自動停止・自動削除するLambda

記事タイトルとURLをコピーする

こんにちは。アプリケーションサービス部の兼安です。

機械学習をあれこれしていると、SageMakerのノートブックインスタンスや推論エンドポイントをしばしば使います。なのですが、ノートブックインスタンスはJupyterを閉じても起動し続けていることを忘れがち、推論エンドポイントは以外と気軽に作れてしまうのでいつの間にか増えがちです。(個人の感想です) 放っておくとかなりのコストがかかってしまうので、これらを停止・削除するためのLambdaを作ってみました。

タグを指定してノートブックインスタンスを停止するLambda

ソースコード

使い方

本Lambdaは、特定のタグがついているノートブックインスタンスを停止するものです。停止する対象はパラメータで指定します。

設定例)

{
    "tag_key": "AutoStop",
    "tag_value": "Yes"
}

このLambdaに必要な権限

このLambdaには、Lambda実行の基本的な権限と、SageMakerを操作する権限が必要です。以下の AWS のマネージポリシーを付与したロールを用意し、Lambda にアタッチします。

  • "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
  • "arn:aws:iam::aws:policy/AmazonSageMakerFullAccess"

SageMakerについては、必ずしもフルアクセスは要りません。最小権限を守りたい場合は、調整してみてください。

タグを指定して推論エンドポイントを削除するLambda

ソースコード

使い方

本Lambdaは、推論エンドポイントを削除するものです。削除する対象はパラメータで指定します。推論エンドポイントは停止という概念がないので、削除するだけです。本Lambdaが想定しているのは開発環境なので、推論エンドポイントは削除しても訓練済みモデルファイルからまた作成すればよいという考えでいます。

設定例)

{
    "tag_key": "AutoDelete",
    "tag_value": "Yes"
}

このLambdaに必要な権限

ノートブックインスタンスを停止するLambdaと同じです。

指定したタグ以外の推論エンドポイントを削除するLambda

開発中だと、残すエンドポイントの方が少ないので逆の条件のLambdaも作ってみました。一部の判定が逆になっているだけです。

作成したLambdaを自動実行する

作成したLambdaを自動実行します。これにより停止漏れ・削除もれを防ぐことができます。

Cloud Automatorを使って、自動実行する

弊社サービスのCloud Automatorを使うと、上記Lambdaの自動実行を楽に実現できます。実行結果の通知なども設定しやすいのでおすすめです。

blog.serverworks.co.jp

パラメーターは、アクションのパラメーターを入力する画面において、イベントJSONで指定します。

Cloud AutomarorでLambdaのパラメータを指定する

Amazon EventBridge Schedulerを使って、上記Lambdaを自動実行する

Amazon EventBridge Schedulerも、Lambdaの自動実行を実現できます。

docs.aws.amazon.com

Amazon EventBridge SchedulerからLambdaを実行可能にしておく

Amazon EventBridge Schedulerを使って、Lambdaを自動実行するには、Amazon EventBridge SchedulerからのLambdaの実行を許可しておく必要があります。

以下のポリシーと信頼関係を付与したIAMロールを作成します。

ポリシーはこちら。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "{Sid}",
            "Action": "lambda:InvokeFunction",
            "Resource": "{LambdaのARN}",
            "Effect": "Allow"
        }
    ]
}

信頼関係はこちら。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

Amazon EventBridge Schedulerで、Lambdaを指定

Amazon EventBridge Schedulerでスケジュールを作成します。Amazon EventBridgeの左にメニューにあるスケジュールからスケジュールの作成ができます。

作成画面を進めて、スケジュールのターゲットの選択で、Lambdaを指定して、パラメータを設定します。

Amazon EventBridge Schedulerのターゲットの選択

Amazon EventBridge Schedulerのパラメータの設定

その次の設定で、先ほど作成したIAMロールを指定すればOKです。

Amazon EventBridge Schedulerのロールの設定

最後に

本記事が誰かのお役に立てば幸いです。

兼安 聡(執筆記事の一覧)

アプリケーションサービス部 DS1課所属
AWS12冠。
広島在住です。
最近認定スクラムマスターになりました。今日も明日も修行中です。