3ヶ月使ってないWorkspacesを通知と自動削除をやろうとしてみた(失敗)

# ３ヶ月使ってないWorkspacesは、不要とみなして通知して削除する

<font color="IndianRed">(注意)やろうとしたけど出来なかった。。Alarmのデータポイントが24時間以内しか入らないです。</font>

<img width="497" alt="スクリーンショット 0030-09-12 18.32.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/5d7157f8-fc9e-fe2a-5fc5-f319a6025f45.png">



* 通知のためのSNSトピック作成
* 監視のためのCloudWatch Alarm作成
* ３ヶ月の監視について
* Workspacesの自動削除のLambda作成
* 通知と自動削除のテスト

# 通知のためのSNSトピック作成。

SNSの画面から、左メニューの"トピック"をクリックし[新しいトピックの作成]をクリックする

<img width="640" alt="スクリーンショット 0030-09-12 11.20.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/bea15c05-9fe9-071c-d121-e9e08256281d.png">

任意のトピック名を入力する
ここでは、test-nonused-ws

<img width="714" alt="スクリーンショット 0030-09-12 11.20.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/c75ac3c9-66ad-283a-c98a-9d075d2d774a.png">

作成したトピック名をクリック

![スクリーンショット 0030-09-12 11.21.12.png](https://qiita-image-store.s3.amazonaws.com/0/27932/2d21a31a-debc-86c7-c77b-6d19f2311b97.png)

[サブスクリプションの作成]をクリック

![スクリーンショット 0030-09-12 11.21.22.png](https://qiita-image-store.s3.amazonaws.com/0/27932/ed5802ab-b993-d2ba-495a-b5a95742de83.png)

通知のためのメールアドレスを入力する
プロトコル：Email
エンドポイント：任意のメアド

![スクリーンショット 0030-09-12 11.21.38.png](https://qiita-image-store.s3.amazonaws.com/0/27932/021ec26d-eb6d-d87d-1775-80a582c3eae5.png)

Confirmedメールが送られてくるので、メール内のリンクをクリックしConfirmする。

# 監視のためのCloudWatch Alarm作成

Cloudwachの画面を開き、左側メニューの"メトリクス"をクリックし、対象のWorkspacesIDの"UserConnected"メトリクスにチェックを入れる。

(補足)
UserConnectedは、ユーザーが接続しているWorkspacesの数
WorkSpacesは定期的に接続ステータスのリクエストを WorkSpace に送信します。ユーザーは、能動的にセッションを使用している場合、接続済みとしてレポートされます。このメトリクスは WorkSpace の粒度で利用でき、組織のすべての WorkSpace で集計されます

https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces-monitoring.html

![スクリーンショット 0030-09-12 11.23.45.png](https://qiita-image-store.s3.amazonaws.com/0/27932/01347835-6a97-9ada-3351-849417dccbf8.png)

グラフのオプションタブをクリック、userconnectedの右側のベルマークをクリック

![スクリーンショット 0030-09-12 11.24.12.png](https://qiita-image-store.s3.amazonaws.com/0/27932/a216cabf-55c4-972e-4ed8-52455eb1d24b.png)

アラームの設定を行う
※ちょっと3ヶ月は試せないので15分で

* アクションはSNSによるメール通知
* UserConnectedは"1"だとConnected、"0"だとNonConnected
* しきい値はUserConnected<1にする
* 5分間隔で、3回連続でしきい値を下回ったらアクションを実施。つまりユーザーの接続が15分間なかった場合にアラームが通知される

![スクリーンショット 0030-09-12 11.25.00.png](https://qiita-image-store.s3.amazonaws.com/0/27932/bda9cd80-a359-27f8-e387-87f1208e4a27.png)

アラームがOKな時
つまりWorkspacesを使っている状態(15分以上NonUsedではない)

<img width="1079" alt="スクリーンショット 0030-09-12 11.25.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/c472c9bc-2a32-d55d-0ad5-eb82aadb1a2e.png">

アラームがNGな時
つまりWorkspacesを15分以上使ってない状態

![スクリーンショット 0030-09-12 11.50.38.png](https://qiita-image-store.s3.amazonaws.com/0/27932/1231551c-416d-1cd6-6dbe-2867dbf55e36.png)

通知メール

![スクリーンショット 0030-09-12 11.54.41.png](https://qiita-image-store.s3.amazonaws.com/0/27932/85cfe881-ee75-8fd3-a11c-dbac4b62ccb2.png)

# ３ヶ月の監視について

アラームのデータポイントは最大9999です。3ヶ月間使われてない状態を検知するには5分インターバルではデータポイント数が足りません。

<img width="502" alt="スクリーンショット 0030-09-12 11.57.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/a871e3ed-58da-d9dd-7e45-8b57c0631f43.png">

最小で13分くらいにする必要があるので、１５分間隔にします。
3ヶ月は、3ヶ月*30日*24時間*60分 = 129600分あるので、
これを15分で割ると、8640
データポイント 8640回連続でしきい値を下回ったらアラートを飛ばすという設定でよさそうです。

<img width="487" alt="スクリーンショット 0030-09-12 12.02.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/326dcbfa-ca12-ff4d-8b18-01199b8d1914.png">

# Workspacesの自動削除のLambda作成

#### LambdaにアタッチするIAMロール作成

IAMの画面で、左側メニューのロールをクリックし、[ロールの作成]をクリックする

![スクリーンショット 0030-09-12 13.47.41.png](https://qiita-image-store.s3.amazonaws.com/0/27932/69be954c-f9ec-1d65-08d4-717ea8d24486.png)

"AWSサービス"をクリック、"Lambda"をクリック、[次のステップ]をクリックする

<img width="998" alt="スクリーンショット 0030-09-12 13.47.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/de9ce370-5ec5-f682-765c-a95cc453646a.png">

以下のポリシーにチェックを入れ、[次のステップ]をクリックする

* AmazonWorkSpacesAdmin
* CloudWatchLogsFullAccess

<img width="990" alt="スクリーンショット 0030-09-12 13.48.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/dae3401f-1347-c631-cab5-a26cd7d935f2.png">

ロール名をつけて[ロールの作成]をクリックする
test-terminate-ws1(任意)

<img width="884" alt="スクリーンショット 0030-09-12 16.47.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/ae65e774-ea1a-ad91-09a1-9854b629909c.png">

#### Lambda関数作成

WorkspacesのTerminateWorkspacesのAPIを叩くコードを書く

https://docs.aws.amazon.com/ja_jp/workspaces/latest/api/API_TerminateWorkspaces.html

Lambdaの画面を開き、[関数の作成]をクリック

<img width="1172" alt="スクリーンショット 0030-09-12 13.48.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/4a5aada8-de11-7f6c-da0f-8465ef52b66d.png">

"一から作成"をクリックし、以下を入力し、[関数の作成]をクリックする
名前：test-terminate-ws1
ランタイム:Python 2.7
既存のロール：test-terminate-ws1

<img width="699" alt="スクリーンショット 0030-09-12 17.05.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/83d345ce-ac7b-8b6b-1c92-fee7d26ffeae.png">

左側リストから"SNS"をクリック

<img width="849" alt="スクリーンショット 0030-09-12 17.09.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/56e487d2-8cbb-9b5a-1b7b-77f9a53a917b.png">

SNSトピック"test-nonused-ws"を選び、"トリガーの有効化"にチェックを入れ、[追加]をクリックする

![スクリーンショット 0030-09-12 17.10.22.png](https://qiita-image-store.s3.amazonaws.com/0/27932/20a319c5-3a13-401a-f368-141842f3fe18.png)

"test-terminate-ws1"のLambdaアイコンをクリック

<img width="986" alt="スクリーンショット 0030-09-12 17.45.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/ed13f270-26a5-b15a-c48b-8f648c10be89.png">

以下のコードを貼り付けて、右上の[保存]をクリック
(注)今回はテストとしてterminateではなく、stopにしています。アラームも1回しきい値を下回ったらにしてあります。
削除であれば、client.terminate_workspaces
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/workspaces.html#WorkSpaces.Client.terminate_workspaces

```python:
from __future__ import print_function

import json
import urllib
import boto3
 
print('Loading function')
 
client = boto3.client('workspaces')

def lambda_handler(event, context):
    message = event['Records'][0]['Sns']['Message']
    message = json.loads(message)

    workspaceId = message['Trigger']['Dimensions'][0]['value']
    stop = client.stop_workspaces(
        StopWorkspaceRequests=[
            {
                'WorkspaceId': workspaceId
            },
        ]
    )
    return stop
```

<img width="1000" alt="スクリーンショット 0030-09-12 17.46.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/2e036e1b-2ab3-b1df-ed8c-11968b73c810.png">

# 通知と自動削除のテスト

Workspacesからログアウトします。Workspacesクライアントを閉じます。

数分するとアラームが上がります。

<img width="901" alt="スクリーンショット 0030-09-12 17.56.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/27932/bbab2530-1c14-479d-c9d1-31127e4d282e.png">

対象のWorkspacesがStoppedになりました。

![スクリーンショット 0030-09-12 17.57.36.png](https://qiita-image-store.s3.amazonaws.com/0/27932/6fb860d8-8c32-c7e2-afd6-ccda828416a9.png)