CentOS7で動いていたBlogサーバーを、よりサポート期間の長いCentOS8に移行しましたので、AWS EC2での立ち上げ方の覚書を貼っておきます。
EC2 – インスタンスの作成から「CentOS 8」 で検索するとたくさん出てきてしまい、どれを選んだら良いかわからないかと思いますので、公式のAMIからインストールすることにします。
1. 公式のCentOS 8 Ami IDを探す
公式のWiki(https://wiki.centos.org/Cloud/AWS)から、東京リージョン(ap-northeast-1)のAmi IDを探してコピーします。
2. CentOS 8 のインスタンスを起動する
AWS -EC2- インスタンスを起動 から、-1.でコピーしたAmi IDを入力して検索します。
コミュニティ AMI で1件ヒットすると思うので、これを選択して起動します(詳細省略)。
3. SSHでログインする
無事起動したら、インスタンス作成時に取得した秘密鍵でSSHでログインします。ユーザー名は「centos」 パスワードは無しです(詳細省略)。
4. インスタンスの初期設定をする
素のCentOS 8で何も入っていませんので、初期設定をします。
-1. SSHポート番号を22から適当なポート番号に変更する
これはインスタンスが起動したら最低限やっておきましょう。もしくは、あとで設定するSSM(セッションマネージャー)以外でログインできないようにセキュリティグループでTCP/22番を閉じてしまっても良いです。PermitRootLogin NO にするのもお忘れなく。
$ sudo vi /etc/ssh/sshd_config
. . . # If you want to change the port on a SELinux system, you have to tell # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # Port 54322 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: . . . #LoginGraceTime 2m PermitRootLogin no #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 ・ ・ ・ ------------------------ :wq
$ sudo semanage port -a -t ssh_port_t -p tcp 54322 $ sudo systemctl restart sshd $ exit
セキュリティグループでTCP/22を閉じてTCP/54322ポートを開けた後、ポート番号を変えて再度SSHログインができたら成功です。
-2. タイムゾーンを東京に変更する
$ sudo timedatectl set-timezone Asia/Tokyo
-3. SELinuxを無効にする
これが有効だと色々と思い通りに動かないので、任意ですがSELinuxを無効にしておきます。SELinuxとうまく付き合える方はそのままで良いと思います。
$ sudo setenforce 0 $ sudo vi /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=permissive . . . ------------------------ :wq
-4. Cron(noanacron)を入れる
任意ですが、旧来のCronを動かせるようにしておくと便利です。 /etc/cron.d/dailyjobs が標準で動きます。
$ sudo dnf -y install cronie-noanacron $ sudo dnf -y remove cronie-anacron $ sudo systemctl start crond $ sudo systemctl enable crond
-5. メモリ不足を解消するためにスワップファイルを作成
これも任意ですが、t3a.nano などの貧弱なインスタンスを利用する場合はメモリ不足に陥りがちですので、あらかじめSwapを設定しておくことをお勧めします。
以下は、Swap 2GBの例です。インスタンスを再起動しても有効にするためには、/etc/fstab の最後尾に下記を追記します。
/swapfile swap swap defaults 0 0
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 $ sudo mkswap /swapfile $ sudo swapon /swapfile $ sudo chmod 600 /swapfile $ sudo vi /etc/fstab
# # /etc/fstab # Created by anaconda on Thu Jun 11 02:35:22 2020 # # Accessible filesystems, by reference, are maintained under '/dev/disk/'. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info. # # After editing this file, run 'systemctl daemon-reload' to update systemd # units generated from this file. # UUID=b437xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx / xfs defaults 0 0 /swapfile swap swap defaults 0 0 ----------------------- :wq
5. SSMエージェントをインストールして、セッションマネージャーでログインできるようにする
-1. AWS EC2 インスタンスにSSMエージェントをインストールする
以下のコマンドを実行します。サーバー側の準備はたったこれだけ。CentOS8用のものはないようですが、CentOS7の物で動作しました。ちなみに、dnf のかわりに yum でもインストールできます。
$ sudo dnf install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm $ sudo systemctl enable amazon-ssm-agent $ exit
-2. IAM から セッションマネージャー用のIAMロールを作る
(1). AWSログイン後、IAMをクリック
(2). ロール – ロールの作成
(3). AWSサービス – EC2 – 次のステップ: アクセス権限
(4). [ssm]で検索し、AmazonSSMFullAccessにチェック、次のステップ: タグ
(5). 適当にタグをつけます。
(6). 適当に名前と説明をつけて、ロールの作成
-3. EC2インスタンスにセッションマネージャ用 IAMロールを付与
(1). EC2 – インスタンス – アクション – インスタンスの設定 – IAMロールの割り当て/置換
(2). セッションマネージャ用 IAMロールを選択して、適用
-4. セッションマネージャーでEC2にログインする
(1). EC2- インスタンス – 接続から、セッションマネージャ – 接続
(2). ブラウザから、SSHなしでサーバーにログインできました。
ただし、Safariでは文字が入力できないみたいなので、セッションマネージャーでログインするにはChromeやFirefoxが必要です。
以後、必ずセッションマネージャー経由でログインするのであれば、セキュリティのためセキュリティグループからSSHのポートは閉じてしまっても良いです。
6. AWS CLIをインストールする
AWS CLIとは、AWSコンソールから人間がポチポチ ボタンを押すのではなく、コマンドでAWS各種サービスを自動制御できる便利なコマンドラインツールです。例えば、自動でインスタンスをバックアップしたりするのに使います。
Amazon Linux 2には標準で入っていますが、CentOS8には入っていないので入れておきましょう。
-1. AWS CLI用のIAMユーザーを作成する
AWS CLI用のユーザーを作成します。
(1). サービス – IAM
(2). ユーザー – ユーザを追加
(3). 適当なユーザー名を入力、プログラムによるアクセスにチェック
(4). 既存のポリシーを直接アタッチ – PowerUserAccess 権限を付与
本当は実際に操作したい対象(例えばS3など)に権限を絞ったほうがより良いですが、簡単のためアクセス権を広く取ります。
(7). アクセスキーIDと、シークレットアクセスキー取得
アクセスキーIDとシークレットアクセスキーは、AWS CLIの初期設定で使用するので控えておきます。
-2. インスタンスに AWS CLI をインストール
Amazon Linux 2 では標準で利用できる、AWS CLIをインストールします。デフォルトだと/usr/local/bin/にパスが通っていないので通しておきます。
aws configure で、上記で控えたアクセスキーIDとシークレットアクセスキーを入力します。
$ sudo dnf install -y python36 $ sudo pip3 install awscli $ sudo export PATH=/usr/local/bin/:$PATH $ sudo aws configure AWS Access Key ID [None]: 控えたアクセスキーID AWS Secret Access Key [None]: 控えたシークレットアクセスキー Default region name [None]: ap-northeast-1 Default output format [None]: json
7. AWS CloudWatch Agent をインストールして、メモリーやディスク容量を監視できるようにする
だいぶ長くなってしまったので別途記載したいと思います。
GUIにする方法も記載して欲しいです。