OCI Computeでcloud init (ユーザーデータ) を利用してInstanceを作成する

id:aoonoです。OCI Computeでcloud-initのユーザーデータの利用法についてオラクルさんで動画を公開していたので当ブログで試してみた内容を紹介していきたいと思います。

cloud-initはAWS始め、Oracle Cloud等のインスタンス構築で利用される自動設定スクリプトです。

OSイメージを自作するまでではないが、Computeインスタンスを初期設定したい場合に利用すると便利な機能です。

この記事の到達目標

今回の記事では、OCI Computeでcloud-init(ユーザーデータ)を用いる方法を簡単に解説します。

素のOracle公式OSイメージを基に、 ユーザーデータに環境設定用のシェルスクリプトを指定することでhttpdサーバーをセットアップします。

前提

作成するインスタンスは

  • CentOSのイメージを用います。
  • グローバルIPを割り振ります。
  • インスタンスを配置するサブネットのSecurity Listに httpプロトコルのルールを追加しておきます。

インスタンス作成手順

1. インスタンスを作成します。

Menu -> Compute -> InstancesからCreate Instanceをクリックします。

f:id:a-oono:20181017200424p:plain

2. インスタンスのパラメータ設定

IMAGE OPERATING SYSTEMをCentOS7とします。

f:id:a-oono:20181017185031p:plain

ユーザーデータの入力欄は SSH KEYSの設定箇所の下にShow Advancec Optionのリンクがあるので、これをクリックすると、表示されます。

f:id:a-oono:20181017191130p:plain

下図のように、ユーザーデータの入力欄が表示されます。

PASTE CLOUD-INIT SCRIPTにチェックを入れます。

f:id:a-oono:20181017191011p:plain

ユーザーデータのスクリプトを設定します。

f:id:a-oono:20181017191519p:plain

今回のユーザーデータは以下の内容を設定しました。

#!/bin/bash

sudo yum update -y 
sudo yum install -y httpd
sudo systemctl enable httpd.service
sudo firewall-offline-cmd --zone=public --add-service=http

sudo echo "<html><body>Hello world</body></html>" >> /var/www/html/index.html
sudo reboot

上記のスクリプトでは、以下の内容を実施しています。

  1. httpdを導入し、サービスの自動起動を設定
  2. firewalld に httpd のルールを追加
  3. /var/www/html/index.html にテストコンテンツを配置
  4. リブート

3. ユーザーデータを設定したインスタンスのデプロイ

その他の箇所は、任意で設定しインスタンスを作成してください。

f:id:a-oono:20181017192038p:plain

動作確認

インスタンスの作成後、 ユーザーデータで指定したスクリプトが正常に走るまで、数分時間がかかります。

f:id:a-oono:20181017192309p:plain

今回作成したインスタンスのユーザーのスクリプトが走り切りリブートまで完了後、作成したインスタンスのグローバルアドレスにブラウザからアクセスします。

すると、Webページが表示されることが確認できます。

f:id:a-oono:20181017192555p:plain

Webページが表示されないような場合は、ユーザーデータが走り切るまで、時間を置いて再度アクセスしてみてください。

最後に

ユーザーデータを利用すること自体はComputeに元々あった機能ですが、マニュアルを参照しても特に目立った記載がなかったので、筆者は今までその存在に気が付きませんでした。

今回、OCI Computeでも利用できると知ったので後日、cloud-initスクリプトを利用したりTerraformで利用するなど、より詳細な使用方法を解説したいと考えています。

参考文献

Use cloud-init to Launch a Linux Instance on Oracle Cloud Infrastructure