LoginSignup
0
0

More than 3 years have passed since last update.

クラウドのVMインスタンスを定期的に停止させる方法(AWS&GCP)

Last updated at Posted at 2020-06-04

業務で夜間に開発系のサーバを停止させて翌朝起動させたかったり、GPUインスタンスの停止漏れを防ぐために毎日夜間に停止させたりと、ニーズが高まったので方法を調べた結果を残しておきます。

この記事に画面キャプチャを載せて一から手順を書くよりも公式のヘルプページの方が確実ですので、概要は以下を御覧ください。そこまで難しい手順は無く、特にGCPについてはgcloudコマンドをコピペで実行していくだけで、ほぼほぼできあがります。

AWSはこちら
GCPはこちら

ただし、AWSについてはインスタンスIDを直接指定ではなく、GCPのようにタグを使った方式にしたかったのと、PythonではなくRubyで実装したかったので、上記手順とはやや違うことをやりました。

こちらについては後日アップデート予定です。

追記(2020年6月10日)

AWSについてはインスタンスIDを直接指定ではなく、GCPのようにタグを使った方式にしたかったのと、PythonではなくRubyで実装したかった

Lambdaのソースコードはこちらになります。タグで制御できると運用が楽になるのでおすすめです!


require 'aws-sdk'

def lambda_handler(event:, context:)
    msg = start_instance
    { statusCode: 200, body: JSON.generate(msg) }
end

def start_instance
    ec2 = Aws::EC2::Resource.new(region: [リージョン])
    msg = ""
    ec2.instances({filters: [{name: 'tag:タグkey', values: [[タグvalue]]}]}).each do |i|
        name = i.tags.find { |v| v[:key] == "Name" }[:value]
        msg += "Instance:#{name}(#{i.id}) is "
        case i.state.code
        when 0  # pending
            msg = msg + "pending, so it will be running in a bit."
        when 16  # started
            msg = msg + "already started."
        when 48  # terminated
            msg = msg + "terminated, so you cannot stop it."
        else
            msg = msg + "stopped."
            i.start
        end
    end
    puts msg
    msg
end
0
0
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
0
0