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

coreos

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

はじめに

弊社大瀧が参加した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まで!