LoginSignup
2
5

More than 5 years have passed since last update.

EC2インスタンスを時刻指定で起動する

Last updated at Posted at 2017-03-17

概要

スケジューリングはCloudWatchを使って、実際の起動はLambdaを使って実現します。Lambdaでのスクリプト実行のために必要なロールの作成についても説明します。

起動用ロールを作成する

AWSコンソールにログインしたら画面左上の「サービス」をクリックして、サービスの一覧を開きます。その中から「IAM」を選択してください。
スクリーンショット 2017-03-17 11.35.46.png

画面左部分に並ぶメニューから「ロール」を選択して、ロールの一覧を表示します。一覧の上にある青いボタン「新しいロールの作成」をクリックしてください。
スクリーンショット 2017-03-17 11.38.12.png

手順 1 : ロール名の設定

ロール名の設定をします。EC2起動に関するロールとして分かり易い任意の名称を設定してください。入力したら「次のステップ」ボタンをクリックします。

項目名 設定値 備考
ロール名 Start_EC2_Instance_Lambda

スクリーンショット 2017-03-17 11.40.15.png

手順 2 : ロールタイプの選択

今回、EC2インスタンスの起動にはLambdaを利用します。AWSサービスロールから「AWS Lambda」を選択してください。

スクリーンショット 2017-03-17 11.45.07.png

手順 3 : 信頼性の確立

ここは何故がスキップされました。作成後に「信頼されたエンティティ」が「ID プロバイダー lambda.amazonaws.com」となっていたのでバックグラウンドで何か処理が走っているんでしょうか?ご存知の方、コメントをお願いします。

手順 4 : ポリシーのアタッチ

後ほどインラインポリシーを設定するので、ここでは何も選択せずに「次のステップ」ボタンをクリックしてください。スクリーンショット 2017-03-17 11.51.44.png

手順 5 : 確認

入力した内容を確認して「ロールの作成」ボタンをクリックします。
スクリーンショット 2017-03-17 11.54.34.png

インラインポリシーを設定する

いま作成したロールが一覧に表示されるので、作成したロール名をクリックしてください。スクリーンショット 2017-03-17 11.56.59.png

概要が表示されるので、アクセス許可のタブから「インラインポリシー」の詳細を開き、「ここをクリックしてください」の文字をクリックします。スクリーンショット 2017-03-17 11.58.12.png

カスタムポリシーを設定します。「カスタムポリシー」をクリック、その後「選択」ボタンをクリックしてください。スクリーンショット 2017-03-17 11.59.51.png

ポリシー名には任意の名称を、ポリシードキュメントには以下の内容を入力します。入力したら「ポリシーの適用」ボタンをクリックします。

項目名 設定値 備考
ポリシー名 Start_EC2_Instance_Lambda
ポリシードキュメント
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "ec2:StartInstances"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*",
                "arn:aws:ec2:*"
            ]
        }
    ]
}

スクリーンショット 2017-03-17 12.07.19.png

長くなりましたが、ロールの作成は以上です。

Lambdaで起動用スクリプトを作成する

まずAWS Lambdaの画面に移動します。画面左上の画面左上の「サービス」をクリックして、サービスの一覧を開きます。その中から「Lambda」を選択してください。
スクリーンショット 2017-03-17 11.35.46.png

「今すぐ始める」ボタンをクリックしてください。
スクリーンショット 2017-03-17 12.10.43.png

設計図の選択

新しくLambda関数を作成するので、「ブランク関数」をクリックします。
スクリーンショット 2017-03-17 12.11.24.png

トリガーの設定

起動はスケジュールで行うので、トリガーとして「CloudWatch イベント - スケジュール」を選択します。スクリーンショット 2017-03-17 12.12.35.png

入力欄が出現するので、以下のとおりに入力します。

項目名 設定値 備考
ルール名 Start_webserver この値は任意です。分かり易い名称にしてください。
ルールの説明 webサーバを起動する この値は任意です。分かり易い説明にしてください。
スケジュール式 cron(0 17 ? * MON-FRI *) 左記は月〜金の17時にEC2インスタンスを起動する例です。時刻はUTCです。日本時間で考える時は-9時間の時刻で指定します。
トリガーの有効化 チェック

入力を終えたら「次へ」ボタンをクリックします。
スクリーンショット 2017-03-17 12.46.22.png

関数の設定

EC2インスタンスを起動するためのスクリプトを指定します。

項目名 設定値 備考
名前 Start_webserver この値は任意です。分かり易い名称にしてください。
説明 webサーバを起動する この値は任意です。分かり易い説明にしてください。
ランタイム Node.js 4.3
コードエントリタイプ コードをインラインで編集
const INSTANCE_ID = 'i-xxxxxxxxxxxxxxxxx'; // 対象のEC2インスタンスIDを指定する

var AWS = require('aws-sdk'); 
AWS.config.region = 'ap-northeast-1'; // 対象のEC2が所属するリージョンを指定する

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');
    });
};

スクリーンショット 2017-03-17 12.29.11.png

さきほど作成したロールを指定します。

項目名 設定値 備考
ハンドラ index.handler
ロール 既存のロールを選択
既存のロール Start_EC2_Instance_Lambda ここで作成したロール名を指定します

スクリーンショット 2017-03-17 12.29.20.png

詳細設定は行いません。「次へ」ボタンをクリックしてください。
(念のため、詳細設定のデフォルト値が確認できるスクリーンキャプチャを掲載します)
スクリーンショット 2017-03-17 12.29.29.png

確認画面が表示されるので、内容を確認して問題なければ「関数の作成」ボタンをクリックします。スクリーンショット 2017-03-17 12.43.39.png

Lambda関数の作成は以上です。
作成したLambda関数の詳細(トリガータブ)が開いていると思いますので、「テスト」ボタンをクリックして、さらに「保存してテスト」ボタンをクリックすると、作成したLambda関数が実行されます。指定したEC2インスタンスが起動されたかを確認してください。
スクリーンショット 2017-03-17 12.50.12.png

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5