Pakcer で GCP のイメージを作ってみるの巻
Packer でイメージ作る最中に色々やってみる の 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)が開いていればとりあえずアクセスできます。
で、やってみると・・・
いけてますね。
まとめ
GCP のイメージ作成もそれほど難しくないですね。
CicleCI なんかで自動化して作成されるようにしていきたいですね。