CoreOS on EC2を一発で起動するboot2coreを作った

はじめに

弊社大瀧が参加したBPStudy#81のレポートで@mopemopeさんがご紹介されていた、クラウド環境でCoreOSを簡単に起動するcoreupというツールがとても面白そうだったので、AWSで試してみよう!としたのですが、僕の理解不足でうまく動かすことが出来ませんでした...

で、イラっとして「AWSに簡単にCoreOS環境を立ち上げるツール」としてboot2coreというスクリプトを書いてみました。CoreOS on EC2でDockerコンテナをクラスタリングする | Developers.IOでやったことを、AWS SDK for Rubyを使ってスクリプト一発で実行する感じです。

boot2coreの使い方

ツール一式をgit cloneでローカル環境にコピーします。

$ git clone https://github.com/smokeymonkey/boot2core.git

次にCoreOSをLaunchするときにUser-Dataとして食わせるための設定ファイルを作成します。etcd用のトークンはhttps://discovery.etcd.io/newから取得しておいて下さい。

$ cp cloud-config.yml.dist cloud-config.yml
$ vi cloud-config.yml
#cloud-config
coreos:
  etcd:
    discovery: "https://discovery.etcd.io/<取得したトークン>"
    addr: "$private_ipv4:4001"
    peer-addr: "$private_ipv4:7001"
  units:
    - command: start
      name: etcd.service
    - command: start
      name: fleet.service
    - command: start
      name: docker.service

では実行します。実行時に聞かれるパラメータは以下のとおりです。

    • ACCESS_KEY: ... EC2をLaunchしたいAWSアカウントのアクセスキー。
    • SECRET_KEY: ... EC2をLaunchしたいAWSアカウントのシークレットキー。
    • REGION: ... EC2をLaunchしたいリージョン。リストが表示されるので、リージョンの番号を入力して下さい。
    • VPC_ID: ... EC2をLaunchしたいVPCのID。
    • INSTANCE_TYPE: ... EC2のインスタンスタイプ。リストが表示されるので、選択したいインスタンスタイプの番号を入力して下さい。
    • KEY_NAME: ... SSHで使用する秘密鍵の名前。ユーザcoreにインポートされます。
    • ACCESS_FROM_IP_ADDRESS: ... SSHアクセス元のIPアドレス。この値がセキュリティグループに設定されます。
    • USERDATA(file path): ... 前述で作成したcloud-config.ymlのパス。
    • Number of Instances: ... 起動したいインスタンス数。
$ ruby ./boot2core.rb
ACCESS_KEY:
SECRET_KEY:
REGION: Select your region number ->
  1 = ap-northeast-1
  2 = ap-southeast-1
  3 = ap-southeast-2
  4 = eu-west-1
  5 = sa-east-1
  6 = us-east-1
  7 = us-west-1
  8 = us-west-2
REGION:
VPC_ID:
INSTANCE_TYPE: Select your instance type number ->
  1 = t1.micro
  2 = m1.small
  3 = m3.medium
  4 = m3.large
  5 = m3.xlarge
  6 = m3.2xlarge
INSTANCE_TYPE:
KEY_NAME:
ACCESS_FROM_IP_ADDRESS:
USERDATA(file path):
Number of Instances:

すると、指定したVPCにEC2インスタンスが起動しているので、あとはユーザcoreでSSH接続してお好きにどうぞ!

まとめ

結果的にAWS SDK for Rubyの勉強になって良かったです。Rubyとしては拙いところが多いのは自覚してますので、今後も改善していきたいと思います。ご指摘があれば是非@smokeymonkeyまで!