VPN接続のステータスをグラフで確認したい
AWSのVPCにてVPN接続をする場合、現在の接続状況についてはマネジメントコンソールやAPIで確認することができます。しかしながら、過去の記録については確認する方法が提供されていません。
このため、過去の接続状況を確認するためには、カスタマーゲートウェイ(CGW)側のログ確認やSNMPを用いたグラフ作成を別途する必要があります。
障害の切り分けをするためにCGWのログを確認するのは仕方ないとしても、CloudWatch Alarm + SNSを用いた障害通知等は別サーバを用意せずに実現したいものです。
本ドキュメントでは、AWS Lambda を用いてVPN接続のステータスを CloudWatchカスタムメトリクスとして作成する方法について解説します。
構成
はじめに、全体的なシステム構成について解説します。
- Lambda Function
- VPN接続のステータスを取得し、CloudWatchカスタムメトリクスにPutします
- Event sourceとして、CloudWatch Events(Schedule)を利用します。5分毎に、Lambda Functionを実行します
- CloudWatch Custom Metrics
- Lambda FunctionからPutされたカスタムメトリクスを、CloudWatchのマネジメントコンソールにて表示することができます
CloudWatchカスタムメトリクス
CloudWatchカスタムメトリクスって何?という人は、こちらのドキュメントをご参照いただくと良いと思います。
【AWS発表】 クラウド監視サービスAmazon CloudWatchでカスタムのメトリクスが使用可能に
ザックリと説明すると、CloudWatchカスタムメトリクスは、ユーザ側で自由にCloudWatchのメトリック(グラフ)を作成できる機能です。昔ながらのサーバ管理ではSNMP+MRTG(Cacti等)を用いたグラフの作成が一般的でしたが、CloudWatchを使えば、同等の機能を簡単に実現できます。
2015年10月からはCloudWatch Dashboardの提供も開始され、Mackerel風な、見た目の格好良いダッシュボードでサービスの一括監視をすることもできるようになりました。CloudWatchは、うまく使いこなせば他のサーバ管理ソフトウェアが不要になるくらい便利なサービスだと思います。
【AWS発表】CloudWatch Dashboards – メトリックビューのカスタマイズ
構築手順
VPN接続のステータスグラフを作成する手順について解説します。
IAM Roleの追加
はじめに、Lambda Functionを実行するためのIAM Roleを作成します。IAMマネジメントコンソールにログインし、次のようなRoleを作成します。
- ロール名
- lambda-vpn
- アクセス許可
- AmazonEC2ReadOnlyAccess (VPN接続のステータスを確認するために用います)
- CloudWatchFullAccess (CloudWatchカスタムメトリクスへPutするために用います)
Lambda Function
つぎに、Lambda Functionを作成します。
2016年4月からは Node v4.3.2 が使用できるようになりましたので、0.10を使っている人は次のように、nvmコマンド等にて新バージョンに移行する方が良いと思います。
$ nvm install 4.3.2
$ node --version
v4.3.2
Lambda Functionのソースコードについては、github上にアップロードしております。
次のコマンドにて、Lambda Functionのアーカイブを作成します。
$ git clone https://github.com/sogabe/aws-vpn-status.git
$ cd aws-vpn-status
$ npm install -save async
$ zip -r ../vpn-status.zip .
$ aws s3 cp ../vpn-status.zip s3://(bucket-name)/vpn-status.zip
(S3からアプリをアップロードする場合のみ実行します。ローカルPCからアップロードする場合は不要です。)
アプリのzipファイルを作成したら、つぎにLambdaマネジメントコンソールにて Lambda Function を登録します。
つぎのパラメタを用いてLambda Functionを追加すると良いです。
- Runtime
- Node.js 4.3
- Handler
- vpnstatus.handler
- Role
- lambda-vpn (IAMコンソールにて作成したlambda実行用のRole名)
- Advanced Settings
- Timeout を10秒に設定します(Defaultの3秒だと、時間内にFunctionの実行が完了しない可能性があります)
Lambda Functionの登録後、Testボタンを押して、LogにVPNステータスが出力されることを確認します。
つぎに、Event sourceを登録します。
Event sourcesタブを選択し、"Add event source"をクリックします。Event source typeとして "CloudWatch Events - Schedule"を選択し、Schedule expressionとして "Rate (1 minute)" を選択します。Lambdaのコストを抑えたい場合は、Rateを 5 minutes にすると良いでしょう。
VPN接続ステータスグラフを確認
しばらく待つと、CloudWatchマネジメントコンソールに "vpn_status" という名前のカスタムメトリックが現れます。こちらを選択すると、各VPN接続のステータスグラフを見ることができます。