cloud-initは、インスタンスの作成時やOS再起動時に設定してくれる
cloud-initはrootユーザーで実行されるのでsudoコマンドは使用しない
設定できる一部になります。
| boot時に指定したコマンドを実行 |
| 「/etc/hosts」の設定 |
| sshでのrootでのログインを無効 |
| sshのパスワードログインを無効 |
| sshキー(/etc/ssh/ssh_host_*key*)の削除 |
| 言語設定 |
| タイムゾーンの設定 |
$ cat /var/log/cloud-init.log |grep -i finish # 終わった時間を確認
$ journalctl -u cloud-final
$ ls -alF /etc/rc3.d/ | grep cloud $ ls -alF /etc/rc3.d/
sudo rm -rf /var/lib/cloud/* && \ sudo cloud-init --debug init --local && \ sudo cloud-init --debug init
sudo rm -rf /var/lib/cloud/* && \ sudo cloud-init init --local && \ sudo cloud-init init && \ sudo cloud-init --debug modules --mode config
sudo rm -rf /var/lib/cloud/* && \ sudo cloud-init init --local && \ sudo cloud-init init && \ sudo cloud-init modules --mode config && \ sudo cloud-init --debug modules --mode final
cloud-initなどのサービス起動を無効化する以外にも、以下のファイルを作成することでも、cloud-initを無効化できます。
touch /etc/cloud/cloud-init.disabled
#- set_hostname #- update_hostname #- sers-groups #- ssh #- locale
ホスト名を自動で割り当てないのはこの設定だけではうまくいかないので、preserve_hostname: true を追加する必要があります。
#cloud-config preserve_hostname: true #ホスト名を自動で割り当てない repo_upgrade: none #インスタンスの初回起動時に自動でセキュリティアップデートを実行しない locale: ja_JP.UTF-8 manage_resolv_conf: false # /etc/resolv.conf 内容を書き換えない。
参考:https://repost.aws/ja/knowledge-center/execute-user-data-ec2
[ユーザーデータの編集]を選択し、ユーザーデータを下記のように書き換えます。
Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config cloud_final_modules: - [scripts-user, always] --// Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt" #!/bin/bash #この部分に実行したいスクリプトを記載する /bin/echo "Hello World" >> /tmp/testfile.txt --//--
# WARNING: Modifications to this file may be overridden by files in
# /etc/cloud/cloud.cfg.d
users: # defaultで指定したユーザーを作成
- default
disable_root: true # sshでのrootでのログインを無効にする
ssh_pwauth: false # sshのパスワードログインを無効化
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
resize_rootfs: noblock
resize_rootfs_tmp: /dev
ssh_deletekeys: true
ssh_genkeytypes: ~
syslog_fix_perms: ~
datasource_list: [ Ec2, None ]
repo_upgrade: security
repo_upgrade_exclude:
- kernel
- nvidia*
- cuda*
# Might interfere with ec2-net-utils
network:
config: disabled
cloud_init_modules:
- migrator
- bootcmd # ブートプロセス時にコマンドを実行
- write-files
- write-metadata
- amazonlinux_repo_https
- growpart
- resizefs # /のファイルシステムを拡張す
- set-hostname # ホスト名を設定する(/etc/sysconfig/networkのホスト名を書き換える)
- update-hostname # ホスト名を設定する(/etc/hostnameのホスト名を書き換える)
- update-etc-hosts # ホスト名を設定する(テンプレートでの指定やlocalhost等の指定が可能)
- rsyslog # rsyslogの設定変更を行う(デフォルトでは何もしない)
- users-groups # ユーザー・グループの作成を行う(デフォルトではdefaultで指定されているec2-userを作成する)
- ssh # sshの設定を行う(rootログイン無効、パスワードログインの無効化)
- resolv-conf
cloud_config_modules:
- disk_setup
- mounts # fstabの設定を行う(エフェメラル等やswapの設定を行うがrhelの場合デフォルトでは何もしない)
- locale # localeの設定を行う(デフォルトはen_US.UTF-8に初期化される)
- set-passwords # ユーザーのパスワードを設定(デフォルトは何も実施しない)
- yum-configure
- yum-add-repo
- package-update-upgrade-install
- timezone # タイムゾーンの設定(デフォルトでは何も実施しない)
- disable-ec2-metadata # メタデータアクセスを拒否ができないように設定する(デフォルトfalseでメタデータにアクセスできる状態)
- runcmd # 指定したコマンドを実行する(デフォルト何もしない)
cloud_final_modules:
- scripts-per-once # 一回だけスクリプトを実行(/var/lib/cloud/scripts/per-onceのスクリプト)
- scripts-per-boot # 起動毎に実行(/var/lib/cloud/scripts/per-bootのスクリプト)
- scripts-per-instance # AMIからインスタンス作成時の初回起動時だけスクリプトを実行(/var/lib/cloud/scripts/per-instanceのスクリプト)
- scripts-user # AMIからインスタンス作成時の初回起動時だけスクリプトを実行
- ssh-authkey-fingerprints # sshフィンガープリントをconsoleに出力する
- keys-to-console # ssh時のフィンガープリントを出力をする、しないの制御をする(デフォルトでは何もしない)
- phone-home # boot完了時に指定したURLにリクエストを投げる※デフォルトでは何もしない
- final-message #完了ログをconsoleに出力する
- power-state-change
system_info:
# This will affect which distro class gets used
distro: amazon
distro_short: amzn
default_user:
name: ec2-user
lock_passwd: true
gecos: EC2 Default User
groups: [wheel, adm, systemd-journal]
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
paths:
cloud_dir: /var/lib/cloud
templates_dir: /etc/cloud/templates
ssh_svcname: sshd # sshdの再起動を行う
mounts:
- [ ephemeral0, /media/ephemeral0 ]
- [ swap, none, swap, sw, "0", "0" ]
/var/lib/cloud/instances/i-インスタンスID
EC2 Linuxを起動するたびに同じコマンドを実行させる | DevelopersIO
$ pwd /var/lib/cloud/instances/i-xxxxxxxxxxxxxxxxx $ ls -F1 cloud-config.txt datasource handlers/ obj.pkl scripts/ sem/ user-data.txt user-data.txt.i vendor-data.txt vendor-data.txt.i
一般向けサイト
ITエンジニア向けサイト
英語サイト
Portfolio
Copyright (c) 2025 クラウドのインフラ技術 All Rights Reserved.