RubyでEC2の起動とSecurity Groupの作成を行う

2014.12.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSはProgrammableなクラウドであると言われております。またプログラムからアクセスするためのSDKも、かなり充実しております。 ならばプログラマとしてはProgrammingしながらAWSについて学んでみようと考え、「SDKから学ぶAWS」シリーズを作ってみました。

今回は最初ということで、AWSの中でメジャーなEC2を起動する処理を作ってみました。既に同様の記事はあるかもしれませんが、構わず書いていきます。

今回作成するプログラムについて

先にも書いた通り、EC2を起動します。同時にSecurity Groupを設定して自分のIPからのみsshを許可します。

実行するには、予め以下を行っておく必要があります。

  1. EC2へ接続するためのKey Pairを作成しておく
  2. Security Credentialを作成しaccess_key_id・secret_access_keyを~/.aws/credentialsに記述しておく
  3. EC2のベースとなるAMIを作成しておく

使用する言語はRuby、SDKのバージョンはV1としました。 V1としたのは、まだ公式ページのガイドがV1向けであったのと、V2用のaws-sdk-recourcesがプレビューであったためです。

プログラム

では、プログラムです。

aws-sdkのインストール

Gemfileに以下を記述し、bundle installします。

Gemfile
source "https://rubygems.org"

gem "aws-sdk-v1"

aws-sdkはv1を明示的に指定していることに注意してください。

EC2作成処理

require 'aws-sdk-v1'
require 'net/http'

SECURITY_GROUP_NAME = 'your security group'
KEY_PAIR_NAME = 'your key pair'
PROFILE_NAME = 'your profile'
AMI_ID = 'your ami id'

def my_global_ip
  Net::HTTP.get('ifconfig.me', '/ip').strip!
end

ips = [my_global_ip + '/32']

provider = AWS::Core::CredentialProviders::SharedCredentialFileProvider.new(
             profile_name: PROFILE_NAME
           )

ec2 = AWS::EC2.new(credential_provider: provider, region: 'us-west-2')

security_group = ec2.security_groups.create(SECURITY_GROUP_NAME)

security_group.authorize_ingress :tcp, 22, *ips

instance = ec2.instances.create(
              image_id: AMI_ID,
              instance_type: 't2.micro',
              count: 1, 
              security_groups: SECURITY_GROUP_NAME,
              key_name: KEY_PAIR_NAME
           )

処理内容としては、以下のことを行っております。

  1. 予め自分のグローバルIPを取得する。(起動するEC2へのアクセス制限をかけるため)
  2. ~/.aws/credentialsより、AWSに接続するためのproviderを取得する。
  3. (プログラムのメモリ内に)ec2のオブジェクトを作成する。この時、リージョンを指定する。
  4. Security Groupを作成する。
  5. Security GroupのInboundを、tcp、port 22、自分のIPのみを許可する。
  6. EC2のインスタンスを、AWS上に作成する。この時、AMIのID・インスタンスサイズ・Security Group・Key Pairを指定する。

処理が完了したら、sshでログインできるかを確認してみてください。

まとめ

プログラムの処理フロー、及びパラメータを見ると、EC2とSecurity Groupの作成手順が分かるかと思います。Management Consoleで行うのと、ほぼ同じ手順ですね。

参考サイト

以下を参考にさせて頂きました。ありがとうございました。

Start an Amazon EC2 Instance
自分のグローバルIPアドレスを1秒で求める方法