📘

SageMaker Canvas を自動停止させる仕組みを EventBridge + Lambda で構築する

2023/06/15に公開

はじめに

SageMaker Canvas は明示的にログアウトをしない限り、セッションが残り続けます。
この記事は EventBridge と Lambda を使って、SageMaker Canvas のセッションを自動停止する仕組みを作る備忘録です。

実装する Lambda 関数のコード

aws-samples の以下のリポジトリにある Lambda の実装をそのまま使います。
https://github.com/aws-samples/amazon-sagemaker-canvas-service-catalog/tree/main/lambda_images/shutdown/shutdown.py

import boto3
import logging
from botocore.config import Config

logger = logging.getLogger()
logger.setLevel(logging.INFO)

config = Config(retries={"max_attempts": 10, "mode": "standard"})
sagemaker = boto3.client("sagemaker", config=config)
paginator = sagemaker.get_paginator("list_apps")


def delete_app(domain_id, user_profile_name, app_type, app_name):
    logger.info(
        f"deleting {app_type}: {app_name} for user: {user_profile_name} in Domain: {domain_id}"
    )

    sagemaker.delete_app(
        DomainId=domain_id,
        UserProfileName=user_profile_name,
        AppType=app_type,
        AppName=app_name,
    )


def lambda_handler(event, context):
    try:
        app_page_iterator = paginator.paginate(PaginationConfig={"PageSize": 50})

        for app_page in app_page_iterator:
            for app in app_page["Apps"]:
                if app["AppType"] == "Canvas" and app["Status"] != "Deleted":
                    delete_app(
                        app["DomainId"],
                        app["UserProfileName"],
                        app["AppType"],
                        app["AppName"],
                    )

    except Exception as e:
        logger.error(e)

    logger.info("Canvas apps deleted")

Lambda 関数を作成

Lambda 関数を新しく作成し、任意の関数名をつけます。
ランタイムは Python 3.9 にしました。
※ Lambda の実行ロールには SageMaker の操作権限を付与しておきましょう

Lambda 関数のデプロイ

コードを貼り付けたら、Deploy しましょう。

EventBridge ルールの作成

[ルール] -> [ルールを作成]

名前を入力し、[スケジュール] を選び [EventBridge Scheduler で続行] を押す

スケジュールの設定

[定期的なスケジュール]、[cronベースのスケジュール] を選び、cron 式を入力する。
ここでは、毎日午前0時0分に実行するように設定しています。
[フレックスタイムウインドウ] は オフ を選びます。
設定ができたら [次へ] を押します。

ターゲットの選択

[テンプレート化されたターゲット] -> [AWS Lambda]を選びます

作成した Lambda 関数を選んで [次へ] を押します
確認画面が出るので [次へ] を押して、[スケジュールを作成] を押します。

設定の確認

以上で設定は完了です。
スケジュール欄から、次の10回分の実行日時を確認することができます。
これで SageMaker Canvas の落とし忘れが防止できそうです。

Discussion