EC2にはユーザーデータというインスタンス作成中にLinuxコマンドを実行できる機能があります。
Linuxサーバ構築時は、自身の環境に合わせ言語やタイムゾーン等決まって設定する内容があると思います。
毎回サーバを構築した後にコマンドを流すのは面倒なので、ユーザーデータにコマンドを組み込むことで、初期セットアップを自動化することができます。
IaC(CFnやTerraForm)に組み込めばパラメータシート代わりにもなります。
本記事では、汎用的に使用できる初期セットアップ用スクリプトを記載します。
概要
前提
- Amazon Lightsail 対応
- 対象OSはDebian系
- 以下のOSで動作確認済
- Debian Server
- Ubuntu 20.10 STR
- Ubuntu 20.04
- Ubuntu 18.04
- Ubuntu 16.04 LTS 64bit
- 以下のOSで動作確認済
- ユーザーデータに組み込む前提
シェルスクリプトの説明
- aptパッケージのアップデート
- 言語設定
- ロケールを ja_JP.utf8 に指定
- 時刻同期
- タイムゾーンを Asia/Tokyo に指定
- ホスト情報の設定
- ユーザー作成
- パスワードを設定する
- 任意のグループに所属させる
- Root(sudo)権限を付与
- ログイン設定
- パスワード認証によるSSH接続を可能にします
シェルスクリプト
- ユーザーデータはRoot権限で実行されるので、sudo指定は不要です。
起動時に Linux インスタンスでコマンドを実行する
#!/bin/bash
## パッケージのアップデート
apt-get update -y
apt-get upgrade -y
apt-get autoremove -y
apt-get clean -y
apt-get autoclean -y
apt-get check -y
## 言語設定
localectl set-locale LANG=ja_JP.utf8
source /etc/locale.conf
## 時間設定
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
## ホスト情報の設定
hostnamectl set-hostname <ホスト名>
/etc/init.d/networking restart
## ユーザー作成
USERNAME=<ユーザー名>
PASSWORD=<パスワード>
echo "${PASSWORD}" | passwd --stdin ${USERNAME}
usermod -G <グループ名1>,<グループ名2>,<グループ名3> ${USERNAME}
# 例(EC2):usermod -G ec2-user,adm,wheel,systemd-journal ${USERNAME}
# 例(Lightsail(WordPress)):sudo usermod -G bitnami,adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev,bitnami-admins ${USERNAME}
sed -i -e '$ a ${USERNAME} ALL=(ALL) NOPASSWD:ALL' /etc/sudoers
## ログイン設定
sed -i -e 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
systemctl restart sshd
まとめ
このシェルスクリプトも時代や環境に合わせて徐々に更新していく必要があります。
みなさんの考えた最強のセットアップ用シェルスクリプトも是非教えて下さいね。
コメント