はじめに
今回はAWS SageMaker で作成したエンドポイントの消し忘れ防止用に、エンドポイントが起動している場合、決まった時間に携帯へ通知するシステムを作成しました。
その内容を説明します。
構成図は以下の通りです。
Lambda 関数の作成
-
各項目を設定します。
スケジュールの入力方式については以下のドキュメントを参考にしてください。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/ScheduledEvents.html
-
関数コードの欄までスクロールしたら赤枠内に、以下のコードを貼り付けてください。
※phoneNumberにメッセージを送る携帯の電話番号を入力しておいてください。
import json
import boto3
def lambda_handler(event, context):
#SageMakerが利用できるリージョンを取得
regions = boto3.Session().get_available_regions('sagemaker')
inservice_endpoints = {}
for region in regions:
#SageMakerが利用できるリージョンごとに以下を実行
#指定したリージョンのSageMakerを利用するためのおまじない
sm = boto3.client('sagemaker', region_name=region)
#実行中のエンドポイントを取得
endpoints = sm.list_endpoints(
StatusEquals = 'InService'
)
if len(endpoints['Endpoints']) > 0:
inservice_endpoints[region]=endpoints
#実行中のエンドポイントがあった場合、指定の電話番号にメッセージを送信
if len(inservice_endpoints) > 0 :
#Amazon SNS を利用するためのおまじない
sns = boto3.client("sns")
phoneNumber = "+81電話番号"
message = "Endpoint exists"
#指定した電話番号にメッセージを送信
sns.publish(
PhoneNumber = phoneNumber,
Message = message
)
return {
'statusCode': 200,
'body': json.dumps('done')
}
-
IAMロールのタブが開いたら、ポリシーをアタッチしますをクリック。
-
ポリシーがアタッチされたことを確認し、もう一度ポリシーをアタッチしますをクリックします。
-
ポリシ-がアタッチされたことを確認し、Lambda 関数のタブに戻ってください。
※今回アタッチしたポリシーは権限を絞ることができます。セキュリティ面上 FullAccess などはよくないので、実際に利用する際は適切な IAM ロール設定を行いましょう。
-
実行が成功したことを確認します。
-
それでは、エンドポイントをデプロイした状態で、もう一度テストを実行してみましょう。
※エンドポイントが InService になってからテストを実行してください。
-
イベントを有効にして、保存をクリックします。
これで、設定したスケジュールで Lambda 関数が起動するようになります。
最後に
今回はエンドポイントの消し忘れ防止用に、エンドポイントが起動している場合、決まった時間に携帯へ通知するシステムを作成しました。
エンドポイントは稼働時間に対して課金が発生するので、使わなくなったエンドポイントは消しておくようにしましょう。
参考文献
- Amazon SageMakerの起動しているノートブックインスタンスとエンドポイントをSlackに通知するBotを作ってみた
https://dev.classmethod.jp/tool/sagemaker-slack-list-notebook-endpoint/