LoginSignup
40

More than 5 years have passed since last update.

Vagrant による仮想サーバー管理 (WIP)

Last updated at Posted at 2014-07-02

Vagrant はサーバー管理の共通インターフェースって感じがする。みんな覚えたら良いと思う。

尚、シークレットトークンとかは .env に記入するので dotenv を Vagrant にインストールしておく:

vagrant plugin install dotenv

Amazon Web Services

アクセスキー

アクセスキー (access key ID と secret access key) を確認しておく:

プロジェクト作成

AMI

AMI の ID を確認しておく。

先日登場した t2.micro インスタンスを使用する場合は、仮想化方式が HVM の AMI を使用する必要がある。

Instance Types

Key Pair

インスタンス用の Key Pair を準備しておく。

Security Group

インスタンス用の Secuirty Group を準備しておく。

Vagrant

Vagrant AWS Provider プラグインをインストール:

vagrant plugin install vagrant-aws

Vagrantfile

AWS 用の Vagrantfile を作成:

Dotenv.load
Vagrant.configure("2") do |config|
  # AWS の設定
  # https://github.com/mitchellh/vagrant-aws#configuration
  config.vm.provider :aws do |provider, override|
    provider.access_key_id = "#{ENV['YOUR_KEY']}"
    provider.secret_access_key = "#{ENV['YOUR_SECRET_KEY']}"

    provider.ami = "ami-bb562fba"
    provider.instance_type = "t2.micro"
    provider.keypair_name = "#{ENV['KEYPAIR_NAME']}"
    provider.region = "ap-northeast-1"

    provider.security_groups = [
      "vagrant"
    ]
    provider.tags = {
      "Name" => "Amazon Linux"
    }

    # ダミー Box の指定
    override.vm.box = "aws"
    override.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"

    override.ssh.username = "ec2-user"
    override.ssh.private_key_path = "#{ENV['PATH_TO_YOUR_PRIVATE_KEY']}"
  end
end

AWS インスタンスを起動:

vagrant up --provider=aws

AWS インスタンスを破棄:

vagrant destroy

Google Compute Engine

gcutil

Google Compute Engine の CLI "gcutil" が途中で必要になるのでインストールしておく。

インストール後、予め使用する Google アカウントにログインしておく:

gcloud auth login

プロジェクト作成

Google Developer Console から Vagrant で管理するプロジェクトを作成する。

プロジェクトを作成したら、下記工程を済ませておく:

  1. "Google Compute Engine" を プロジェクトの "APIs" ページから有効にする。
  2. 課金の請求先登録に移るのでクレジットカード情報等を登録する。
  3. プロジェクトの "Credentials" ページの "Create new Client ID" ボタンから "Service account" を作成する。
  4. 秘密鍵のダウンロード実行と、鍵のパスワード表示がされるので控えておく。
  5. "VM instances" ページから、何でも良いので、手動で一つインスタンスを作成する。
  6. インスタンスが作成されると "VM instances" ページにインスタンス一覧が表示される。
  7. 一覧に "SSH" ボタンがあるのでクリックすると gcutil で実行するコマンドが表示される。
  8. コマンドをコピーして CLI から実行する。
  9. 初回は SSH のパスフレーズ設定があるので、必要に応じて設定する。
  10. 完了すると、NIX 環境では ~/.ssh 下に秘密鍵 google_compute_engine と公開鍵 google_compute_engine.pub が自動生成され、インスタンスに SSH ログインする。
  11. この時、ログインユーザー名が決定されるが、これはローカルユーザーと同一になる模様。
  12. exit コマンド等でインスタンスの SSH からログアウトする。

うーん、面倒くさい... ><

Images

Machine Types

Network

Vagrant

Vagrant Google Compute Engine (GCE) Provider プラグインをインストール:

vagrant plugin install vagrant-google

Vagrantfile

GCE 用の Vagrantfile を作成:

Dotenv.load
Vagrant.configure("2") do |config|
  # GCE の設定
  # https://github.com/mitchellh/vagrant-google#configuration
  config.vm.provider :google do | provider, override|
    provider.google_project_id = "#{ENV['YOUR_GOOGLE_CLOUD_PROJECT_ID']}"
    provider.google_client_email = "#{ENV['YOUR_SERVICE_ACCOUNT_EMAIL_ADDRESS']}"
    provider.google_key_location = "#{ENV['PATH_TO_YOUR_PRIVATE_KEY']}"

    provider.image = "centos-6-v20140619"
    provider.machine_type = "f1-micro"

    provider.name = "my-instance"
    provider.network = "vagrant"

    # ダミー Box の指定
    override.vm.box = "gce"
    override.vm.box_url = "https://github.com/mitchellh/vagrant-google/raw/master/google.box"

    override.ssh.username = "#{ENV['USERNAME']}"
    override.ssh.private_key_path = "~/.ssh/google_compute_engine"
  end
end

GCE インスタンスを起動:

vagrant up --provider=google

GCE インスタンスを破棄:

vagrant destroy

DigitalOcean

アカウント設定

SSH Key

"SSH Keys" ページより、SSH 鍵を生成して公開鍵を登録しておく。

Personal Access Token

"Apps & API" ページより、Personal Access Token を生成して確認しておく。

Vagrant

Digital Ocean Vagrant Provider プラグインをインストール:

vagrant plugin install vagrant-digitalocean

Vagrantfile

DigitalOcean 用の Vagrantfile を作成:

Dotenv.load
Vagrant.configure('2') do |config|
  # DigitalOcean の設定
  # https://github.com/smdahlen/vagrant-digitalocean#configure
  config.vm.provider :digital_ocean do |provider, override|
    # Personal Access Token
    # https://cloud.digitalocean.com/settings/applications
    provider.token = "#{ENV['PERSONAL_ACCESS_TOKEN']}"

    # Image
    # https://developers.digitalocean.com/#list-all-images
    provider.image = "CentOS 7.0 x64"

    # Region
    # https://developers.digitalocean.com/#list-all-regions
    provider.region = "sfo1"

    # Size
    # https://developers.digitalocean.com/#list-all-sizes
    provider.size = "512mb"

    # SSH Key
    # https://cloud.digitalocean.com/ssh_keys
    provider.ssh_key_name = "#{ENV['SSH_KEY_NAME']}"

    # SSH ユーザー名を指定
    override.ssh.username = "vagrant"

    # ダミー Box の指定
    override.vm.box = "digitalocean"
    override.vm.box_url = "https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box"

    override.ssh.private_key_path = "#{ENV['SSH_KEY_PATH']}"
  end
end

DigitalOcean インスタンスを起動:

vagrant up --provider=digital_ocean

DigitalOcean インスタンスを破棄:

vagrant destroy

Docker

Vagrant

Docker Provider は Vagrant で標準搭載されている。

Docker では Box ファイルではなく、Docker イメージファイルから起動する。

Docker イメージから起動する場合の Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.provider "docker" do |d|
    # イメージ foo/bar を指定
    d.image = "foo/bar"
  end
end

Docker イメージファイルを Dockerfile から生成する場合の Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.provider "docker" do |d|
    # Vagrantfile と同階層の Dockerfile を指定
    d.build_dir = "."
  end
end

Docker インスタンスを起動:

vagrant up --provider=docker

物理サーバー

物理サーバーの場合は OS のインストールと SSH 接続環境の設定までは手動で終わらせておく必要がある。

Vagrant

Vagrant ManagedServers Provider プラグインをインストール:

vagrant plugin install vagrant-managed-servers

ManagedServers 用の Vagrantfile を作成:

Vagrant.configure("2") do |config|
  # ManagedServers
  # https://github.com/tknerr/vagrant-managed-servers#configuration
  config.vm.provider :managed do |managed, override|
    managed.server = "ip-or-hostname"

    # ダミー Box の指定
    override.vm.box = "managed"
    override.vm.box_url = "https://github.com/tknerr/vagrant-managed-servers/raw/master/dummy.box"

    override.ssh.username = "ubuntu"
    override.ssh.private_key_path = "PATH TO YOUR PRIVATE KEY"
  end
end

ManagedServer インスタンスを起動:

vagrant up --provider=managed

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40