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

4.12.2015

Building CentOS 5.8 Desktop VM with Packer

Packer で CentOS 5.8 デスクトップ環境の仮想マシンを作る

 

必要に迫られて、CentOS 5.8 のレガシーなデスクトップ環境を VirtualBox VM で作った。

s 

kickstart + Packer + Vagrant でサクッと構築。

 

改めて感じる、HashiCorp の偉大さ。

7.20.2014

AWS: Creating New EC2 Instance in N.Virginia by Vagrant

AWS: 米国東部リージョンの EC2 インスタンスを Vagrant で作成する

 

AWS を日常的に使うなら、やはり単価の安い米国リージョンを選びたいもの。

しかし安易に日本のインスタンス作成で使った Vagrantfile を使い回すと、以下のような落とし穴にハマる。

 

エラーメッセージとその対応

 

アベイラビリティゾーンが無い
InvalidParameterValue => Invalid availability zone: [us-east-1a]

何も考えず、リージョン名に「a」を付けるといきなりハマる。

現在、存在するのは「us-east-1b」「us-east-1c」「us-east-1d」のみ。EC2 -> Dashboard で最新情報を確認できる。

 

セキュリティグループが無い
The security group 'vagrant' does not exist

リージョン単位で定義を作成する必要がある。一方、IAM のグループ・ユーザは全リージョン共通。

 

AMI が無い
The image id '[ami-29dc9228]' does not exist

これも、リージョンごとに異なるイメージIDを持っているので、調べ直す必要がある。

 

ネットワーク環境とセキュリティグループの設定が対応していない
InvalidParameterCombination => VPC security groups may not be used for a non-VPC launch

セキュリティグループを作るとき、適当な VPC を選ぶとこうなる。

米国東部リージョンの場合、「サブネットID」または「ネットワーク・インタフェースID」の指定がない場合、そのインスタンスは non-VPC、つまり EC2-Classic 環境に作成されるようだ。

これに対する正しい対応は、正しい「サブネットID」を Vagrantfile の中で指定すること。

AWS Management Console の Services -> Compute & Networking -> VPC -> Subnets の画面で確認できる。

目的の「VPC」および「アベイラビリティゾーン」に対応したサブネットの「Subnet ID」を控え、以下のような記述を Vagrantfile に追加する。

 aws.subnet_id = "subnet-xxxxxxxx"

 

インスタンスタイプが Non-VPC に対応していない
VPCResourceNotSpecified => The specified instance type can only be used in a VPC. A subnet ID or network interface ID is required to carry out the request.

セキュリティグループを作るとき、No VPC を選んでしまうとこうなる。
t2.micro インスタンスを立ち上げるためには、VPC に所属させないといけない。

 

セキュリティグループのグループ名が認識されない
InvalidParameterCombination => The parameter groupName cannot be used with the parameter subnet

aws.security_groups には、セキュリティグループの「Group Name」ではなく「Group ID」(sg-xxxxxxxx) を指定する必要があるようだ。

 

キーペアが無い
The key pair 'vagrant' does not exist

キーペアもリージョン単位で作成する必要がある。これが最後の難関。

 

Public IP の永続化

デフォルトの VPC を使えば Public IP が自動的に割り振られるが、これはインスタンスを起動するたびに
変わる可能性がある。

Vagrantfile に次の1行を書けば、自動的に新規の Elastic IP を取得し、立ち上げたインスタンスと紐付けてくれる。
素晴らしい。

aws.elastic_ip = true

 

 

 

References
Related Posts

7.18.2014

How to Monitor Amazon EC2 Instances with NewRelic (Provisioned by Vagrant + Ansible)

New Relic で EC2 インスタンスを監視する方法

 

目的

Amazon EC2 の新規インスタンスを立ち上げ、New Relic でリソース監視をする。
これを vagrant up コマンド一発で実現したい。

プロビジョニングには Ansible を使う。

 

事前準備

 

1. New Relic アカウントの準備

 

2. AWS Management Console の作業
  • AWS アカウントの作成 (手順割愛)
  • ユーザ・グループ作成
    • Services -> Deployment & Management -> IAM
    • IAM -> Groups: vagrant グループ (Power User Access) を追加
    • IAM -> Users: vagrant ユーザを追加し、vagrant グループに所属。APIキーを確認
  • セキュリティグループ作成
    • Services -> Compute & Networking -> EC2 -> NETWORK & SECURITY -> Security Groups
    • vagrant グループを追加し、Inbound 許可, {SSH, HTTP, HTTPS}, Anywhere を設定
  • SSH鍵の作成
    • Services -> Compute & Networking -> EC2 -> NETWORK & SECURITY -> Key Pairs
    • キーペア vagrant を作成し、vagrant.pem を適当な場所に保存 (例: ~/.ssh/aws-vagrant.pem)

 

3. プロビジョニング実行環境の整備
  • Vagrant のインストール
  • Vagrant プラグインのインストール
    $ vagrant plugin install vagrant-aws
    $ vagrant plugin install dotenv
     
  • Ansible のインストール

 

プロビジョニング用ファイルの作成

 

Vagrantfile

 

.env ファイル

Vagrantfile と同じディレクトリに「.env」というファイルを作成する。

以下のように認証情報を適宜設定すること。

# default provider
VAGRANT_DEFAULT_PROVIDER="aws"

# credentials
AWS_SSH_USERNAME="ec2-user"
AWS_SSH_KEY="path/to/your/vagrant.pem"
AWS_ACCESS_KEY_ID="your access key id"
AWS_SECRET_ACCESS_KEY="your secret"
AWS_KEYPAIR_NAME="vagrant"
AWS_SECURITY_GROUP="vagrant"

# new relic
NEWRELIC_LICENSE_KEY="your license key"

 

Ansible 関連ファイル

 

プロビジョニングの実行

$ vagrant up
Bringing machine 'aws-newrelic-test' up with 'aws' provider...
[aws-newrelic-test] Warning! The AWS provider doesn't support any of the Vagrant
high-level network configurations (`config.vm.network`). They
will be silently ignored.
[aws-newrelic-test] Launching an instance with the following settings...
[aws-newrelic-test]  -- Type: t2.micro
[aws-newrelic-test]  -- AMI: ami-29dc9228
[aws-newrelic-test]  -- Region: ap-northeast-1
[aws-newrelic-test]  -- Availability Zone: ap-northeast-1a
[aws-newrelic-test]  -- Keypair: vagrant
[aws-newrelic-test]  -- Security Groups: ["vagrant"]
[aws-newrelic-test]  -- Block Device Mapping: []
[aws-newrelic-test]  -- Terminate On Shutdown: false
[aws-newrelic-test]  -- Monitoring: false
[aws-newrelic-test]  -- EBS optimized: false
[aws-newrelic-test]  -- Assigning a public IP address in a VPC: false
[aws-newrelic-test] Waiting for instance to become "ready"...
[aws-newrelic-test] Waiting for SSH to become available...
[aws-newrelic-test] Machine is booted and ready for use!
[aws-newrelic-test] Running provisioner: ansible...

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [aws-newrelic-test]

TASK: [newrelic | check if repository is installed] ***************************

*snip*

PLAY RECAP ********************************************************************
aws-newrelic-test          : ok=9    changed=6    unreachable=0    failed=0

AWSインスタンス作成、起動、Ansible によるプロビジョニングが一気通貫で実行される。

暫くすると、New Relic の画面で EC2 サーバの情報が見られるようになった。
AWS課金には注意。

 

 

References

2.01.2014

VirtualBox: How to Increase the Virtual Hard Disk Size

VirtualBox: CentOS 仮想ディスクの容量拡張について

 

VirtualBox で立てた Docker ホストの中でコンテナを作り続けていたら、いつしか仮想ディスクの容量が
full になってしまっていた。

VirtualBox のゲストOSで使っているストレージ容量を増やす手順をメモしておく。

 

環境

  • ホストOS: Mac OS X 10.9 (Mavericks)
  • VirtualBox: 4.3.6
  • ゲストOS: CentOS 6.5

こちらの Dockerfile で構築した CentOS (ベースは opscode 提供イメージ) のディスクを
40GB から 80GB へ拡張する。

尚、物理ディスクの空き容量は十分にあるものとする。

 

手順

こちらのブログポストの内容に従って作業。

 

(1) 仮想OS の停止
$ vagrant halt

 

(2) フォーマット変換

ストレージが VMDK 形式の場合、VBoxManage コマンドで直接その容量を変えることはできない。(※1)
いったん VDI 形式のクローンを作ってから、その容量を拡張する。

以下は packer-centos-6.5-x86_64-disk1 というストレージの場合の例。

$ cd ~/VirtualBox\ VMs/ゲストOSの名前
$ VBoxManage clonehd packer-centos-6.5-x86_64-disk1.vmdk packer-centos-6.5-x86_64-disk1.vdi --format VDI
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 32e9d2f1-d30c-4dfc-84dd-24ba96e3be31
$ VBoxManage modifyhd packer-centos-6.5-x86_64-disk1.vdi --resize 81920
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

clonehd コマンドの所要時間は実ディスクの使用量やI/O性能に依存。数十分かかる場合もある。

変換し終わったらVMDK形式のファイルは削除してよいが、バックアップとして暫く残しておくことをお勧めする。

 

(3) ストレージ差し替え

VirtualBox の GUI 上で作業した。

設定画面を開いて、IDE Controller 配下の Primary Master ディスクを VDI 形式のものに付け替え。

Docker host1 Storage 4

 

(4) 仮想OS の起動
$ Vagrantfileのあるディレクトリ
$ vagrant up
$ vagrant ssh

fdisk コマンドで 80GB (+α) が認識されていることを確認。

$ sudo fdisk -l |head -20

ディスク /dev/sda: 85.9 GB, 85899345920 バイト
ヘッド 255, セクタ 63, シリンダ 10443
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x0004a286

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *           1          64      512000   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2              64        5222    41430016   8e  Linux LVM

ディスク /dev/mapper/VolGroup-lv_root: 41.4 GB, 41448112128 バイト
ヘッド 255, セクタ 63, シリンダ 5039
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x00000000

 

(5) パーティションの拡張

fdisk または parted で実行。以下は parted の例。
最初に unit cyl でシリンダ単位で操作するようにしている。ハイライトした行が parted 内での入力。

$ sudo parted
(parted) unit cyl
(parted) p
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sda: 10443cyl
セクタサイズ (論理/物理): 512B/512B
BIOS シリンダ、ヘッド、セクタ geometry: 10443,255,63.  1シリンダは 8225kB。
パーティションテーブル: msdos

番号  開始   終了     サイズ   タイプ   ファイルシステム  フラグ
 1    0cyl   63cyl    63cyl    primary  ext4              boot
 2    63cyl  5221cyl  5157cyl  primary                    lvm

(parted) rm 2
警告: WARNING: the kernel failed to re-read the partition table on /dev/sda (デバイスもしくはリソースがビジー状態です).  As a result, it may not reflect all of your changes until after reboot.
(parted) p
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sda: 10443cyl
セクタサイズ (論理/物理): 512B/512B
BIOS シリンダ、ヘッド、セクタ geometry: 10443,255,63.  1シリンダは 8225kB。
パーティションテーブル: msdos

番号  開始  終了   サイズ  タイプ   ファイルシステム  フラグ
 1    0cyl  63cyl  63cyl   primary  ext4              boot

(parted) mkpart primary 63 10443
警告: 63cyl から 10443cyl までのパーティションを指定されました。
可能な中で最も近いものは 63cyl から 10443cyl になります。
それでもかまいませんか?
はい(Y)/Yes/いいえ(N)/No? y
警告: WARNING: the kernel failed to re-read the partition table on /dev/sda (デバイスもしくはリソースがビジー状態です).  As a result, it may not reflect all of your changes until after reboot.
(parted) p
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sda: 10443cyl
セクタサイズ (論理/物理): 512B/512B
BIOS シリンダ、ヘッド、セクタ geometry: 10443,255,63.  1シリンダは 8225kB。
パーティションテーブル: msdos

番号  開始   終了      サイズ    タイプ   ファイルシステム  フラグ
 1    0cyl   63cyl     63cyl     primary  ext4              boot
 2    63cyl  10443cyl  10379cyl  primary

(parted) set 2 lvm on
警告: WARNING: the kernel failed to re-read the partition table on /dev/sda (デバイスもしくはリソースがビジー状態です).  As a result, it may not reflect all of your changes until after reboot.
(parted) p
モデル: ATA VBOX HARDDISK (scsi)
ディスク /dev/sda: 10443cyl
セクタサイズ (論理/物理): 512B/512B
BIOS シリンダ、ヘッド、セクタ geometry: 10443,255,63.  1シリンダは 8225kB。
パーティションテーブル: msdos

番号  開始   終了      サイズ    タイプ   ファイルシステム  フラグ
 1    0cyl   63cyl     63cyl     primary  ext4              boot
 2    63cyl  10443cyl  10379cyl  primary                    lvm

(parted) q
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。

設定が終わったら、ssh から抜けてリブート(vagrant halt; vagrant up)する。

 

(6) LVM 物理ボリューム (physical volume) サイズの拡張

pvscan で確認、pvresize で変更。

$ sudo pvscan
  PV /dev/sda2   VG VolGroup   lvm2 [39.51 GiB / 0    free]
  Total: 1 [39.51 GiB] / in use: 1 [39.51 GiB] / in no VG: 0 [0   ]
$ sudo pvresize /dev/sda2
  Physical volume "/dev/sda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized
$ sudo pvscan
  PV /dev/sda2   VG VolGroup   lvm2 [79.51 GiB / 40.00 GiB free]
  Total: 1 [79.51 GiB] / in use: 1 [79.51 GiB] / in no VG: 0 [0   ]

vgdisplay コマンドで状態を確認。

$ sudo vgdisplay
  --- Volume group ---
  VG Name               VolGroup
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               79.51 GiB
  PE Size               4.00 MiB
  Total PE              20354
  Alloc PE / Size       10114 / 39.51 GiB
  Free  PE / Size       10240 / 40.00 GiB
  VG UUID               Iv3nnF-GabP-gmv5-sU9W-iGtb-y5yg-9MA68g

Total PE 20354 に対して、Alloc PE が 10114 であることがわかった。

 

(7) LVM 論理ボリューム (logical volume) サイズの拡張

lvdisplay で確認、lvextend で変更。
空き領域を全て使用する場合には -l +100%FREE オプションが便利だ。

$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/VolGroup/lv_root
(略)
  LV Size                38.60 GiB
(略)
$ sudo lvextend -l +100%FREE /dev/VolGroup/lv_root
  Extending logical volume lv_root to 78.60 GiB
  Logical volume lv_root successfully resized
$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/VolGroup/lv_root
(略)
  LV Size                78.60 GiB
(略)

 

(8) ファイルシステムのサイズ拡張

最後に、resize2fs で対象のファイルシステムのサイズを変更。

$ sudo resize2fs /dev/VolGroup/lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/VolGroup/lv_root is mounted on /; on-line resizing required
old desc_blocks = 3, new_desc_blocks = 5
Performing an on-line resize of /dev/VolGroup/lv_root to 20604928 (4k) blocks.
The filesystem on /dev/VolGroup/lv_root is now 20604928 blocks long.

$ df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   78G   38G   36G  52% /

無事、ファイルシステム上で使えるディスク容量を 40GB 増やすことに成功した。

 

 

 

※1 現バージョンでは対応していないフォーマットだと表示される。

$ VBoxManage modifyhd packer-centos-6.5-x86_64-disk1.vmdk --resize 81920
0%...
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage: error: Resize hard disk operation for this format is not implemented yet!