こんにちは、id:a-oonoです。
当ブログではオラクルクラウドを主で扱っているので、Oracle Cloud Infrastructure (OCI) に対応している自動化ツールである Packer を紹介したいと思います。
Packerは定義ファイルをもとにマシンイメージを作成するツールです。 AWSのAMI作成等では標準的なツールなのですが、つい先日、OCIの Compute Custom Image 1作成にも利用できる点に気が付きましたので皆さんに是非紹介したいと思います。
記事の到達目標
- Packerを用いてOCIの Custom Imageを作成します。
前提
- packerの導入が必要となります。GoのバイナリですのでWindows, Linux, Macの各種で動作します。公式の導入手順2をご確認ください。この記事では version 1.3.3で動作確認しています。
- oci cliが導入され、設定済みであること。
- packerで用いるパラメータの準備。
$ oci compute image list --compartment-id xxxxxx
手順
- packerで用いるbuild用のファイル
packer-example.json
を準備します。
今回は、base_image_ocid
にOCI公式イメージ(Ubuntu 18.04 LTS)を指定してみました。
{ "builders": [{ "availability_domain": "dArW:US-ASHBURN-AD-2", "base_image_ocid": "ocid1.image.oc1..aaaaaxxx", "compartment_ocid": "ocid1.compartment.xxx..aaaxxxx", "image_name": "ExampleImage", "shape": "VM.Standard.E2.1", "ssh_username": "ubuntu", "subnet_ocid": "ocid1.subnet.oc1.iad.aaaaaxxxxx", "type": "oracle-oci" }], "provisioners": [{ "type": "shell", "inline": [ "sudo apt -y install apache2" ] }] }
packer build
コマンドに先ほどのファイルを引数に渡します。
$ packer build packer-example.json oracle-oci output will be in this color. ==> oracle-oci: Creating temporary ssh key for instance... ==> oracle-oci: Creating instance... ==> oracle-oci: Created instance (ocid1.instance.oc1.ixxx). ~ 省略 ~ Build 'oracle-oci' finished. ==> Builds finished. The artifacts of successful builds are: --> oracle-oci: An image was created: 'ExampleImage' (OCID: ocid1.image.oc1.xxxs) in region 'us-ashburn-1'
最後にCustom Image ExampleImage
のocidが出力されます。 また、下図のようにCustom Imageが作成されていることも確認できます。。
動作確認
実際に、Custom ImageからComputeインスタンスをデプロイしてみると、provisioners
で記載したpackegeが導入されていることが確認できます。
上記のjsonに指定している、apache2(httpd)が導入されていることが確認できました。
ubuntu@ubuntucustomimage:~$ sudo systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d mqapache2-systemd.conf Active: active (running) since Tue 2019-02-12 04:54:11 UTC; 2min 43s ago Main PID: 1089 (apache2) Tasks: 55 (limit: 4915) CGroup: /system.slice/apache2.service tq1089 /usr/sbin/apache2 -k start tq1090 /usr/sbin/apache2 -k start mq1091 /usr/sbin/apache2 -k start Feb 12 04:54:11 ubuntucustomimage systemd[1]: Starting The Apache HTTP Server... Feb 12 04:54:11 ubuntucustomimage apachectl[1020]: AH00558: apache2: Could not reliably determine the server's fully qua Feb 12 04:54:11 ubuntucustomimage systemd[1]: Started The Apache HTTP Server.
発展的な課題として、セキュリティパッチを更新したイメージを定期的に自動作成したり、provisionersでansibleを利用するなどできそうです。
以上、Packer でCustom Imageを作成する方法を紹介させて頂きました。