Pakcer で GCP のイメージを作ってみるの巻

# Pakcer で GCP のイメージを作ってみるの巻

[Packer でイメージ作る最中に色々やってみる](https://qiita.com/okaru/items/6d21dcb39e7a38a45450) の GCP 版をやってみたいと思います。

## 前提条件

- GCP のサービスアカウントキーを packer と同じフォルダに `account.json` として置きます。
- サービスアカウントは、GCE と Storage に権限があれば大丈夫だと思います。
- gcloud CLI のインストールも必要ぽいです。

## では、やっていきます

```gcp.json
{
  "builders": [
    {
      "type": "googlecompute",
      "account_file": "account.json",
      "project_id": "<プロジェクトID>",
      "machine_type": "f1-micro",
      "source_image_family": "ubuntu-1804-lts",
      "region": "asia-northeast1",
      "zone": "asia-northeast1-b",
      "image_description": "Ubuntu Machine Image",
      "image_name": "ubuntu1804",
      "disk_size": 16,
      "disk_type": "pd-ssd",
      "ssh_username": "root"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "sleep 30",
        "apt-get update",
        "apt-get install -y nginx"
      ]
    }
  ]
}
```

ubuntu は 18.04 使ってます。
GCP 特有のもの以外は以前と同じです。

## やってみた

```
> ./packer validate gcp.json
Template validated successfully.
```

まぁ、問題ないですね。

```
> ./packer build gcp.json
googlecompute output will be in this color.

==> googlecompute: Checking image does not exist...
==> googlecompute: Creating temporary SSH key for instance...
==> googlecompute: Using image: ubuntu-1804-bionic-v20181203a
==> googlecompute: Creating instance...
    googlecompute: Loading zone: asia-northeast1-b
    googlecompute: Loading machine type: f1-micro
    googlecompute: Requesting instance creation...
    googlecompute: Waiting for creation operation to complete...
    googlecompute: Instance has been created!
==> googlecompute: Waiting for the instance to become running...
    googlecompute: IP: 104.198.118.161
==> googlecompute: Using ssh communicator to connect: 104.198.118.161
==> googlecompute: Waiting for SSH to become available...
==> googlecompute: Timeout waiting for SSH.
==> googlecompute: Deleting instance...
    googlecompute: Instance has been deleted!
==> googlecompute: Deleting disk...
    googlecompute: Disk has been deleted!
Build 'googlecompute' errored: Timeout waiting for SSH.

==> Some builds didn't complete successfully and had errors:
--> googlecompute: Timeout waiting for SSH.

==> Builds finished but no artifacts were created.
```

おや・・・失敗した。。。default ネットワークの SSH のポートの IP 制限してたの忘れてました。
気を取り直して・・・

```
> ./packer build gcp.json
googlecompute output will be in this color.

==> googlecompute: Checking image does not exist...
==> googlecompute: Creating temporary SSH key for instance...
==> googlecompute: Using image: ubuntu-1804-bionic-v20181203a
==> googlecompute: Creating instance...
    googlecompute: Loading zone: asia-northeast1-b
    googlecompute: Loading machine type: f1-micro
    googlecompute: Requesting instance creation...
    googlecompute: Waiting for creation operation to complete...
    googlecompute: Instance has been created!
==> googlecompute: Waiting for the instance to become running...
    googlecompute: IP: 35.187.211.90
==> googlecompute: Using ssh communicator to connect: 35.187.211.90
==> googlecompute: Waiting for SSH to become available...
==> googlecompute: Connected to SSH!
==> googlecompute: Provisioning with shell script: /tmp/packer-shell568665213
    googlecompute: Hit:1 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic InRelease
    googlecompute: Get:2 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
    googlecompute: Get:3 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
    googlecompute: Get:4 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/multiverse Sources [181 kB]
    googlecompute: Get:5 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/main Sources [829 kB]
    googlecompute: Get:6 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/restricted Sources [5324 B]
    googlecompute: Get:7 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/universe Sources [9051 kB]
    googlecompute: Get:8 http://security.ubuntu.com/ubuntu bionic-security InRelease [83.2 kB]
    googlecompute: Get:9 http://archive.canonical.com/ubuntu bionic InRelease [10.2 kB]
    googlecompute: Get:10 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [8570 kB]
    googlecompute: Get:11 http://archive.canonical.com/ubuntu bionic/partner amd64 Packages [2308 B]
    googlecompute: Get:12 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/universe Translation-en [4941 kB]
    googlecompute: Get:13 http://archive.canonical.com/ubuntu bionic/partner Translation-en [1272 B]
    googlecompute: Get:14 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [151 kB]
    googlecompute: Get:15 http://security.ubuntu.com/ubuntu bionic-security/main Sources [66.7 kB]
    googlecompute: Get:16 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/multiverse Translation-en [108 kB]
    googlecompute: Get:17 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/universe Sources [121 kB]
    googlecompute: Get:18 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/restricted Sources [2064 B]
    googlecompute: Get:19 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/multiverse Sources [3824 B]
    googlecompute: Get:20 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main Sources [223 kB]
    googlecompute: Get:21 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [461 kB]
    googlecompute: Get:22 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main Translation-en [173 kB]
    googlecompute: Get:23 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [705 kB]
    googlecompute: Get:24 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/universe Translation-en [171 kB]
    googlecompute: Get:25 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [6372 B]
    googlecompute: Get:26 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/multiverse Translation-en [3356 B]
    googlecompute: Get:27 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-backports/universe Sources [2068 B]
    googlecompute: Get:28 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [3468 B]
    googlecompute: Get:29 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-backports/universe Translation-en [1604 B]
    googlecompute: Get:30 http://security.ubuntu.com/ubuntu bionic-security/universe Sources [28.2 kB]
    googlecompute: Get:31 http://security.ubuntu.com/ubuntu bionic-security/multiverse Sources [1336 B]
    googlecompute: Get:32 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [236 kB]
    googlecompute: Get:33 http://security.ubuntu.com/ubuntu bionic-security/main Translation-en [88.9 kB]
    googlecompute: Get:34 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [109 kB]
    googlecompute: Get:35 http://security.ubuntu.com/ubuntu bionic-security/universe Translation-en [62.0 kB]
    googlecompute: Get:36 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [1440 B]
    googlecompute: Get:37 http://security.ubuntu.com/ubuntu bionic-security/multiverse Translation-en [996 B]
    googlecompute: Fetched 26.6 MB in 6s (4388 kB/s)
    googlecompute: Reading package lists...
    googlecompute: Reading package lists...
    googlecompute: Building dependency tree...
    googlecompute: Reading state information...
    googlecompute: The following package was automatically installed and is no longer required:
    googlecompute:   grub-pc-bin
    googlecompute: Use 'apt autoremove' to remove it.
    googlecompute: The following additional packages will be installed:
    googlecompute:   fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0
    googlecompute:   libjpeg-turbo8 libjpeg8 libnginx-mod-http-geoip
    googlecompute:   libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
    googlecompute:   libnginx-mod-mail libnginx-mod-stream libtiff5 libwebp6 libxpm4 nginx-common
    googlecompute:   nginx-core
    googlecompute: Suggested packages:
    googlecompute:   libgd-tools fcgiwrap nginx-doc ssl-cert
    googlecompute: The following NEW packages will be installed:
    googlecompute:   fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0
    googlecompute:   libjpeg-turbo8 libjpeg8 libnginx-mod-http-geoip
    googlecompute:   libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
    googlecompute:   libnginx-mod-mail libnginx-mod-stream libtiff5 libwebp6 libxpm4 nginx
    googlecompute:   nginx-common nginx-core
    googlecompute: 0 upgraded, 18 newly installed, 0 to remove and 24 not upgraded.
    googlecompute: Need to get 2460 kB of archives.
    googlecompute: After this operation, 8194 kB of additional disk space will be used.
    googlecompute: Get:1 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libjpeg-turbo8 amd64 1.5.2-0ubuntu5.18.04.1 [110 kB]
    googlecompute: Get:2 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 fonts-dejavu-core all 2.37-1 [1041 kB]
    googlecompute: Get:3 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 fontconfig-config all 2.12.6-0ubuntu2 [55.8 kB]
    googlecompute: Get:4 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 libfontconfig1 amd64 2.12.6-0ubuntu2 [137 kB]
    googlecompute: Get:5 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 libjpeg8 amd64 8c-2ubuntu8 [2194 B]
    googlecompute: Get:6 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 libjbig0 amd64 2.1-3.1build1 [26.7 kB]
    googlecompute: Get:7 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 libtiff5 amd64 4.0.9-5 [152 kB]
    googlecompute: Get:8 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 libwebp6 amd64 0.6.1-2 [185 kB]
    googlecompute: Get:9 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic/main amd64 libxpm4 amd64 1:3.5.12-1 [34.0 kB]
    googlecompute: Get:10 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libgd3 amd64 2.2.5-4ubuntu0.2 [119 kB]
    googlecompute: Get:11 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 nginx-common all 1.14.0-0ubuntu1.2 [37.4 kB]
    googlecompute: Get:12 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libnginx-mod-http-geoip amd64 1.14.0-0ubuntu1.2 [11.2 kB]
    googlecompute: Get:13 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libnginx-mod-http-image-filter amd64 1.14.0-0ubuntu1.2 [14.5 kB]
    googlecompute: Get:14 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libnginx-mod-http-xslt-filter amd64 1.14.0-0ubuntu1.2 [13.0 kB]
    googlecompute: Get:15 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libnginx-mod-mail amd64 1.14.0-0ubuntu1.2 [41.8 kB]
    googlecompute: Get:16 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libnginx-mod-stream amd64 1.14.0-0ubuntu1.2 [63.6 kB]
    googlecompute: Get:17 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 nginx-core amd64 1.14.0-0ubuntu1.2 [413 kB]
    googlecompute: Get:18 http://asia-northeast1.gce.archive.ubuntu.com/ubuntu bionic-updates/main amd64 nginx all 1.14.0-0ubuntu1.2 [3596 B]
    googlecompute: debconf: unable to initialize frontend: Dialog
    googlecompute: debconf: (TERM is not set, so the dialog frontend is not usable.)
    googlecompute: debconf: falling back to frontend: Readline
    googlecompute: debconf: unable to initialize frontend: Readline
    googlecompute: debconf: (This frontend requires a controlling tty.)
    googlecompute: debconf: falling back to frontend: Teletype
    googlecompute: dpkg-preconfigure: unable to re-open stdin:
    googlecompute: Fetched 2460 kB in 1s (1684 kB/s)
    googlecompute: Selecting previously unselected package libjpeg-turbo8:amd64.
    googlecompute: (Reading database ... 60716 files and directories currently installed.)
    googlecompute: Preparing to unpack .../00-libjpeg-turbo8_1.5.2-0ubuntu5.18.04.1_amd64.deb ...
    googlecompute: Unpacking libjpeg-turbo8:amd64 (1.5.2-0ubuntu5.18.04.1) ...
    googlecompute: Selecting previously unselected package fonts-dejavu-core.
    googlecompute: Preparing to unpack .../01-fonts-dejavu-core_2.37-1_all.deb ...
    googlecompute: Unpacking fonts-dejavu-core (2.37-1) ...
    googlecompute: Selecting previously unselected package fontconfig-config.
    googlecompute: Preparing to unpack .../02-fontconfig-config_2.12.6-0ubuntu2_all.deb ...
    googlecompute: Unpacking fontconfig-config (2.12.6-0ubuntu2) ...
    googlecompute: Selecting previously unselected package libfontconfig1:amd64.
    googlecompute: Preparing to unpack .../03-libfontconfig1_2.12.6-0ubuntu2_amd64.deb ...
    googlecompute: Unpacking libfontconfig1:amd64 (2.12.6-0ubuntu2) ...
    googlecompute: Selecting previously unselected package libjpeg8:amd64.
    googlecompute: Preparing to unpack .../04-libjpeg8_8c-2ubuntu8_amd64.deb ...
    googlecompute: Unpacking libjpeg8:amd64 (8c-2ubuntu8) ...
    googlecompute: Selecting previously unselected package libjbig0:amd64.
    googlecompute: Preparing to unpack .../05-libjbig0_2.1-3.1build1_amd64.deb ...
    googlecompute: Unpacking libjbig0:amd64 (2.1-3.1build1) ...
    googlecompute: Selecting previously unselected package libtiff5:amd64.
    googlecompute: Preparing to unpack .../06-libtiff5_4.0.9-5_amd64.deb ...
    googlecompute: Unpacking libtiff5:amd64 (4.0.9-5) ...
    googlecompute: Selecting previously unselected package libwebp6:amd64.
    googlecompute: Preparing to unpack .../07-libwebp6_0.6.1-2_amd64.deb ...
    googlecompute: Unpacking libwebp6:amd64 (0.6.1-2) ...
    googlecompute: Selecting previously unselected package libxpm4:amd64.
    googlecompute: Preparing to unpack .../08-libxpm4_1%3a3.5.12-1_amd64.deb ...
    googlecompute: Unpacking libxpm4:amd64 (1:3.5.12-1) ...
    googlecompute: Selecting previously unselected package libgd3:amd64.
    googlecompute: Preparing to unpack .../09-libgd3_2.2.5-4ubuntu0.2_amd64.deb ...
    googlecompute: Unpacking libgd3:amd64 (2.2.5-4ubuntu0.2) ...
    googlecompute: Selecting previously unselected package nginx-common.
    googlecompute: Preparing to unpack .../10-nginx-common_1.14.0-0ubuntu1.2_all.deb ...
    googlecompute: Unpacking nginx-common (1.14.0-0ubuntu1.2) ...
    googlecompute: Selecting previously unselected package libnginx-mod-http-geoip.
    googlecompute: Preparing to unpack .../11-libnginx-mod-http-geoip_1.14.0-0ubuntu1.2_amd64.deb ...
    googlecompute: Unpacking libnginx-mod-http-geoip (1.14.0-0ubuntu1.2) ...
    googlecompute: Selecting previously unselected package libnginx-mod-http-image-filter.
    googlecompute: Preparing to unpack .../12-libnginx-mod-http-image-filter_1.14.0-0ubuntu1.2_amd64.deb ...
    googlecompute: Unpacking libnginx-mod-http-image-filter (1.14.0-0ubuntu1.2) ...
    googlecompute: Selecting previously unselected package libnginx-mod-http-xslt-filter.
    googlecompute: Preparing to unpack .../13-libnginx-mod-http-xslt-filter_1.14.0-0ubuntu1.2_amd64.deb ...
    googlecompute: Unpacking libnginx-mod-http-xslt-filter (1.14.0-0ubuntu1.2) ...
    googlecompute: Selecting previously unselected package libnginx-mod-mail.
    googlecompute: Preparing to unpack .../14-libnginx-mod-mail_1.14.0-0ubuntu1.2_amd64.deb ...
    googlecompute: Unpacking libnginx-mod-mail (1.14.0-0ubuntu1.2) ...
    googlecompute: Selecting previously unselected package libnginx-mod-stream.
    googlecompute: Preparing to unpack .../15-libnginx-mod-stream_1.14.0-0ubuntu1.2_amd64.deb ...
    googlecompute: Unpacking libnginx-mod-stream (1.14.0-0ubuntu1.2) ...
    googlecompute: Selecting previously unselected package nginx-core.
    googlecompute: Preparing to unpack .../16-nginx-core_1.14.0-0ubuntu1.2_amd64.deb ...
    googlecompute: Unpacking nginx-core (1.14.0-0ubuntu1.2) ...
    googlecompute: Selecting previously unselected package nginx.
    googlecompute: Preparing to unpack .../17-nginx_1.14.0-0ubuntu1.2_all.deb ...
    googlecompute: Unpacking nginx (1.14.0-0ubuntu1.2) ...
    googlecompute: Processing triggers for ufw (0.35-5) ...
    googlecompute: Processing triggers for ureadahead (0.100.0-20) ...
    googlecompute: Setting up libjbig0:amd64 (2.1-3.1build1) ...
    googlecompute: Setting up fonts-dejavu-core (2.37-1) ...
    googlecompute: Setting up nginx-common (1.14.0-0ubuntu1.2) ...
    googlecompute: debconf: unable to initialize frontend: Dialog
    googlecompute: debconf: (TERM is not set, so the dialog frontend is not usable.)
    googlecompute: debconf: falling back to frontend: Readline
    googlecompute: Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service.
    googlecompute: Setting up libjpeg-turbo8:amd64 (1.5.2-0ubuntu5.18.04.1) ...
    googlecompute: Processing triggers for libc-bin (2.27-3ubuntu1) ...
    googlecompute: Processing triggers for systemd (237-3ubuntu10.9) ...
    googlecompute: Setting up libnginx-mod-mail (1.14.0-0ubuntu1.2) ...
    googlecompute: Setting up libxpm4:amd64 (1:3.5.12-1) ...
    googlecompute: Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
    googlecompute: Setting up libnginx-mod-http-xslt-filter (1.14.0-0ubuntu1.2) ...
    googlecompute: Setting up libnginx-mod-http-geoip (1.14.0-0ubuntu1.2) ...
    googlecompute: Setting up libwebp6:amd64 (0.6.1-2) ...
    googlecompute: Setting up libjpeg8:amd64 (8c-2ubuntu8) ...
    googlecompute: Setting up fontconfig-config (2.12.6-0ubuntu2) ...
    googlecompute: Setting up libnginx-mod-stream (1.14.0-0ubuntu1.2) ...
    googlecompute: Setting up libtiff5:amd64 (4.0.9-5) ...
    googlecompute: Setting up libfontconfig1:amd64 (2.12.6-0ubuntu2) ...
    googlecompute: Setting up libgd3:amd64 (2.2.5-4ubuntu0.2) ...
    googlecompute: Setting up libnginx-mod-http-image-filter (1.14.0-0ubuntu1.2) ...
    googlecompute: Setting up nginx-core (1.14.0-0ubuntu1.2) ...
    googlecompute: Setting up nginx (1.14.0-0ubuntu1.2) ...
    googlecompute: Processing triggers for ureadahead (0.100.0-20) ...
    googlecompute: Processing triggers for ufw (0.35-5) ...
    googlecompute: Processing triggers for libc-bin (2.27-3ubuntu1) ...
==> googlecompute: Deleting instance...
    googlecompute: Instance has been deleted!
==> googlecompute: Creating image...
==> googlecompute: Deleting disk...
    googlecompute: Disk has been deleted!
Build 'googlecompute' finished.

==> Builds finished. The artifacts of successful builds are:
--> googlecompute: A disk image was created: ubuntu1804
```

今度こそいけましたね。
イメージも作成されてます。

## nginx 接続確認

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

![Screenshot_2018-12-20 Welcome to nginx .png](https://qiita-image-store.s3.amazonaws.com/0/318450/e556bb61-449c-2017-ecea-2cfa1bdaf90a.png)


いけてますね。

## まとめ

GCP のイメージ作成もそれほど難しくないですね。
CicleCI なんかで自動化して作成されるようにしていきたいですね。