LoginSignup
11

More than 5 years have passed since last update.

Packerを使ってAMIを使ってみる

Last updated at Posted at 2015-09-26

Packerを一度も触ったことがなかったので触ってみたメモ。
シェルスクリプトのプロビジョニングでnginxがインストールされたAMIを作成。

参考

環境

  • MacOSX 10.10.5(Yosemite)
  • Packer 0.8.6

インストール

# バイナリをダウンロード
$wget https://dl.bintray.com/mitchellh/packer/packer_0.8.6_darwin_amd64.zip

# ~/packerに配置
$mkdir ~/packer
$mv packer_0.8.6_darwin_amd64.zip ~/packer
$cd ~/packer
$unzip packer_0.8.6_darwin_amd64.zip
$rm packer_0.8.6_darwin_amd64.zip

# PATHを通す.bashの場合、~/.bashrcに追記
$vi ~/.zshrc

# packer
export PATH=$PATH:$HOME/packer

# 確認
$source ~/.zshrc
$packer --version
0.8.6

AWSアクセスキーの設定

AWSのアクセスキーを設定します。
以下のいずれかの設定をしておけば大丈夫のようです。

  • 環境変数に設定。アクセスキーは「AWS_ACCESS_KEY_ID」か「AWS_ACCESS_KEY」。シークレットキーは「 AWS_SECRET_ACCESS_KEY」か「AWS_SECRET_KEY」
  • ~/.aws/credentials
  • EC2上で実行している場合、IamInstanceProfile(IAMロール)による設定

templateの作成

nginxがプリインストールされたAMIを作成するためのテンプレートファイルを作成します。

sample.json
{
  "builders": [
    {
      "type": "amazon-ebs",
      "region": "ap-northeast-1",
      "source_ami": "ami-9a2fb89a",
      "instance_type": "t2.micro",
      "ssh_username": "ec2-user",
      "ssh_timeout": "5m",
      "ami_name": "packer_example {{timestamp}}"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "sudo yum -y update",
        "sudo yum -y install nginx"
      ]
    }
  ]
}

実行してみる

# ファイルの確認
$packer validate sample.json
Template validated successfully.

# ビルド
$packer build sample.json
・・・
    amazon-ebs: sudo: sorry, you must have a tty to run sudo

失敗しました。。。これはよく見るやつです。PackerでUserDataの設定ができるようなのでこれでsudoの設定を変えましょう。

UserDataファイルを作成します。

user_data
#!/bin/bash
sed -i 's/^Defaults.*requiretty$/#Defaults    requiretty/' /etc/sudoers
service sshd reload

templateでuser_data_fileを追加し、上記ファイルを呼び出すようにします。

sample.json

  "builders": [{
    "type": "amazon-ebs",
    "region": "ap-northeast-1",
    "source_ami": "ami-9a2fb89a",
    "instance_type": "t2.micro",
    "ssh_username": "ec2-user",
    "ssh_timeout": "5m",
    "user_data_file": "user_data",
    "ami_name": "packer_example {{timestamp}}"
  }],
 "provisioners": [{
    "type": "shell",
    "inline": [
      "sudo yum -y update",
      "sudo yum -y install nginx"
    ]
  }]
}

実行してみると成功し、AMIが作成されていました。

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
11