この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
cloud-initとは
cloud-initはマシンの初期設定を自動で行うためのツールです。 これをつかえば、sshの共有鍵の設定、タイムゾーン、パッケージのインストールなどを行うことができます。 yamlで必要な設定を宣言すれば、あとは自動で設定してくれるので便利です。 実はEC2はインスタンスの起動時にcloud-initを実行してユーザーの作成などの初期設定を行っています。 AWS以外のクラウドでも利用でき、様々なLinuxディストリビューションで利用できます。
EC2で使ってみる
EC2ではインスタンスの起動時にユーザーデータとしてシェルスクリプトを渡して実行することができますが、cloud-initファイルも実行することができます。 以下ではApacheサーバーのインストールをcloud-initを使用してやってみましょう。 使用したイメージはAmazon Linux 2 64bit x86です。
#cloud-config
repo_update: true
repo_upgrade: all
packages:
- httpd
runcmd:
- systemctl start httpd.service
- systemctl enable httpd.service
1行目の#cloud-config
は単なるコメントではなくcloud-initの設定ファイルとしてこれを使用するために必要です。
他にできること
個人的に気になったものをいくつか上げておきます。他にもたくさんあるので調べてみてください。 ChefやPuppetを呼び出すこともできるみたいです。 ここで見るのがわかりやすいかもしれません。
ファイルの書き込み
write_files:
- content: |
0 * * * * root some_command
path: /etc/crontab
append: true
タイムゾーンの設定
timezone: Asia/Tokyo
うまくいかない時
EC2の場合、以下のパスに実行時のログが出るので確認してみてください。
cloud-initの実行ログ
less /var/log/cloud-init-output.log
まとめ
- cloud-initは初期設定を行うツール
- AWS以外でも使える