LoginSignup
1
1

More than 1 year has passed since last update.

Lambda を使用して、Amazon EC2 インスタンスを一定の間隔で停止および起動するにはどうすればよいですか?

Posted at

教材

実作業

停止して起動する EC2 インスタンスの ID を取得します

EC2の画面から当該EC2インスタンス選択
リージョンも確認しておく

JSON ポリシーエディターを使い IAM ポリシーを作成します

IAMの画面からポリシーを選びポリシーの作成をクリック
JSONタブをクリック
コピペして適切なタグをつけて名前をつけて作成

Lambda のための IAM ロールを作成します

IAMの画面からロールを作成
さきほどのポリシーをアタッチして
適切なタグをつけて名前をつけて作成

EC2 インスタンスを停止および起動する Lambda 関数を記述する

このまま実施します

  1. AWS Lambda コンソールで、[Create function] クリックします。
  2. [Author from scratch] をクリックします。
  3. [Basic information] に次の事項を追加します。 [Function name] に EC2 インスタンスを停止させる関数の名前を入力します。たとえば「StopEC2Instances」のようになります。 [Runtime] では [python 3.8] を選択します。 [Permissions] で [Choose or create an execution role] を展開します。[Execution role] で [Use an existing role] を選択します。[Role] で今回作成した IAM ロールを選択します。
  4. [Create function] をクリックします。
  5. [Function code] で、次のコードをコピーして 、コードエディターのエディタペインに貼り付けます (lambda_function)。このコードでは指定したEC2 インスタンスを停止します

関数コード例 - EC2 インスタンスの停止

import boto3
region = 'us-west-1'
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.stop_instances(InstanceIds=instances)
    print('stopped your instances: ' + str(instances))

注意: [region] で、「us-west-1」を自分のインスタンスがある AWS リージョンと置き換えます。[instances] で、サンプルの EC2 インスタンス ID を、実際に停止および起動したいものの ID と置き換えます。

関数コード例 - EC2 インスタンスの開始

import boto3
region = 'us-west-1'
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.start_instances(InstanceIds=instances)
    print('started your instances: ' + str(instances))

注意: region および instances では、EC2 インスタンスを停止させたコードと同じ値を使用します。

Lambda 関数のテスト

今回起動と停止なのでテストのコードはいらない
デプロイ忘れないこと

Lambda 関数をトリガーするよう、CloudWatch Events のルールを作成します。

Cloudwatch の画面から イベントを開いてルールを選択する

あとはそのまま実施します

  1. [Targets] の [Add target] をクリックします。
  2. [Lambda function] をクリックします。
  3. [Function] から EC2 インスタンスを停止させる関数を選択します。
  4. [Configure details] を選択します。
  5. [Rule definition] で次の事項を行います。 [Name] には「StopEC2Instances」といったようなルールを指定する名称を入力します。 (任意) [Description] でルールを記述します。たとえば「Stops EC2 instances every night at 10 PM.」のようになります。 [State] で [Enabled] チェックボックスをオンにします。
  6. [Create rule] を選択します。

あとがき

ルールの書き方を勉強したい
「平日毎朝7時にスタート 夕方6時にストップ」など

1
1
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
1
1