【Amazon Connect】電話でEC2インスタンスを停止したり、再起動したりする。


解決したいこと

仮想カスタマ「しもしも!? サーバーの調子おかしいんだけど!??マッハでリブートして!!」
オペレータ 「おかのした」
※フィクション

ここからカスタマの情報を確認して、EC2インスタンスの状態をチェックして、カスタマのインスタンスかどうかをダブルチェックして、オペレータが心の準備をしてからインスタンスを再起動する。

いや、無駄ちゃう?

自分はセールスなんで実際に作業をしている訳ではないですが、割と前述みたいな電話がかかってくることは多いです。
そして、確認して作業して…。
大したこと無い作業ですが、その割には影響が大きい(聞いたことはありませんが、他のインスタンスをリブートしたりとかのリスクを懸念する)ので、脳味噌ゼロでやれるようなことでもありません。

いやでもそれにしてもこんなことに時間を取られるのは如何なものか。
「いっそ、電話受付無くしたら?」という声も聞きますが、それならそれに代わるサービスを考えねばなりません。

お客様で作業を完結してもらう

電話受付を無くす&お客様で作業をしていただく方向性で考えました。

【使うもの】
Amazon Connect、Lambda(node.js)、EC2


Amazon Connectはこんな感じに作成して、
[電話をかける] → [自動音声に従いどれかをプッシュ(1.起動、2.停止、3.再起動)] → [プッシュに応じたLambdaが処理]
という流れにしてます。

EC2起動Lambdaの中身はこんな感じ。

index.js
const INSTANCE_ID = '対象のインスタンスIDを入れる';

var AWS = require('aws-sdk');
AWS.config.region = 'ap-northeast-1';

function ec2Start(cb){
var ec2 = new AWS.EC2();
var params = {
InstanceIds: [
INSTANCE_ID
]
};

ec2.startInstances(params, function(err, data) {
if (!!err) {
console.log(err, err.stack);
} else {
console.log(data);
cb();
}
});
}
exports.handler = function(event, context) {
console.log('start');
ec2Start(function() {
context.done(null, 'Started Instance');
});
};

メリット

・Lambdaを作り込めばEC2以外の操作をしたり、複数のインスタンスから指定して処理することもできる。
・電話番号と契約サーバが紐付くので、人的オペレーションミスが無くなる。
・電話オペレーションによる人件費が削減。
・電話の自動応答操作なので、老若男女問わず使える。
 (専用のコンパネを作ったのに、「使い方が…」という電話すら無くなる)

デメリット

・カスタマ毎にAmazon ConnectとLambdaを設定する必要がある為、構築費用が必要。
・数台程度なら本構成で問題無いが、何十台とインスタンスがある場合には不向き。
 (というか、そういう案件で使うことは想定していない)

まとめ

同じ電話かけるなら、こっちの方が弊社にもカスタマにも時間の無駄が無くて良いよね。

あと開発環境とか、帰社後に「あ、そういえば消し忘れたな」って時に
携帯一本で落とせるのでコンパネに入る必要も無く、割と便利です。