Packer でイメージ作る最中に色々やってみる

# Packer でイメージ作る最中に色々やってみる

日越してしまった・・・
[昨日](https://qiita.com/okaru/items/627404842f06892daa1f) の続きです。

## nginx をイメージ作成の際に入れてみる

昨日作った `example.json` をいじってみます。

```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": "ap-northeast-1",
    "source_ami_filter": {
      "filters": {
        "virtualization-type": "hvm",
        "name": "ubuntu/images/*ubuntu-bionic-18.04-amd64-server-*",
        "root-device-type": "ebs"
      },
      "owners": ["099720109477"],
      "most_recent": true
    },
    "instance_type": "t3.micro",
    "ssh_username": "ubuntu",
    "ami_name": "packer-example {{timestamp}}"
  }],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "sleep 30",
        "sudo apt-get update",
        "sudo apt-get install -y nginx"
      ]
    }
  ]
}
```

`"name": "ubuntu/images/*ubuntu-bionic-18.04-amd64-server-*"`

ちょっと、ubuntu を 16.04 から 18.04 にしてみました。

`"instance_type": "t3.micro",`

インスタンスタイプを新しいやつに・・・
⇒これは後で気づきましたが、課金かかるので、無料枠でやってる人は注意してください・・・

`provisioners` の項目が、今日の主体です。
シェルで、`nginx` をインストールしてます。
`apt-get` は `sudo` で動かさないと絶賛エラーを吐きます。

## やってみた

```
> ./packer build -var 'aws_access_key=<access key>' -var 'aws_secret_key=<secret key>' example.json
amazon-ebs output will be in this color.

==> amazon-ebs: Prevalidating AMI Name: packer-example 1544282532
    amazon-ebs: Found Image ID: ami-0f2c38ac2e37197be
==> amazon-ebs: Creating temporary keypair: packer_5c0be1a4-d087-d394-3b9d-26182f55fd9e
==> amazon-ebs: Creating temporary security group for this instance: packer_5c0be1a6-6df5-0494-8621-d7699f5986c1
==> amazon-ebs: Authorizing access to port 22 from 0.0.0.0/0 in the temporary security group...
==> amazon-ebs: Launching a source AWS instance...
==> amazon-ebs: Adding tags to source instance
    amazon-ebs: Adding tag: "Name": "Packer Builder"
    amazon-ebs: Instance ID: i-0c0c59321671f31a9
==> amazon-ebs: Waiting for instance (i-0c0c59321671f31a9) to become ready...
==> amazon-ebs: Using ssh communicator to connect: 52.195.14.252
==> amazon-ebs: Waiting for SSH to become available...
==> amazon-ebs: Connected to SSH!
==> amazon-ebs: Provisioning with shell script: /tmp/packer-shell918288955
    amazon-ebs: Hit:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic InRelease
    amazon-ebs: Get:2 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
    amazon-ebs: Get:3 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
    amazon-ebs: Get:4 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/multiverse Sources [181 kB]
    amazon-ebs: Get:5 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main Sources [829 kB]
    amazon-ebs: Get:6 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/universe Sources [9051 kB]
    amazon-ebs: Get:7 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/restricted Sources [5324 B]
    amazon-ebs: Get:8 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [8570 kB]
    amazon-ebs: Get:9 http://security.ubuntu.com/ubuntu bionic-security InRelease [83.2 kB]
    amazon-ebs: Get:10 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/universe Translation-en [4941 kB]
    amazon-ebs: Get:11 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [151 kB]
    amazon-ebs: Get:12 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/multiverse Translation-en [108 kB]
    amazon-ebs: Get:13 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/universe Sources [106 kB]
    amazon-ebs: Get:14 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/restricted Sources [2064 B]
    amazon-ebs: Get:15 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main Sources [219 kB]
    amazon-ebs: Get:16 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/multiverse Sources [3824 B]
    amazon-ebs: Get:17 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [454 kB]
    amazon-ebs: Get:18 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main Translation-en [170 kB]
    amazon-ebs: Get:19 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [592 kB]
    amazon-ebs: Get:20 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/universe Translation-en [165 kB]
    amazon-ebs: Get:21 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [6372 B]
    amazon-ebs: Get:22 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/multiverse Translation-en [3356 B]
    amazon-ebs: Get:23 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-backports/universe Sources [2068 B]
    amazon-ebs: Get:24 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [3468 B]
    amazon-ebs: Get:25 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-backports/universe Translation-en [1604 B]
    amazon-ebs: Get:26 http://security.ubuntu.com/ubuntu bionic-security/universe Sources [26.7 kB]
    amazon-ebs: Get:27 http://security.ubuntu.com/ubuntu bionic-security/multiverse Sources [1336 B]
    amazon-ebs: Get:28 http://security.ubuntu.com/ubuntu bionic-security/main Sources [64.1 kB]
    amazon-ebs: Get:29 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [218 kB]
    amazon-ebs: Get:30 http://security.ubuntu.com/ubuntu bionic-security/main Translation-en [84.0 kB]
    amazon-ebs: Get:31 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [106 kB]
    amazon-ebs: Get:32 http://security.ubuntu.com/ubuntu bionic-security/universe Translation-en [60.3 kB]
    amazon-ebs: Get:33 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [1440 B]
    amazon-ebs: Get:34 http://security.ubuntu.com/ubuntu bionic-security/multiverse Translation-en [996 B]
    amazon-ebs: Fetched 26.4 MB in 4s (6162 kB/s)
    amazon-ebs: Reading package lists...
    amazon-ebs: Reading package lists...
    amazon-ebs: Building dependency tree...
    amazon-ebs: Reading state information...
    amazon-ebs: The following additional packages will be installed:
    amazon-ebs:   fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0
    amazon-ebs:   libjpeg-turbo8 libjpeg8 libnginx-mod-http-geoip
    amazon-ebs:   libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
    amazon-ebs:   libnginx-mod-mail libnginx-mod-stream libtiff5 libwebp6 libxpm4 nginx-common
    amazon-ebs:   nginx-core
    amazon-ebs: Suggested packages:
    amazon-ebs:   libgd-tools fcgiwrap nginx-doc ssl-cert
    amazon-ebs: The following NEW packages will be installed:
    amazon-ebs:   fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0
    amazon-ebs:   libjpeg-turbo8 libjpeg8 libnginx-mod-http-geoip
    amazon-ebs:   libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
    amazon-ebs:   libnginx-mod-mail libnginx-mod-stream libtiff5 libwebp6 libxpm4 nginx
    amazon-ebs:   nginx-common nginx-core
    amazon-ebs: 0 upgraded, 18 newly installed, 0 to remove and 11 not upgraded.
    amazon-ebs: Need to get 2460 kB of archives.
    amazon-ebs: After this operation, 8194 kB of additional disk space will be used.
    amazon-ebs: Get:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libjpeg-turbo8 amd64 1.5.2-0ubuntu5.18.04.1 [110 kB]
    amazon-ebs: Get:2 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 fonts-dejavu-core all 2.37-1 [1041 kB]
    amazon-ebs: Get:3 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 fontconfig-config all 2.12.6-0ubuntu2 [55.8 kB]
    amazon-ebs: Get:4 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 libfontconfig1 amd64 2.12.6-0ubuntu2 [137 kB]
    amazon-ebs: Get:5 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 libjpeg8 amd64 8c-2ubuntu8 [2194 B]
    amazon-ebs: Get:6 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 libjbig0 amd64 2.1-3.1build1 [26.7 kB]
    amazon-ebs: Get:7 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 libtiff5 amd64 4.0.9-5 [152 kB]
    amazon-ebs: Get:8 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 libwebp6 amd64 0.6.1-2 [185 kB]
    amazon-ebs: Get:9 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic/main amd64 libxpm4 amd64 1:3.5.12-1 [34.0 kB]
    amazon-ebs: Get:10 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libgd3 amd64 2.2.5-4ubuntu0.2 [119 kB]
    amazon-ebs: Get:11 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 nginx-common all 1.14.0-0ubuntu1.2 [37.4 kB]
    amazon-ebs: Get:12 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libnginx-mod-http-geoip amd64 1.14.0-0ubuntu1.2 [11.2 kB]
    amazon-ebs: Get:13 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libnginx-mod-http-image-filter amd64 1.14.0-0ubuntu1.2 [14.5 kB]
    amazon-ebs: Get:14 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libnginx-mod-http-xslt-filter amd64 1.14.0-0ubuntu1.2 [13.0 kB]
    amazon-ebs: Get:15 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libnginx-mod-mail amd64 1.14.0-0ubuntu1.2 [41.8 kB]
    amazon-ebs: Get:16 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libnginx-mod-stream amd64 1.14.0-0ubuntu1.2 [63.6 kB]
    amazon-ebs: Get:17 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 nginx-core amd64 1.14.0-0ubuntu1.2 [413 kB]
    amazon-ebs: Get:18 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu bionic-updates/main amd64 nginx all 1.14.0-0ubuntu1.2 [3596 B]
    amazon-ebs: debconf: unable to initialize frontend: Dialog
    amazon-ebs: debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)
    amazon-ebs: debconf: falling back to frontend: Readline
    amazon-ebs: debconf: unable to initialize frontend: Readline
    amazon-ebs: debconf: (This frontend requires a controlling tty.)
    amazon-ebs: debconf: falling back to frontend: Teletype
    amazon-ebs: dpkg-preconfigure: unable to re-open stdin:
    amazon-ebs: Fetched 2460 kB in 0s (16.0 MB/s)
    amazon-ebs: Selecting previously unselected package libjpeg-turbo8:amd64.
    amazon-ebs: (Reading database ... 56545 files and directories currently installed.)
    amazon-ebs: Preparing to unpack .../00-libjpeg-turbo8_1.5.2-0ubuntu5.18.04.1_amd64.deb ...
    amazon-ebs: Unpacking libjpeg-turbo8:amd64 (1.5.2-0ubuntu5.18.04.1) ...
    amazon-ebs: Selecting previously unselected package fonts-dejavu-core.
    amazon-ebs: Preparing to unpack .../01-fonts-dejavu-core_2.37-1_all.deb ...
    amazon-ebs: Unpacking fonts-dejavu-core (2.37-1) ...
    amazon-ebs: Selecting previously unselected package fontconfig-config.
    amazon-ebs: Preparing to unpack .../02-fontconfig-config_2.12.6-0ubuntu2_all.deb ...
    amazon-ebs: Unpacking fontconfig-config (2.12.6-0ubuntu2) ...
    amazon-ebs: Selecting previously unselected package libfontconfig1:amd64.
    amazon-ebs: Preparing to unpack .../03-libfontconfig1_2.12.6-0ubuntu2_amd64.deb ...
    amazon-ebs: Unpacking libfontconfig1:amd64 (2.12.6-0ubuntu2) ...
    amazon-ebs: Selecting previously unselected package libjpeg8:amd64.
    amazon-ebs: Preparing to unpack .../04-libjpeg8_8c-2ubuntu8_amd64.deb ...
    amazon-ebs: Unpacking libjpeg8:amd64 (8c-2ubuntu8) ...
    amazon-ebs: Selecting previously unselected package libjbig0:amd64.
    amazon-ebs: Preparing to unpack .../05-libjbig0_2.1-3.1build1_amd64.deb ...
    amazon-ebs: Unpacking libjbig0:amd64 (2.1-3.1build1) ...
    amazon-ebs: Selecting previously unselected package libtiff5:amd64.
    amazon-ebs: Preparing to unpack .../06-libtiff5_4.0.9-5_amd64.deb ...
    amazon-ebs: Unpacking libtiff5:amd64 (4.0.9-5) ...
    amazon-ebs: Selecting previously unselected package libwebp6:amd64.
    amazon-ebs: Preparing to unpack .../07-libwebp6_0.6.1-2_amd64.deb ...
    amazon-ebs: Unpacking libwebp6:amd64 (0.6.1-2) ...
    amazon-ebs: Selecting previously unselected package libxpm4:amd64.
    amazon-ebs: Preparing to unpack .../08-libxpm4_1%3a3.5.12-1_amd64.deb ...
    amazon-ebs: Unpacking libxpm4:amd64 (1:3.5.12-1) ...
    amazon-ebs: Selecting previously unselected package libgd3:amd64.
    amazon-ebs: Preparing to unpack .../09-libgd3_2.2.5-4ubuntu0.2_amd64.deb ...
    amazon-ebs: Unpacking libgd3:amd64 (2.2.5-4ubuntu0.2) ...
    amazon-ebs: Selecting previously unselected package nginx-common.
    amazon-ebs: Preparing to unpack .../10-nginx-common_1.14.0-0ubuntu1.2_all.deb ...
    amazon-ebs: Unpacking nginx-common (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Selecting previously unselected package libnginx-mod-http-geoip.
    amazon-ebs: Preparing to unpack .../11-libnginx-mod-http-geoip_1.14.0-0ubuntu1.2_amd64.deb ...
    amazon-ebs: Unpacking libnginx-mod-http-geoip (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Selecting previously unselected package libnginx-mod-http-image-filter.
    amazon-ebs: Preparing to unpack .../12-libnginx-mod-http-image-filter_1.14.0-0ubuntu1.2_amd64.deb ...
    amazon-ebs: Unpacking libnginx-mod-http-image-filter (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Selecting previously unselected package libnginx-mod-http-xslt-filter.
    amazon-ebs: Preparing to unpack .../13-libnginx-mod-http-xslt-filter_1.14.0-0ubuntu1.2_amd64.deb ...
    amazon-ebs: Unpacking libnginx-mod-http-xslt-filter (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Selecting previously unselected package libnginx-mod-mail.
    amazon-ebs: Preparing to unpack .../14-libnginx-mod-mail_1.14.0-0ubuntu1.2_amd64.deb ...
    amazon-ebs: Unpacking libnginx-mod-mail (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Selecting previously unselected package libnginx-mod-stream.
    amazon-ebs: Preparing to unpack .../15-libnginx-mod-stream_1.14.0-0ubuntu1.2_amd64.deb ...
    amazon-ebs: Unpacking libnginx-mod-stream (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Selecting previously unselected package nginx-core.
    amazon-ebs: Preparing to unpack .../16-nginx-core_1.14.0-0ubuntu1.2_amd64.deb ...
    amazon-ebs: Unpacking nginx-core (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Selecting previously unselected package nginx.
    amazon-ebs: Preparing to unpack .../17-nginx_1.14.0-0ubuntu1.2_all.deb ...
    amazon-ebs: Unpacking nginx (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Processing triggers for ufw (0.35-5) ...
    amazon-ebs: Processing triggers for ureadahead (0.100.0-20) ...
    amazon-ebs: Setting up libjbig0:amd64 (2.1-3.1build1) ...
    amazon-ebs: Setting up fonts-dejavu-core (2.37-1) ...
    amazon-ebs: Setting up nginx-common (1.14.0-0ubuntu1.2) ...
    amazon-ebs: debconf: unable to initialize frontend: Dialog
    amazon-ebs: debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)
    amazon-ebs: debconf: falling back to frontend: Readline
    amazon-ebs: Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service.
    amazon-ebs: Setting up libjpeg-turbo8:amd64 (1.5.2-0ubuntu5.18.04.1) ...
    amazon-ebs: Processing triggers for libc-bin (2.27-3ubuntu1) ...
    amazon-ebs: Processing triggers for systemd (237-3ubuntu10.9) ...
    amazon-ebs: Setting up libnginx-mod-mail (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Setting up libxpm4:amd64 (1:3.5.12-1) ...
    amazon-ebs: Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
    amazon-ebs: Setting up libnginx-mod-http-xslt-filter (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Setting up libnginx-mod-http-geoip (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Setting up libwebp6:amd64 (0.6.1-2) ...
    amazon-ebs: Setting up libjpeg8:amd64 (8c-2ubuntu8) ...
    amazon-ebs: Setting up fontconfig-config (2.12.6-0ubuntu2) ...
    amazon-ebs: Setting up libnginx-mod-stream (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Setting up libtiff5:amd64 (4.0.9-5) ...
    amazon-ebs: Setting up libfontconfig1:amd64 (2.12.6-0ubuntu2) ...
    amazon-ebs: Setting up libgd3:amd64 (2.2.5-4ubuntu0.2) ...
    amazon-ebs: Setting up libnginx-mod-http-image-filter (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Setting up nginx-core (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Setting up nginx (1.14.0-0ubuntu1.2) ...
    amazon-ebs: Processing triggers for ureadahead (0.100.0-20) ...
    amazon-ebs: Processing triggers for ufw (0.35-5) ...
    amazon-ebs: Processing triggers for libc-bin (2.27-3ubuntu1) ...
==> amazon-ebs: Stopping the source instance...
    amazon-ebs: Stopping instance, attempt 1
==> amazon-ebs: Waiting for the instance to stop...
==> amazon-ebs: Creating unencrypted AMI packer-example 1544282532 from instance i-0c0c59321671f31a9
    amazon-ebs: AMI: ami-036f026bf22d796b9
==> amazon-ebs: Waiting for AMI to become ready...
==> amazon-ebs: Terminating the source AWS instance...
==> amazon-ebs: Cleaning up any extra volumes...
==> amazon-ebs: No volumes to clean up, skipping
==> amazon-ebs: Deleting temporary security group...
==> amazon-ebs: Deleting temporary keypair...
Build 'amazon-ebs' finished.

==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:
ap-northeast-1: ami-036f026bf22d796b9
```

お、なんかできたっぽいですね。

## nginx 接続確認

今作ったAMIを使用して、インスタンスを適当に上げてみましょう。
HTTP(80)が開いていればとりあえずアクセスできます。
で、やってみると・・・

![Welcome to nginx.png](https://qiita-image-store.s3.amazonaws.com/0/318450/af44a72b-e54a-ea06-4f2a-3dbce7a68056.png)

いけてますね。

## まとめ

工夫すれば、オリジナルのイメージが簡単に作れることがわかりました。
結構さくさく作れますので、遊んでみてください。
くれぐれも課金には注意です（笑）