そのインスタンスの初期設定cloud-initでできるかも

2021.05.11

この記事は公開されてから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以外でも使える

関連する記事

参考資料

cloud-init 公式
AWS EC2 起動時に Linux インスタンスでコマンドを実行する