Tuesday, April 22, 2014

DevOps Okinawa #3

DevOps Okinawa #3 に参加してきました。

https://github.com/OkinawaDevOps/DevOpsOkinawa-3

もくもくネタはとくに決めてなかったので、とりあえずPacker で VirtualBox 向けのイメージを作成することにトライしてみることに。

会の進行

そもそも、会の進行についてもまだよくわかっていないので、最初に README.md をよく読む。

やることを Issue 登録して進行していく方式。これは "すごい広島" 方式、というものの模様。

Packer をインストール

手始めな Issue を登録し、早速、以下な記事を参考に Packer をインストール。

http://www.packer.io/intro/getting-started/setup.html

当方 Mac のため Brewfile に以下な記述があることを確認し、

# Add Repository...
tap homebrew/binary
# Packages...
install packer

以下でインストール。

brew bundle

GETTING STARTED みながら Packer を使う

とは言えまだ Packer の使い方もよくわからないので GETTING STARTED に従ってやってみる。

http://www.packer.io/intro/getting-started/build-image.html

GETTING STARTED では Redis がプリインストールされた Amazon EC2 AMI を作成する模様。

イメージのビルドに t1.micro インスタンスを使うので AWS アカウントが必要。

Packer がビルドするために使う設定ファイルは、テンプレートと呼ばれる模様。テンプレートは以下(example.json)

{
    "variables": {
        "aws_access_key": "",
        "aws_secret_key": ""
    },
    "builders": [{
        "type": "amazon-ebs",
        "access_key": "{{user `aws_access_key`}}",
        "secret_key": "{{user `aws_secret_key`}}",
        "region": "us-east-1",
        "source_ami": "ami-de0d9eb7",
        "instance_type": "t1.micro",
        "ssh_username": "ubuntu",
        "ami_name": "packer-example {{timestamp}}"
    }]
}

aws_access_key と aws_secret_key はテンプレートの中に書かず、ユーザ変数で渡すべしとのこと。

テンプレートの builders セクションはビルダーの設定で、この場合 amazon-ebs というビルダーが使用される模様。 amazon-ebs はソース AMI から EBS-backed AMI をビルドしてプロビジョニングを行い、新しい AMI にリパッケージングするとある。

目標は VirtualBox のイメージを作成することだけど、 VirtualBox 用のビルダーはきっとあって、 それを導入すればあとはテンプレートを作成すればいいのではないかと予想。多分。

packer validate でテンプレートの内容をチェック。

packer validate example.json

以下のとおり良好。

Template validated successfully.

packer build でイメージのビルド。 aws_access_key と aws_secret_key は伏せますです。

packer build -var 'aws_access_key=xxxxxxxxxxxxxxxxxxxx' \
  -var 'aws_secret_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  example.json

実行し終えると以下なメッセージが末尾に、

==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:

us-east-1: ami-eb998182

EC2 Dashboard で US East に切り替え、 AMI(ami-eb998182) の登録を確認。早速 Launch してみる。

SSH ログインは以下、

ssh ec2-54-237-228-42.compute-1.amazonaws.com -lubuntu \
  -i ~/.keypairs/use-packer-NVirginia_us-east-1.pem

問題なくログインできる。

EC2 Dashboard をみると、作成した覚えのないインスタンスがすでにターミネートされている。 名前は Packer Builder 。 これは Packer がイメージのビルドのためソース AMI からインスタンス起動した痕跡かと。

ソース AMI からコピーして新しいイメージを作ることができましたということで、ひとまず成果あり。

次の機会に、以下なエントリを参考に何かをプリインストールしたイメージの作成にトライしてみます。

http://www.packer.io/intro/getting-started/provision.html