今回はEC2起動時に事前登録したテンプレートから起動する設定をお試ししてみます。検証用で何度も同じ設定のサーバを立てる際の工数削減や設定間違いの防止に便利な機能です。
今回のゴール
起動テンプレートを利用して、以下環境が設定済み状態でEC2起動を起動できるようにする
[AWS環境]
・指定VPC内の所定のサブネットにデプロイ
・グローバル(パブリック)IPを付与
・指定AMI(Amazon Linux2)を利用
・インスタンスタイプをスポットインスタンスに指定
[OS環境]
・ホスト名を"test-server"に設定
・タイムゾーン、言語を日本仕様に設定
・モジュールを最新版にアップデートする
・"test-admin"というユーザを追加し、パスワード認証でログインできるように設定
作業の流れ
①VPCとサブネットおよびセキュリティグループを作成
②起動テンプレートを作成
③EC2の起動・デプロイ
④設定の確認
実際の設定
まず①ですが、この作業は各所に詳しい記事がありますので、本記事では割愛します。一般的にEC2をデプロイして、SSHで接続できる環境であれば問題ありません。では②から始めていきます。
AWSコンソールにログインして、EC2の管理画面を開くと以下のようなメニューが左側に表示されます。
[インスタンス]内の[起動テンプレート]を選択します。
次に[起動テンプレートの作成]をクリックします。以下参考に設定をしていきます。
・テンプレート名は任意の名前に設定
・タグも任意で設定
・テンプレートコンテンツはAmazon Linuxを選択
・インスタンスタイプで[t2.micro]を選択
・キーペア、サブネット、セキュリティグループは利用する環境のものを選択
・パブリックIPの自動割当ては「有効化」を選択
・「購入オプション」スポットインスタンをリクエスト」にチェックを入れる
記載するスクリプト内容は以下になります。
#!/bin/bash
#モジュールのアップデート
yum update -y
#言語を日本語に設定
localectl set-locale LANG=ja_JP.UTF-8
#タイムゾーンを日本に設定
timedatectl set-timezone Asia/Tokyo
#ホスト名を"test-server"に設定
hostnamectl set-hostname test-server
#ユーザ名"test-admin"を作成
useradd test-admin
#test-adminのパスワードを設定
echo XXXXXXX | passwd --stdin test-admin
#test-adminがrootに昇格できるように設定
usermod -G wheel test-admin
sed -i 101i"test-admin ALL=(ALL) ALL" /etc/sudoers
#パスワード認証でSSH接続できるように/etc/ssh/sshd_configのファイルを修正
sed -i "63d" /etc/ssh/sshd_config
sed -i "63i PasswordAuthentication yes" /etc/ssh/sshd_config
#再起動
reboot
最後のRebootですが、ユーザーデータに記載した内容はEC2の初回起動時に1回処理されるだけなので、rebootをしても起動・再起動でループすることはないです。
これで起動テンプレートができたので、これを使って③のEC2の起動・デプロイをしてみます。
最後に④ですが、EC2が所定のサブネットにデプロイされており、SSH接続した際に表示されるホスト名が"test-server"になっていること、また"test-admin"でパスワード認証でログインできればOKです。
おわりに
同じ設定のサーバを何度も立てる際の手間や設定ミス防止の観点から起動テンプレートを利用すると仕事が捗ると思います。
他にも色々書きたいのですが、時間がない...
特にActive Directory系で色々検証した設定を書きたいので、追々アップします。
参考にしたサイト
https://dev.classmethod.jp/articles/spotinstances-launch-templates/
https://open-groove.net/linux-command/sed-edit-files/
https://qiita.com/momoken/items/bc8236da4396751d8553