今月、私たちは非常にエキサイティングな Canonicalとのパートナーシップ(Ubuntuのメーカー)を発表しました。何よりも、このパートナーシップの主な要素は、CloudSigmaクラウドとUbuntu間での完全なCloudInitサポートの導入です。
CloudInitの紹介
CloudInitに馴染みがない方のために説明すると、これはクラウドサーバーをブートストラップするための業界標準です。明確に言うと、シンプルな DSL を使用している場合、最初の起動時にタスクを簡単に実行できます。また、CloudInitはUbuntuだけに限定されないことも指摘しておく価値があります。現在では、ほとんどの最新のLinuxディストリビューションでCloudInitがサポートされています(ただし、サポートされているクラウドは異なります)。
CloudInitを始める前に、CloudInitがプロビジョニングのエコシステムにおいてどのような位置づけにあるかを理解することが重要です。CloudInitをスタンドアロンのプロビジョニングシステムとして実行することも可能ですが、Ansible、Chef、Puppet、Saltなどの別のプロビジョニングシステムと組み合わせて使用するのが一般的です。その場合、単にCloudInitを使用して、新しいサーバーをプロビジョニングシステムが引き継げる状態にするだけです。個人的には、CloudInitをAnsibleと組み合わせて使用することがよくあります。
CloudSigmaでのCloudInitの使用
CloudSigmaでのCloudInitの使用は非常に簡単です。
Ubuntu 14.04サーバーでCloudInitを使用するには、次の手順を実行します:
-
- ドライブをクローンする マーケットプレイスの “Ubuntu 14.04 Cloud Image” (現在、CloudInitが完全にサポートされている唯一のドライブです)。クローンしたドライブを希望のサイズにリサイズしてください。最初の起動時にファイルシステムが自動的に拡張されます。
- 新しいサーバーを作成します。
- サーバーが作成されると、サーバーのステータスの下にCloudInitボタンが表示されます。

-
- このボタンをクリックすると、次のダイアログが表示されます。

- ここにCloudInitデータを貼り付けて、‘Activate’を押すだけです。
- サーバーを起動すると、最初の起動時にスクリプトが実行されます。
CloudInitでSSHキーをインストールする
これで、私たちのクラウドでCloudInitを使用する方法がわかりましたので、この新しい知識を活かして、2つのSSHキーをインストールしてみましょう。使用する2つの架空の公開SSHキーは、‘ssh-rsa AAA[…] user1@host‘ と ‘ssh-rsa AAA[…] user2@host‘ です。(SSHキーの生成に関する詳細については、Githubのこちらのページをご覧ください。)
Ubuntu Cloud Imagesでは、デフォルトのユーザー名は‘ubuntu’です。したがって、キーはそのユーザーアカウントにインストールされます。
これに対するCloudInitの設定は次のようになります:
[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]
注意してください スペースが重要です。‘-‘の前に2つのスペースがあります。1つしか入力しない場合、サーバーに読み込まれない可能性があります。
CloudInit設定を保存してサーバーを起動すると、‘ubuntu’ユーザーを使用してサーバーにSSH接続できるようになります:
[bash light="true"]
$ ssh ubuntu@aaa.bbb.ccc.ddd
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Sun Oct 19 21:51:54 UTC 2014
System load: 0.0 Users logged in: 0
Usage of /: 77.4% of 39.34GB IP address for eth0: aaa.bbb.ccc.ddd
Memory usage: 26%
Swap usage: 0%
Processes: 113
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
[...]
ubuntu@myserver:~$
[/bash]
CloudInitでシステムアップデートをインストールする
CloudInitで簡単に実現できるもう1つの非常に便利な機能は、最初の起動時にシステムアップデートを実行することです。ディスクイメージは頻繁に更新していますが、システムが最新であることを確認するために、追加の予防策を講じることをお勧めします。
最初の起動時にシステムアップデートをインストールするには、以下を追加します:
[ruby]
#cloud-config
apt_update: true
apt_upgrade: true
[/ruby]
また、‘package_update’ という同様のオプションがあることにも気づくかもしれません。これは Ubuntu における ‘apt_update’ のディストリビューションに依存しないエイリアスです。
また、以下で説明する ‘packages’ が設定されている場合、デフォルトで ‘apt_update’ は true に設定されますが、より明示的にするために上記に追加しています。
CloudInit でパッケージをインストールする
システムをブートストラップするための基本的な部分の1つは、起動時にパッケージをインストールできることです。幸いなことに、CloudInit を使えばこれも簡単です。必要なのは、‘packages’ の下にインストールしたいパッケージのリストを指定することだけです。たとえば、‘python-pip’、‘fail2ban’、‘vim’ をインストールしたい場合は、次のようになります。
[ruby]
#cloud-config
packages:
- python-pip
- fail2ban
- vim
[/ruby]
繰り返しになりますが、ご注意ください スペースが重要であることに注意してください。‘-‘ の前には2つのスペースがあります。
CloudInit を使用したホスト名の設定
新しいサーバーをプロビジョニングするときに、そのホスト名も設定したい場合があります。
[ruby]
#cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]
CloudInit を使用して初回起動時にコマンドを実行する
サーバーでより高度なことを行っている場合、初回起動時に実行する必要があるコマンドがある可能性があります。
ここで ‘runcmd’ と ‘bootcmd’ の出番です。これらは両方とも、初回起動時にコマンドを実行できるようにします。違いは、‘bootcmd’ が ‘runcmd’ よりも起動プロセスの早い段階で実行される点です。
これらのコマンドのいずれかを使用するには、CloudInit に以下を追加します。
[ruby]
#cloud-config
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]
構成管理ツールで CloudInit を使用する
最後に、より洗練されたクラウドユーザーであれば、おそらく何らかの構成管理ツールを使用しているでしょう。幸いなことに、CloudInit はこれに対応しています。ただし、多くの変数があるため、カバーするにはかなり複雑なトピックです。
そこで、正しい方向性を示すのに役立ついくつかの例を以下に示します。
複数の要素を結合する方法
YAML 形式のファイルに慣れていない方にとって、複数の CloudInit 要素を連結する方法はすぐには分からないかもしれません。しかし、これは簡単です。最初の行に ‘#cloud-config‘。その後は、単に設定を追加するだけです。
たとえば、上記のすべての例を1つの設定にまとめると、次のようになります。
[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
apt_update: true
apt_upgrade: true
packages:
- python-pip
- fail2ban
- vim
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]
追加のリソース
この記事では、CloudInit でできることのほんの一部を紹介したにすぎません。学ぶためにできることは他にもたくさんあります。たとえば、ユーザーとグループの作成, ディスクへのファイルの書き出し や、完了時の URL の呼び出し (他のシステムへの通知用)などです。
CloudInit についてさらに詳しく知りたい場合は、以下のソースをお勧めします。
- 公式 CloudInit ドキュメント
- Ubuntu の CloudInit ガイド
- RedHat の CloudInit ドキュメント
- Ubuntu の CloudInit サンプルライブラリ
コメント
コメントはまだありません。最初のコメントを投稿しましょう。