Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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が作成されていました。

toshihirock
こちらは個人の意見で会社とは関係ありません。お約束です。
http://toshihirock.blogspot.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away