今年もハンズラボアドベントカレンダーやっていくぞい
概要
弊社ではAWSの仮想デスクトップを提供するサービスWorkspacesを利用しているんですが、
たまにUnhealthyで落ちてたりします
\ 何もしてないのに壊れた /
大抵は一時的に負荷がかかって落ちたとかで再起動すればどうにかなることがほとんどです
というわけでひとまず再起動させるLambdaがあるんですが
Node.jsで書かれているのでたびたび発生するバージョンアップ対応・・・
シンプルなコードだし、どうせならpythonに書き換えてみようかなと思ってやってみました
処理の流れ
- CloudWatch
- UnhealthyのWorkspacesがあったらアラートでSNS通知
- SNS
- メール送信
- Lambda発火
- Lambda
- Workspaces情報をまるごと取ってきて順にチェック
- Unhealthyだったら再起動
なんで順にチェックしてるんだろ、不調のあるWorkspaceIdをダイレクトに指定して再起動しないのかなと思ったんですけど
アラート情報から取ってくることになるのでWorkspaceごとにCloudWatchでアラートを設定したくなかったのかなと解釈して変更しませんでした
書き換えた結果
環境・設定
- ランタイム Python 3.7
- タイムアウト 15秒
ソースコード
import boto3
sns = boto3.client('sns')
workspaces = boto3.client('workspaces')
def lambda_handler(event, context):
workspaces_client_list = workspaces.describe_workspaces()
for workspaces_info in workspaces_client_list['Workspaces']:
workspace_id = workspaces_info['WorkspaceId']
workspace_state = workspaces_info['State']
if workspace_state == 'UNHEALTHY':
reboot_workspaces(workspace_id)
def reboot_workspaces(workspace_id):
workspaces.reboot_workspaces(
RebootWorkspaceRequests = [
{
'WorkspaceId': workspace_id
},
]
)
終わり
どの言語を選択してもバージョンアップ対応からは逃れられませんが、
最近弊社内でPythonの流れが来ていることもあり、書いてみる機会にできてよかったです
明日は @fasahina さんです!