AWS

AWSのEC2インスタンス監視、自動起動。IP分散にも使える

インスタンス(仮想マシン)は、常に起動しておきたいですが、理由不明でシャットダウンしている事も0ではありません。そこで、起動状態を監視して、インスタンスがストップしたら、自動で起動する方法を紹介します。

それでは、細かい解説に抜きにして、スクショでの、解説に入る。

LAMDAを使って、関数をつくる。

まず、停止した時に起動したいインスタンスIDを確認しよう。 EC2のコンソールから

ここの値を確認 i-07b13c51a17xxx

サービスから、LAMDAをクリック

関数の作成をクリック

一から作成をクリック

  • 名前に、autostartと入れる。
  • ランタイムを、python2.7を選ぶ
  • ロールは、カスタムロールの作成を選ぶ
  • IAMロール「新しいIAMロールの作成」 を選択します。
  • ロール名「lambda_start_stop_ec2」 と入力。
  • 「ドキュメントポリシーを表示」をクリック

編集をクリックして、書きのポリシーに変更

{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“logs:CreateLogGroup”,
“logs:CreateLogStream”,
“logs:PutLogEvents”
],
“Resource”: “arn:aws:logs:*:*:*”
},
{
“Effect”: “Allow”,
“Action”: [
“ec2:Start*”,
“ec2:Stop*”
],
“Resource”: “*”
}
]
}

書き換えたら、許可をクリック

名前、ランタイム、既存のロールの欄を確認したら、「関数の作成」をクリック

この画面になったら、下へスクロール

関数コードのプログラムを書き換える。

※黄色のインスタンスIDの部分は、1番最初にメモした自分のインスタンスID

def lambda_handler(event, context):
# TODO implement
return ‘Hello from Lambda’

import boto3

region = ‘ap-northeast-1’
# Enter your instances here: ex. [‘X-XXXXXXXX’, ‘X-XXXXXXXX’]
instances = [‘i-07b13c51a17xxx‘]
def lambda_handler(event, context):
ec2 = boto3.client(‘ec2’, region_name=region)
ec2.start_instances(InstanceIds=instances)
print ‘start your instances: ‘ + str(instances)

書き換えたら、右上の保存をクリック

保存を押したら、スクロールして上にもどり、左のメニューから、CloudWatch Events をクリック

必要な設定をクリック

下にスクロールして、トリガーの設定で、ルールから、新規のルール設定

  • ルール名 stop
  • ルールタイプ イベントパターン>EC2>EC2インスタンスの状態変更を通知
  • 詳細>状態>STOPPED

右下の追加をクリック

保存をクリック

これで全ての設定は完了です。

インスタンスの自動起動のテスト

それでは、テストしてみましょう。 EC2のインスタンスをアクションで、停止します。

インスタンスの状態が、stop pending runningと状態が変化します。(変化しない場合は更新ボタンを押す)

1分ほどで、runningにもどりました。停止→起動をしたので、パブリックIPも変更になりました。

グローバルIPを自動的に変更する

停止→起動でIPがかわるので、特殊な用途につかえます。

仮想マシンのプログラムで、シャットダウンを実行する方法

メモ帳を開く

shutdown /s /t 0

このコマンドを書き込んで、拡張子を、.bat にして保存する。

このコマンドを、IPを変更したいタイミングで、仮想マシン上で実行すれば、自動的にIPを変更する事ができます。

自動起動の機能を停止

サービスから、管理ツール>CloudWatchを選ぶ

イベントからルールをクリック

先ほど作った、STOPのルール名の横にチェックを入れ、アクションから無効を選ぶ

状態の丸がグレーになれば、停止します。

自動起動と料金について

前述のLAMDAにも、無料枠があります。 今回の自動起動の関数程度では、無料枠を超える事はありません。

但し、弊害があります。

インスタンスは、1回起動すると、自動的に1時間利用した事として計算されます。 つまり、1時間以内に24回停止→起動をすると、1日(24時間)起動したのと同じになります。

AWSの無料枠は、月750時間までですので、短時間に停止→起動を繰り返していると、あっというまに、750時間を消費してしまい、そのあとは課金されていきます。