AWSを使う機会があったので忘れないようにメモ。数年前にも触ったことはあるんだけど、もう忘れてたw
サーバ準備
AWSコンソールから設定していきます。
リージョン
「アジアパシフィック(東京)」にする。
ネットワーク
VPCダッシュボードからVPCウィザードを起動。以下の設定でVPC作成。
・作成するリソース:VPC、サブネットなど ・名前タグ:任意の名前 ・IPv4 CIDRブロック:10.0.0.0/16 ・テナンシー:デフォルト ・DNS ホスト名を有効化:チェック ・DNS 解決を有効化:チェック
これでVPC、サブネット、インターネットゲートウェイ、ルートテーブルが自動生成される。便利だねえ。正直この辺ややこしいし。
セキュリティグループ
EC2のセキュリティグループから作成。アウトバウンドグループ(外に出ていく通信)は全部通す。インバウンドグループ(中に入ってくる通信)はsshやhttp、mysqlなど必要なものだけ通す。
ソースには全部許可のAnywhere-IPv4 (0.0.0.0/0)。
インスタンス
EC2の「インスタンスを起動」から作成。
・名前とタグ:任意の名前 ・アプリケーションおよび OS イメージ:Amazon Linux 2 ・インスタンスタイプ:適切なもの ・キーペア:新しいキーペアの作成 ・ネットワーク設定:右側にある編集ボタン押す ・VPC:上で作成したもの ・サブネット:上で作成したもの(public1, private1等をちゃんと確認) ・パブリック IP の自動割り当て:有効化 ・ファイアウォール:「既存のセキュリティグループを選択する」で上で作成したもの ・ストレージ:適切なもの
データベース
RDSの「データベースの作成」から作成。
・データベース作成方法を選択:標準作成 ・エンジンのオプション:MySQL ・バージョン:適切なもの ・テンプレート:本番稼働用 ・可用性と耐久性:単一のDBインスタンス ・設定:DBインスタンス識別子やパスワード設定 ・インスタンスの設定:任意のインスタンス ・ストレージ:適切なもの ・コンピューティングリソース:ECコンピューティングリソースに接続しない ・VRC:上で作成したもの ・DBサブネットグループ:新規? ・パブリックアクセス:なし ・VRCセキュリティグループ:既存の選択 ・アベイラビリティーゾーン:指定なし ・データベース認証:パスワード認証
Elastic IP
EC2の「Elastic IP アドレスを割り当てる」から作成。アクションボタンの「Elastic IP アドレスの関連付け」でインスタンス関連付け。
これでサーバが用意できました。慣れれば簡単なんだろうけど、調べるのに結構時間かかりました。コロコロ仕様変わってるみたいで、ネットに書かれた通りに行かなかったりするし。
サーバーログイン
コンソールのEC2のインスタンス>接続ボタン>sshクライアントで接続方法わかります。
$ ssh -i key.pem ec2-user@(IPアドレス)
sshのタイムアウトが早いので延ばします。60秒ごとチェックで30分アクセスなければタイムアウトに変更。
$ sudo vi /etc/ssh/sshd_config ClientAliveInterval 60 ClientAliveCountMax 30 $ sudo service sshd restart
ついでにタイムゾーンも変更。
$ sudo timedatectl set-timezone Asia/Tokyo
ユーザ作成
IDパスワード設定。
$ sudo useradd test $ sudo passwd test
sudoできるようにする。
$ sudo usermod -G wheel test $ sudo visudo 以下の行を有効化 %wheel ALL=(ALL) NOPASSWD: ALL
鍵作成。
$ sudo su - test $ ssh-keygen -t rsa 何も入力せずエンター 公開鍵の設定 $ cd ~/.ssh $ cat id_rsa.pub >> authorized_keys $ chmod 600 authorized_keys $ exit
作成されたid_rsaファイルをダウンロードして、ファイル名をkey.pemに変更。このファイルを鍵としてログイン出来るようになります。
アプリインストール方法
Amazon独自のリポジトリを使います。まずは以下のようにインストール可能なアプリのバージョンを確認します。ここではPHP。
$ sudo amazon-linux-extras |grep php
するとphp7.4とphp8.0がインストール可能と出ました。そこでphp8.0を以下のようにインストールします。
$ sudo amazon-linux-extras install php8.0
終わり。簡単だね。この手順を元に以下やっていきます。
amazon-linux-extrasで見つからない場合は、他のOSと同じく他のリポジトリから持ってくることも可能です。
webサーバ関係
nginx
$ sudo amazon-linux-extras install nginx1 $ sudo systemctl start nginx $ sudo systemctl enable nginx
サブドメイン設定
$ sudo vi /etc/nginx/conf.d/(ドメイン名).conf
server {
listen 80;
server_name (ドメイン名);
root /home/(ユーザ名)/public_html;
index index.html index.htm index.php;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
再起動
$ sudo systemctl restart nginx.service
php
$ sudo amazon-linux-extras install php8.0 $ sudo yum install php-cli php-pdo php-fpm php-json php-mysqlnd php-mbstring $ sudo vi /etc/php.ini date.timezone = "Asia/Tokyo" $ sudo vi /etc/php-fpm.d/www.conf user = nginx group = nginx $ sudo chown nginx /var/log/php-fpm/ $ sudo systemctl start php-fpm $ sudo systemctl enable php-fpm 再起動 $ sudo systemctl restart php-fpm.service
composer
$ cd /home/ec2-user $ sudo curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer
Git
$ sudo yum install git
SSL(Let’s Encrypt)
$ sudo amazon-linux-extras install epel
$ sudo yum install certbot
$ sudo certbot --nginx
$ sudo certbot certonly --webroot -w /(パス)/public_html -d (ドメイン名) --email (メールアドレス)
$ sudo vi /etc/nginx/default.d/(ドメイン名).conf
server {} 内に以下追加
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/(ドメイン名)/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/(ドメイン名)/privkey.pem;
$ sudo systemctl restart nginx.service
バッチでSSL証明書自動更新(※後でチェック)
$ sudo crontab -e
0 4 1,15 * * root certbot renew && systemctl start nginx
データベース
EC2にMarinaDBインストールします。
$ sudo amazon-linux-extras install mariadb10.5 $ sudo systemctl start mariadb $ sudo systemctl enable mariadb
rootにはパスワードが設定されてなくてログインできません。なのでセーフモードで設定します。
RDSに繋ぐ場合は設定しなくても大丈夫です。
$ sudo systemctl stop mariadb $ sudo mysqld_safe --skip-grant-tables --skip-networking & $ mysql -u root > FLUSH PRIVILEGES; > ALTER USER 'root'@'localhost' IDENTIFIED BY '(パスワード)'; > FLUSH PRIVILEGES; > exit $ sudo kill `sudo cat /var/run/mariadb/mariadb.pid` $ sudo systemctl start mariadb
ユーザを作成します。RDSの場合はもちろんRDS上でやります。
$ mysql -u root -p > CREATE USER '(ユーザ名)'@'localhost' IDENTIFIED BY '(パスワード)'; > GRANT ALL PRIVILEGES ON *.* TO '(ユーザ名)'@'localhost'; 特定のテーブルのみ、かつ外部からのアクセス許可(%)の場合は > CREATE USER '(ユーザ名)'@'%' IDENTIFIED BY '(パスワード)'; > GRANT ALL PRIVILEGES ON (テーブル名).* TO '(ユーザ名)'@'%';
まとめ
結構調べるのに苦労しました。まあでもこれでAWSの案件が来ても大丈夫。
ちょこちょこ記述が足りない箇所がありますが、後日追加予定。


コメント