Skip to content

Instantly share code, notes, and snippets.

@morimorihoge
Created July 6, 2020 09:42
Show Gist options
  • Save morimorihoge/38a0165b4acf6e9524a0d2fd44f95765 to your computer and use it in GitHub Desktop.
Save morimorihoge/38a0165b4acf6e9524a0d2fd44f95765 to your computer and use it in GitHub Desktop.
AWS Lambda Ruby 2.7 EC2 Instances Stop
require 'aws-sdk'
require 'json'
# Environments:
# AWS_REGION = 'ap-northeast-1' as default
# TARGET_INSTANCE_IDS = 'i-1234567890abcdef,i-2234567890abcdef' like comma-separated string
AWS_REGION = ENV['AWS_REGION'] || 'ap-northeast-1'
def lambda_handler(event:, context:)
target_instance_ids = ENV['TARGET_INSTANCE_IDS'].split(',')
result_messages = []
client = Aws::EC2::Client.new(region: AWS_REGION)
result_messages << "Describe Instances: #{target_instance_ids}"
client.describe_instances(instance_ids: target_instance_ids).reservations.each do |reservation|
next if reservation.instances.count < 1
reservation.instances.each do |i|
if i.state.name == 'running'
result_messages << "#{i.instance_id} is running. stopping..."
client.stop_instances(instance_ids: [i.instance_id])
result_messages << "done"
else
result_messages << "#{i.instance_id} is not running"
end
end
end
result_messages << "stop_instances Done"
client.wait_until(:instance_stopped, instance_ids: target_instance_ids)
result_messages << "instance_stopped confirmed"
{ statusCode: 200, body: result_messages.join("\n") }
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment