📘
SageMaker Canvas を自動停止させる仕組みを EventBridge + Lambda で構築する
はじめに
SageMaker Canvas は明示的にログアウトをしない限り、セッションが残り続けます。
この記事は EventBridge と Lambda を使って、SageMaker Canvas のセッションを自動停止する仕組みを作る備忘録です。
実装する Lambda 関数のコード
aws-samples の以下のリポジトリにある Lambda の実装をそのまま使います。
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