■前提
・YAML(ヤムル)表記。
・コメントは#
・マイナス記号から始まるものは、YAML表記のリスト(=配列)を意味する。
■cloud.cfgで指定されている複数モジュールの実行タイミングについて
以下の順番で実行される。# systemd-analyze plot > /tmp/analyze.svgで確認済み。
1.cloud_init_moudles (cloud-init-local.service → cloud-init.service、)
2.cloud_config_modules (cloud-config.service)
3.cloud_final_modules (cloud-final.service)
■Systemdとの統合
cloud-init は4個の systemd サービスと1個の systemd ターゲットを提供する。
サービスとターゲットは以下の順番で起動するように依存関係が構築される。
【1.cloud-init-local.service】
起動タイミング: 可能な限り/が読み書きされた時点
ブロック動作: ネットワークブロック
マウントされたファイルシステムが立ち上がっていることを要求するだけ。cloud-init init --local を実行する。
【2.cloud-init.service】
起動タイミング: ローカルステージおよび構成されたネットワークが起動した後
ブロック動作: できるだけ多くの残りのブート動作
ネットワークが起動することを要求し、cloud-init init (cloud_init_modules)を実行する。
【X.cloud-config.target】
cloud-config の起動イベントに反応して cloud-config が利用できるようになったことを第三者に伝えます。
【3.cloud-config.service】
起動タイミング: ネットワークの後。
ブロック動作: 何もしない。
cloud-init modules --mode=config (cloud_config_modules)を実行する。
【4.cloud-final.service】
起動タイミング: ブートの最後。従来のrc.local と同等。
ブロック動作: 何もしない。
cloud-init modules --mode=final(cloud_final_modules) を実行する。
具体的には下記を実行する。
・パッケージのインストール
・構成管理プラグイン(chef等)
・ユーザスクリプト
■設定例 ※印以降は説明書き
# cat cloud.cfg
users:
- default ※ここをdefault にすることで、下記の default_user:欄 の設定が有効化する。
※個別にユーザ設定を行いたい場合には、以下URLを参照し、パラメータを挿入すること。
disable_root: 1 ※sshでのrootでのログインを無効にする
ssh_pwauth: 0 ※sshのパスワードログインを無効化する。
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2'] ※mountsを設定(fstabを設定するエントリ)するときのデフォルト。
resize_rootfs_tmp: /dev ※/devが存在しない場合、ディレクトリを作成する。
ssh_deletekeys: 0 ※/etc/ssh/ssh_host_*key* を削除
ssh_genkeytypes: ~ ※ssh-keygen -t で利用するキータイプ(rsa,dsa,ecdsa)を指定
syslog_fix_perms: ~ ※/var/log/cloud-init.logのユーザ:グループを指定
cloud_init_modules:
- migrator
- bootcmd
- write-files
- growpart
- resizefs
- set_hostname
- update_hostname
- update_etc_hosts
- rsyslog
- users-groups
- ssh
cloud_config_modules:
- mounts
- locale
- set-passwords
- rh_subscription
- yum-add-repo
- package-update-upgrade-install
- timezone
- puppet
- chef
- salt-minion
- mcollective
- disable-ec2-metadata
- runcmd
cloud_final_modules:
- rightscale_userdata
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- ssh-authkey-fingerprints
- keys-to-console
- phone-home
- final-message
- power-state-change
system_info:
default_user: ※default_user ハッシュ
name: ec2-user ※デフォルトユーザの名前をec2-userにする。
lock_passwd: true ※デフォルトユーザのパスワードをロックする。ロックすることでSSH鍵のみのログインを許可。
gecos: Cloud User
groups: [wheel, adm, systemd-journal] ※ec2-user が所属するグループをし知恵
sudo: ["ALL=(ALL) NOPASSWD:ALL"] ※/etc/sudoers ファイルの内容を記載。パスワードなしでsudo実行可能。
shell: /bin/bash ※デフォルトユーザのシェルを/bin/bash にする。
distro: rhel
paths:
cloud_dir: /var/lib/cloud
templates_dir: /etc/cloud/templates
ssh_svcname: sshd
# vim:syntax=yaml
# optoinal add start
preserve_hostname: true ※ホスト名を変更しない
manage_resolv_conf: false ※/etc/resolv.conf 内容を書き換えない。trueにした場合の各種詳細設定については、下記URLの「Configure an instances resolv.conf」を参照
network:
config: disabled ※ifcfgファイルを書き換えない。詳細は下記URLの「cloud config」参照。https://cloudinit.readthedocs.io/en/latest/topics/network-config.html
# optional add end
■/var/lib/cloud/instance について
/var/lib/cloud/instances/i-XXXXXXXX のシンボリックリンクになっている。
# pwd;ls -l
/var/lib/cloud/instance
合計 24
-rw------- 1 root root 0 10月 16 16:35 cloud-config.txt
-rw-r--r-- 1 root root 29 10月 16 16:35 datasource ※「DataSourceEc2: DataSourceEc2」 が記載
drwxr-xr-x 2 root root 6 8月 21 2018 handlers
-r-------- 1 root root 5355 10月 16 16:35 obj.pkl
drwxr-xr-x 2 root root 6 8月 21 2018 scripts
drwxr-xr-x 2 root root 4096 8月 21 2018 sem
-rw------- 1 root root 0 10月 16 16:35 user-data.txt ※生のユーザデータ
-rw------- 1 root root 344 10月 16 16:35 user-data.txt.i
-rw------- 1 root root 0 10月 16 16:35 vendor-data.txt ※生のベンダーデータ
-rw------- 1 root root 344 10月 16 16:35 vendor-data.txt.i
■/var/log/cloud-init.log
デフォルトでは、cloud-initは/etc/cloud/cloud.cfg.d/05_logging.cfgで提供されるロギング構成を使用。
デフォルトのpythonロギング構成は、WARNING以上の優先度を持つすべてのcloud-initイベントをコンソールに書き込み、DEBUG以上のレベルを持つすべてのイベントを/var/log/cloud-init.logおよびsyslogを介して書き込む。