WorkSpacesがUnhelthyになってしまう、ログインできなくなる事象に出くわしたので、CloudWatchでWorkSpacesのステータス監視をして、Unhelthyになったら自動再起動するプログラムを作りました。
流れ
CloudWatch監視→Unhelthyを検知→SNS(Lambdaを発火)
プログラム
const AWS = require('aws-sdk'); const workspaces = new AWS.WorkSpaces({region: 'ap-northeast-1'}); const co = require('co'); exports.handler = (event, context, callback) => { co(function *() { // workspacesのクライアント一覧を取得 let workspacesClientList = yield describeWorkspaces(); // クライアント台数分ループ for(let i = 0; i < workspacesClientList.length; i++){ // Unhealthyの場合はOS再起動 if(workspacesClientList.Workspaces[i].Status === 'UNHEALTHY'){ //対象クライアントを再起動 yield rebootWorkspace(workspacesClientList.Workspaces[i].WorkspaceId); console.log('リブート対象:' + workspacesClientList.Workspaces[i].WorkspaceId); } } }); }; function describeWorkspaces() { return workspaces.describeWorkspaces().promise(); } function rebootWorkspace(workspaceId) { let params = { RebootWorkspaceRequests: [ { WorkspaceId: workspaceId } ] } return workspaces.rebootWorkspaces(params).promise(); }