LoginSignup
13
10

More than 5 years have passed since last update.

Packerを使ってCentOS6の公式AMIから、カスタマイズしたAMIを作成する

Last updated at Posted at 2014-03-09

概要

Packerを使用すると、Amazon EC2やVagrantDocker等で使用できるイメージをJSONで記述可能なコンフィグレーションから作成することができて便利です。

今回は、Packerを用いて、CentOSが提供している公式AMIからカスタマイズしたAMIを手軽に作成する方法を紹介します。

Packerの導入

まず、Packerを導入します。Homebrewであれば、下記で導入可能です。その他の場合はこちらで説明されています。

$ brew tap homebrew/binary
$ brew install packer

コンフィグレーションの作成

下記は、東京リージョン(ap-northeast-1)にて、CentOS公式AMI(ami-31e86030)を用いて、カスタマイズした独自AMIを作成する設定です。

PackerのShell Provisionerを用いて、下記を行っています。

  • YUMパッケージの更新
  • EPELの導入
  • タイムゾーンをJSTに変更
aws-centos6-tokyo.json
{
  "builders": [
    {
      "type": "amazon-ebs",
      "access_key": "XXXXXXXXXXXXXXXXXXXX",
      "secret_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      "region": "ap-northeast-1",
      "source_ami": "ami-31e86030",
      "instance_type": "t1.micro",
      "ssh_username": "root",
      "ssh_timeout": "5m",
      "ami_name": "CentOS6_x64_ebs_{{isotime | clean_ami_name}}"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "yum -y update",
        "rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm",
        "ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime",
        "rm -f /root/.ssh/authorized_keys"
      ]
    }
  ]
}

また、CentOSのAMIイメージでは、記事執筆現在では、EC2でインスタンス作成時に指定するKey pairを、起動の際にrootユーザのauthorized_keysにコピーすることで、指定したKey pairを使ってrootユーザでログインすることを可能にしています。

この処理は、既にauthorized_keysファイルがあると行われないため、rm -f /root/.ssh/authorized_keysとして、削除しておく必要があります。

AMIの名称の設定

ami_nameには、テンプレート文字列を指定することができます。{{timestamp}}と記述するとUNIX timestamp、{{isotime | clean_ami_name}}のように記述すると、RFC-3339フォーマットの日付(例: 2014-03-08T16-29-43Z)の文字列を挿入することが可能です。また、isotimeの場合、AMIの名称には指定できない文字列が含まれているため、clean_ami_nameを指定する必要があります。

上記では、CentOS6_x64_ebs_{{isotime | clean_ami_name}}と指定しています。

AMIの作成

それでは、PackerでAMIを作成してみます。下記コマンドでAMIが自動的に生成されます。

% packer build aws-centos6-tokyo.json
amazon-ebs output will be in this color.

==> amazon-ebs: Creating temporary keypair: packer…
==> amazon-ebs: Creating temporary security group for this instance...
==> amazon-ebs: Authorizing SSH access on the temporary security group...
==> amazon-ebs: Launching a source AWS instance...
    amazon-ebs: Instance ID: i-XXXXXXXX
==> amazon-ebs: Waiting for instance (i-XXXXXXXX) to become ready...
==> amazon-ebs: Waiting for SSH to become available...
==> amazon-ebs: Connected to SSH!
==> amazon-ebs: Provisioning with shell script: …
…
==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:

ap-northeast-1: ami-XXXXXXXX
13
10
0

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
13
10