はじめに
AWS で管理するマシンの台数が増えてくると、各種作業を自動化したくなってくる。
色々選択肢はあるが、今回は SDK for Ruby を利用して、Ruby から AWS にアクセスしてみる。
環境
下記の環境を前提に作業を進める。
- OS: CentOS 6.4
- Ruby: 2.1.0p0
- aws-sdk: 2.0.6.pre
インストール
作業用ディレクトリの作成
適当な作業ディレクトリを用意する。
今回は ~/projects/aws_ruby
以下で作業を行う。
$ mkdir -p ~/projects/aws_ruby
$ cd ~/projects/aws_ruby
aws-sdk のインストール
作業ディレクトリの vendor/bundle
以下に Gem をインストールする。
作業ディレクトリで下記コマンドを実行。
$ bundle init
作成された Gemfile を以下のように編集。
# A sample Gemfile
source "https://rubygems.org"
gem 'aws-sdk', '2.0.6.pre'
$ bundle install --path vendor/bundle
access_key と secret_access_key の作成
AWS のダッシュボードから、
- Administration & Security
- Identity & Access Management (IAM)
- Users
- Create New Users
- Users
- Identity & Access Management (IAM)
を選択し、ユーザー名を入力。次の画面の Show User Security Credentials
をクリックすると access key
と secret_access_key
が確認できる。
次に作成したユーザーを選択し、 Attach User Policy をクリック。
今回はテンプレートにある Administrator Access を選択して Apply Policy をクリックする。
これでAWSの全ての機能にアクセス出来るユーザーが作成できた。
特定の機能のみ許可できるようにするには、Policy を適切に設定してやればよい。
config の作成
access_key
、 secret_access_key
、region
の設定を config_ec2.yml
に記述する。
例えば東京リージョン の Region 名は ap-northeast-1
。
その他 Region名の一覧は[ここ] (http://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region)にある。
config
ディレクトリを作成し、設定ファイルを編集する。
access_key_id: "さっき取得した access_key"
secret_access_key: "さっき取得した secret_access_key"
region: "ap-northeast-1"
サンプルコード実行
下記のようにコードを記述する。
#!/usr/bin/env ruby
#-*- coding: utf-8 -*-
require 'yaml'
require 'bundler'
Bundler.require
# Load config file
config = YAML.load(File.read "config/config_ec2.yml")
# Create ec2 object
ec2 = Aws::EC2::Client.new(
access_key_id: config["access_key_id"],
secret_access_key: config["secret_access_key"],
region: config["region"]
)
# Access describe of instances
reservations = ec2.describe_instances.reservations
reservations.each_with_index do |reservation, i1|
reservation.instances.each_with_index do |instance, i2|
puts "i1: #{i1}\ti2: #{i2}\tID: #{instance.instance_id}"
end
end
作業ディレクトリ直下で下記コマンドを実行。
$ ruby src/get_instance_id.rb
i1: 0 i2: 0 ID: i-AAAAAAA
i1: 1 i2: 0 ID: i-BBBBBBB
...
おわりに
これで AWS に Ruby からアクセス出来るようになった。
次はインスタンス作成・削除等を行えるようにしたい。