ページ

ラベル vagrant の投稿を表示しています。 すべての投稿を表示
ラベル vagrant の投稿を表示しています。 すべての投稿を表示

2016年3月17日木曜日

VagrantでVMの紐付きがおかしくなった場合


現象としては、Vagrantファイルがあるディレクトリで
vagrant upすると違ったVMが立ち上がってしまうというもの・・・
元に戻すのが面倒だったので備忘録を兼ねての投稿です。

確認


おかしいと思ってVirtualBoxを起動すると同じものが2つある!?
そこで現在のVM一覧を見るコマンドVBoxManage list vmsを叩いて確認してみると
$ VBoxManage list vms
・・・
"hogehoge_default_1457750943558_68266" {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
"hogehoge_default_1457837316012_51675" {YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY}
やっぱし同じものが2つある(↑hogehogeが2つ)
※XXXXやYYYY~には実際は英数字が入ります

対策


紐付きがおかしくなっている事は間違いないので、Vagrantファイルがある
場所の直下にある.vagrantディレクトリを調べて見る
  • 階層
.vagrant
└── machines
    └── default
        └── virtualbox
            ├── action_provision
            ├── action_set_name
            ├── id ★
            ├── index_uuid
            ├── private_key
            └── synced_folders
★が付いているidが怪しいので中を見てみると・・
$ cat .vagrant/machines/default/virtualbox/id
YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY
ん〜恐らく、ここがXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXじゃないかと・・
修正してvagrant upしてみると、
望んていたものが起動しました!!
これで一件落着かと思っていると、
起動や停止する度にパスワードを聞かれる羽目に!?

原因


vagrant upvagrant haltするとVMとssh接続を行っており、 認証がうまくいってないのが原因でした。
↑の.vagrantの階層でprivate_keyというのが秘密鍵で、
別のVM(YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY)の秘密鍵が残っちゃっていた模様。

対策


解決策としては、
  • 全く新規に公開鍵、秘密鍵を作成
  • 残ってる秘密鍵を元に公開鍵を作成
の2つがあります。
今回は残ってる秘密鍵を元に公開鍵を作成したいと思います。
秘密鍵から公開鍵を作成
$ ssh-keygen -y -f .vagrant/machines/default/virtualbox/private_key > authorized_keys
VMを起動し、/home/vagrant/.sshauthorized_keysを上書きます
$ mv /vagrant/authorized_keys /home/vagrant/.ssh/.
これで認証が失敗せず、パスワード聞かれることもなくなります。

その他


↑の問題とは関係ないですが、色々試している中で見つけて便利だと思ったのでメモ
Vagrantを起動する際はVagrantファイルがあるディレクトリに移動して
vagrant upをしていましたが、vagrant up {id}とする事で
どの場所からでも起動できます
{id}を確認するには
$ vagrant global-status
{id}  default virtualbox poweroff hoge
{id}  default virtualbox poweroff fuga
で確認できます。
また、vagrant upに限らずその他のコマンドでも使用できます。
vagrant halt {id}vagrant destroy {id}・・・

shellなんかを書く時に使えそうです^^

2015年10月7日水曜日

VagrantでAWSのEC2を使う


今回はVagrantを使ってAWSのEC2のインスタンスを操作してみたいと思います。
※AWSのアカウントを持っておりVagrantがインストールされている前提です。


IAMユーザーの作成


AWSサービスにAPIでアクセスする為にアクセスキーを作成する必要があります
アクセスキーを作成する為IAMユーザーを作成します
  • グループの作成
まずはIAMコンソールにアクセスしログインする
メニューからグループを選択し「新しいグループの作成」 をクリック

適当なグループ名を設定します。ここではDevelopersを設定

ポリシーのアタッチではグループに権限を設定することができます。
とりあえずPowerUserAccessに設定

最後に確認画面で内容が正しければ「グループの作成」をクリックし作成する
グループ一覧画面に作成したグループが表示されていればOK

  • ユーザーの作成
メニューからユーザーを選択し「新しいユーザーの作成」 をクリック

今回は1ユーザーしか作成しないので、ユーザー名に適当な名前を入力し「作成」
今回はvagrantの名前でユーザーを作成

作成されたら「ユーザーのセキュリティ認証情報を表示」をクリックしアクセスキーをメモ、または「認証情報のダウンロード」をクリックしCSVファイルで保管

ユーザーにグループを紐付かせる為、ユーザー一覧から作成したユーザーをクリックし
「グループにユーザーを追加」 をクリック

先ほど作成したグループを選択し「グループに追加」

EC2側の設定


EC2 Management Consoleを開く
  • キーペアの作成 キーペアの作成はここを参照
  • セキュリティグループの作成
sshICMPを通すようなセキュリティグループを作成する
今回はvagrantの名前でセキュリティグループを作成

  • 起動するAMIのIDを確認
vagrantで起動したいAMIのIDを確認する為に、メニューから
「インスタンスの作成」を選択

今回はAmazon Linuxを起動する為、Amazon LinuxのIDを確認

※リージョン毎にIDが異なるらしいので注意!!

Vagrant側の設定


  • AWSプラグインのインストール
$ vagrant plugin install vagrant-aws
Installing the 'vagrant-aws' plugin. This can take a few minutes...
Installed the plugin 'vagrant-aws (0.6.0)'!
  • Vagrantfile編集
vagrant initでVagrantfileができたら↓に編集
# -*- mode: ruby -*-
# vi: set ft=ruby :

AWS_ACCESS_KEY_ID = "XXXXXXXXX" # 保存したアクセスキー
AWS_SECRET_KEY = "XXXXXXXXXXXX" # 保存したシークレットキー

Vagrant.configure(2) do |config|
  config.vm.box = "dummy"
  config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
  config.vm.synced_folder ".", "/vagrant", disabled: true

  config.vm.provider "aws" do |aws, override|
    aws.ami = "XXXXXXXXXXXXX" # 確認したAMI-ID
    aws.tags = { 'Name' => 'VagrantEC2' } # 適当な名前に設定
    aws.instance_type = "t2.micro" # 必要に応じて調整
    aws.security_groups = "vagrant" # 作成したセキュリティグループ
    aws.access_key_id = AWS_ACCESS_KEY_ID
    aws.secret_access_key = AWS_SECRET_KEY
    aws.region = "ap-northeast-1" # 必要に応じて調整
    aws.keypair_name = "XXXX" # 作成したキーペア
    override.ssh.username = "ec2-user"
    override.ssh.private_key_path = "~/.ssh/XXXX.pem" # 作成したキーペア
  end
end
config.vm.boxは今回関係ないのでダミーを設定
公式サイトと同様に設定
いざ!!Vagrantを起動してみる
vagrant up --provider=aws
エラー無く起動すればEC2のインスタンスが起動する
マネジメントコンソールからも確認出来る

後は普通にVagrantと同じように操作が可能
  • 起動
$ vagrant ssh

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2015.09-release-notes/
No packages needed for security; 7 packages available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-XXX-XX-XX-XXX ~]$
  • 状態確認
$ vagrant status
Current machine states:

default                   running (aws)

The EC2 instance is running. To stop this machine, you can run
`vagrant halt`. To destroy the machine, you can run `vagrant destroy`.
  • 停止
$ vagrant halt
  • 削除
$ vagrant destory -f

2015年6月19日金曜日

Vagrantメモ

いつも忘れてしまうので、備忘録。

・~/.ssh/configへの仮想サーバssh接続設定出力
$ vagrant ssh-config --host [ホスト名] >> ~/.ssh/config 
これで ssh [ホスト名]で接続できる。

・sahara関連
1. sandbox有効
$ vagrant sandbox on

2. rollback
$ vagrant sandbox rollback

3. commit
$ vagrant sandbox commit

4. sandbox無効化
$ vagrant sandbox off



2015年5月10日日曜日

Jenkis用のVagrantをBox化

Jenkinsをインストールして初期設定したばかりのVagrant環境をBox化してみる

・vagrant package
$ vagrant package
==> default: Clearing any previously set forwarded ports...
==> default: Exporting VM...
==> default: Compressing package to: /Users/{ユーザ名}/Documents/develop/vagrant/boxes/centos6/package.box
$ ls
Vagrantfile package.box

Vagrant fileがあるディレクトリでvagrant packageコマンド実行する事でpackage化してくれる。package.boxができている事を確認。

・vagrantのboxとして登録
$ vagrant box add jenkins package.box
==> box: Adding box 'jenkins' (v0) for provider: 
    box: Downloading: file:///Users/{ユーザ名}/Documents/develop/vagrant/boxes/centos6/package.box
==> box: Successfully added box 'jenkins' (v0) for 'virtualbox'!
$ vagrant box list
centos6 (virtualbox, 0)
centos7 (virtualbox, 0)
jenkins (virtualbox, 0)

vagrant box add {名前} package.boxでpackage化したものをboxとして登録

・実際にboxを使ってみる
$ mkdir jenkins
$ ls
centos6 centos7 jenkins
$ cd jenkins/
$ ls
$ vagrant init jenkins
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
$ ls
Vagrantfile
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'jenkins'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: jenkins_default_1431183086594_26350
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /Users/{ユーザ名}/Documents/develop/vagrant/boxes/jenkins

vagrant init で作成したjenkinsというboxを指定し初期化&立ち上げ
※この時NICのMACアドレスなんかもコピーしてしまう為以下サイトの設定が必要
http://www.absolute-keitarou.net/blog/?p=583
また当然VagrantのIP設定(192.168.33.10)も必要

macのブラウザからjenkinsへアクセスしてみる
無事アクセスできました^^



2015年5月9日土曜日

Vagrant導入

Mac上で実験的にサーバを立てる際にVagrantがあれば便利そうなので導入してみた。

事前にVirtualBoxのインストールが必要なのでインストールする。
※VMWare Fusionでもできるが有料なのでVirtualBoxをインストールorz























現時点での最新版は4.3.26
インストール完了




















次にVagrantをインストール
公式サイト
https://www.vagrantup.com













現時点のバージョンはVer1.7.2

$ vagrant --version
Vagrant 1.7.2

インストール完了!!

仮想マシン作成&起動の流れ


  1. BOX(テンプレート)の取得
  2. 仮想マシンの初期化
  3. 仮想マシン起動



1. BOX(テンプレート)の取得
http://www.vagrantbox.es

上記サイトから作成したいテンプレートをダウンロードする
$ vagrant box add centos7 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
==> box: Adding box 'centos7' (v0) for provider: 
    box: Downloading: https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
==> box: Successfully added box 'centos7' (v0) for 'virtualbox'!

BOXに追加されているか確認
$ vagrant box list
centos7 (virtualbox, 0)


2. 仮想マシンの初期化

特定のディレクトリを作成し実行
$ vagrant init centos7
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
$ ls
Vagrantfile

Vagrantfileが作られる。そしてVagrantfileがあるディレクトリで起動
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos7'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: centos7_default_1431140154221_49934
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: 
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default: 
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if its present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /Users/ユーザ名/Documents/develop/vagrant/boxes/centos7

VirtualBoxを見てみると




















ちゃんとできている^^

便利なコマンド

vagrant status           ・・・現在のステータス表示
vagrant suspend       ・・・一時停止
vagrant resume        ・・・suspendからの復帰
vagrant halt              ・・・シャットダウン
vagrant up                ・・・起動
vagrant reload          ・・・再起動
vagrant destory        ・・・仮想マシン自体を削除
vagrant ssh               ・・・仮想マシンにssh接続

ホストから接続できるようにする
一番簡単な方法
Vagrantfileの以下をコメント削除





































これで192.168.33.10でアクセスできる。