Ubuntuのサーバー版イメージには最初からcloud-initがインストールされています。このcloud-initはクラウド上のインスタンスを立ち上げる際,
cloud-initの位置づけ
まずはcloud-initの位置づけから説明します。cloud-initそのものを知っている・
今世紀に入って
ただし,
従来,
「自動化できるものは自動化する」
Description: Init scripts for EC2 instances
EC2 instances need special scripts to run during initialisation
to get hold of ssh keys and to let the user run various scripts.
- ※1
- パッケージとして投入されたのは2009年の9月です。つまり9.
10のリリース直前です。Ubuntu Weekly Topicsの2009年10月16日号や2009年7月10日号にもあるように, 9. 10は 「Ubuntu Enterprise Cloud」 と題した 「クラウド向けとしてのUbuntuサーバーの機能」 を充実させている時期でした。この頃はまだUbuntuもEucalyptusをがんばっていたのです。
EC2には
- メタデータのpublic-keysを
「 /root/
」.ssh/ authorized_ keys に追加し, インスタンスが起動したらrootでsshログインできるようにする (※2)。 - ユーザーデータをそのまま
「 /tmp
」以下にコピーして実行する。
- ※2
- そう,
最初はrootのみsshログインできる設定だったのです。次のバージョンから 「ubuntu」 ユーザーに公開鍵が登録されるようになります。
その後,
当初はAmazon EC2専用のツールでしたが,
サーバーの構成管理と言えばAnsibleが定番です。cloud-initのできることはAnsibleとかぶる部分もあるものの,
- ※3
- Ubuntuサーバーの旧インストーラーとしても採用されていたDebian-Installerには
「preseeding」 という事前設定スクリプトによるインストール自動化機能が存在します。物理マシンへのインストール時のようにインストーラーを動かすのならpreseedingを使って初期セットアップが可能です (参考:第154回 さくらVPSへのネットブートインストールをPreseedingで自動化する)。しかしながらクラウドサービスで使用されるクラウドイメージは, インストーラーを実行せず, インストール済みのイメージを使うためpreseedingは使えません。また, Ubuntuサーバーの新しいインストーラーであるSubiquityもpreseedingに対応していません。
VagrantfileやDockerfileも機能的に近い存在です。設定済みのイメージファイルを作りたいならVagrantfile/
- ※4
- もちろん
「どれか一つのツールだけですべてを賄う」 との考えのもとにがんばることは否定しません。
cloud-initの仕組み
cloud-initは
「何らかの方法」
cloud-initはデータの取得方法をサービスごとの
メタデータについては大抵の場合クラウドサービスが自動的に付加します。cloud-initはメタデータ内部の情報
cloud-initの本体はユーザーデータになります。cloud-initは#cloud-config
」