RubyでEC2の起動とSecurity Groupの作成を行う
はじめに
AWSはProgrammableなクラウドであると言われております。またプログラムからアクセスするためのSDKも、かなり充実しております。 ならばプログラマとしてはProgrammingしながらAWSについて学んでみようと考え、「SDKから学ぶAWS」シリーズを作ってみました。
今回は最初ということで、AWSの中でメジャーなEC2を起動する処理を作ってみました。既に同様の記事はあるかもしれませんが、構わず書いていきます。
今回作成するプログラムについて
先にも書いた通り、EC2を起動します。同時にSecurity Groupを設定して自分のIPからのみsshを許可します。
実行するには、予め以下を行っておく必要があります。
- EC2へ接続するためのKey Pairを作成しておく
- Security Credentialを作成しaccess_key_id・secret_access_keyを~/.aws/credentialsに記述しておく
- 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 )
処理内容としては、以下のことを行っております。
- 予め自分のグローバルIPを取得する。(起動するEC2へのアクセス制限をかけるため)
- ~/.aws/credentialsより、AWSに接続するためのproviderを取得する。
- (プログラムのメモリ内に)ec2のオブジェクトを作成する。この時、リージョンを指定する。
- Security Groupを作成する。
- Security GroupのInboundを、tcp、port 22、自分のIPのみを許可する。
- EC2のインスタンスを、AWS上に作成する。この時、AMIのID・インスタンスサイズ・Security Group・Key Pairを指定する。
処理が完了したら、sshでログインできるかを確認してみてください。
まとめ
プログラムの処理フロー、及びパラメータを見ると、EC2とSecurity Groupの作成手順が分かるかと思います。Management Consoleで行うのと、ほぼ同じ手順ですね。
参考サイト
以下を参考にさせて頂きました。ありがとうございました。