SE・プログラミングのあれこれ

【AWS, Node.js】3.5$/月の格安テスト環境構築

AWSでNode.jsの低コストのテスト環境を構築する。
AWSなら、3.5$/月という非常に安価なテスト環境を構築できる。
本記事で構築する環境は以下の通り。SSL化まで行う。

  • OS:Amazon Linux 2
  • ミドルウェア:nginx
  • DB:mysql

AWS Lightsail インスタンスを作成

AWSコンソール>Lightsail>create instance から、インスタンスを作成する

「OS Only」「Amazon Linux 2」を選択

3.5$のプランを選択し、好きにインスタンス名をつける

一番下の「create instance」ボタンをクリック

インスタンス一覧に作成したインスタンスが表示される。状態がPendingからrunningになるまで少しかかる。

static IP の設定

この状態だと、インスタンスを再起動するとIPが変わってしまうので、static IP を設定する

作成したインスタンス名をクリックし、Networking>create static IP

IPアドレスに好きな名前を付け、createボタン。

ssh接続して必要なものをインストール

connect using ssh をクリック

 

以下のコマンドを上から順に発行する。途中で何か聞かれたら全てyesでOK

・ファイル最後尾に以下を付け加える。

〇Node.jsのインストール

〇nginx のインストール (Amazon Linux 2 の Extras Library を利用)

〇タイムゾーンの変更

 

アクセスしてみる

ブラウザから「http://【インスタンスのIPアドレス】」にアクセスして、以下のページが表示されればOK

注意
まだSSL化をしていないので、httpsではアクセスできない点に注意

route53でドメイン設定

あらかじめ、ドメインを取得しておく。

route53>ホストゾーンの作成

ドメイン名を設定し、作成する

続いて、「レコードを作成」からAレコードを作成する。

インスタンスのIPアドレスを入力、レコードタイプはA

MEMO
必要に応じて、お名前ドットコムなどのドメイン管理元で、AWSに名前解決を移譲するようDNSレコード設定をする

以上で設定完了。ブラウザからドメインでアクセスできるようになっているか確認する。

443ポートを開放

https接続できるようにするため、443ポートを開放する。

SSL化

ターミナル上で以下のコマンドを発行

・server_nameの値をドメインに変更

 

・上記コマンドを実行すると、以下のようにメールアドレスなどの入力を求められる

■補足:SSL化したいドメインの先頭についている番号を入力する

 

以上でSSL化は完了
https://【ドメイン】で接続できればOK

 

自動で証明書更新する設定

毎日2時, 14時にSSL証明書の更新を行うよう設定する。

 

MySQLをインストール

※もしインストールに失敗した場合は、一度アンインストールしてやり直す

 

以下のサイトから「Red Hat Enterprise Linux 7 / Oracle Linux 7」の欄の下に記載されているリポジトリ名を確認(画像の赤枠)
下記コマンドを実行する。
sudo yum localinstall https://dev.mysql.com/get/【リポジトリ名】

https://dev.mysql.com/downloads/repo/yum/

起きたエラー

・前回のyumが正常終了しなかった場合に、以下のエラーが出ることがある。Packagekitによってロックされている状態。
pidを確認しておく(太字箇所)

Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Existing lock /var/run/yum.pid: another copy is running as pid 1792.
Another app is currently holding the yum lock; waiting for it to exit…
The other application is: yum
Memory : 52 M RSS (450 MB VSZ)
Started: Tue Sep 20 15:06:23 2022 – 09:07 ago
State : Sleeping, pid: 1792

 

これを解決するには、プロセスをキルし、ロックファイルを削除する。以下の通り。

閉じる
起きたエラー

 

・「sudo systemctl start mysqld」で以下のエラー
Job for mysqld.service failed because the control process exited with error code. See “systemc
tl status mysqld.service” and “journalctl -xe” for details.

 

「systemctl status mysqld.service」で以下のログが出た


● mysqld.service – MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2022-09-20 18:03:03 JST; 3min 14s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 8707 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=1/FAILURE)
Process: 8680 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 8707 (code=exited, status=1/FAILURE)
Status: “Server shutdown complete

 

一度SSH接続を切って再ログインし、再度startのコマンドを実行するとなぜか回避できた。

閉じる

以上でテスト環境構築完了