Edited at

aws-sdk を利用して Ruby で AWS にアクセス

More than 3 years have passed since last update.


はじめに

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 を以下のように編集。


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







を選択し、ユーザー名を入力。次の画面の Show User Security Credentials をクリックすると access keysecret_access_key が確認できる。

次に作成したユーザーを選択し、 Attach User Policy をクリック。

今回はテンプレートにある Administrator Access を選択して Apply Policy をクリックする。

これでAWSの全ての機能にアクセス出来るユーザーが作成できた。

特定の機能のみ許可できるようにするには、Policy を適切に設定してやればよい。


config の作成

access_keysecret_access_keyregion の設定を config_ec2.yml に記述する。

例えば東京リージョン の Region 名は ap-northeast-1

その他 Region名の一覧はここにある。

config ディレクトリを作成し、設定ファイルを編集する。


config/config_ec2.yml

access_key_id: "さっき取得した access_key"

secret_access_key: "さっき取得した secret_access_key"
region: "ap-northeast-1"


サンプルコード実行

下記のようにコードを記述する。


src/get_instance_id.rb

#!/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 からアクセス出来るようになった。

次はインスタンス作成・削除等を行えるようにしたい。