yuusuke-roughの日記

Java,SpringBoot,趣味等

Spring Bootアプリケーションのデプロイ with AWS

はじめに

この度、公開するアプリケーションはWebSocketを使用します。

ついては、使用した事のないRoute53、AWS Shield、 ELBは今回の記事では扱いません。

今回の目標は、デプロイをし、ローカル環境と同様、正常に動作する事の確認のみ行います。

 

構成

予算は、130$ / 月なので、AWS Budgetsでアラートを設定します。

デフォルトは85%で通知のため、今回は、110$を超えると設定したアドレスに通知が届きます。

 

使用するEC2インスタンスは予算の都合上もあり、t3.nanoとします。

What is Amazon EC2? - Amazon Elastic Compute Cloud

インスタンスタイプ - Amazon EC2 | AWS

最大 3.1 GHz のインテル Xeon スケーラブルプロセッサ (Skylake 8175M または Cascade Lake 8259CL)

バーストパフォーマンスインスタンスに関する主要な概念と定義 - Amazon Elastic Compute Cloud

 

VPCは、一昨年あたりに無料利用期間枠で作成したものを流用します。

What is Amazon VPC? - Amazon Virtual Private Cloud

 

セキュリティグループでは、私からしSSH接続はしないので、ソースを「自分のIP」にします。

ストレージでは、Amazon EBSのgp2を使用します。

ハイパフォーマンスブロックストレージの料金 – Amazon EBS の料金 – Amazon Web Services

料金がわかりにくかったので調べました。

「料金設定が月単位」「課金が秒単位」のAWS EBSの料金計算 - Qiita

 

 

下記は、私がEBSを知らないため、備忘録として残します。

Amazon Elastic Block Store (Amazon EBS) - Amazon Elastic Compute Cloud

インスタンスの有効期間とは無関係に存続するストレージボリュームとして公開されます。これらのボリューム上にファイルシステムを構築できます。または、これらのボリュームをブロックデバイス (ハードドライブなど) を使用する場合と同じ方法で使用できます。インスタンスにアタッチされているボリュームの設定は動的に変更できます。

 

デフォルトでは、Amazon Linux 2 ベースの Amazon ECS に最適化された AMI(Amazon ECS に最適化された Amazon Linux 2 AMI、Amazon ECS に最適化された Amazon Linux 2 (arm64) AMI、および Amazon ECS GPU に最適化された AMI)には、1 つの 30 GiB のルートボリュームが付属しています。30 GiB ルートボリュームのサイズを起動時に変更して、コンテナインスタンスで使用可能なストレージを増やすことができます。このストレージは、オペレーティングシステム用と Docker イメージおよびメタデータ用に使用されます。

ストレージ側に設定をする容量は、そこまで大量に使用しない予定なので、デフォルトの8GBにします。

 

EC2インスタンス作成後

SSH接続のため、teratermをインストールします。

2023/9/4、現在、OSDNが不安定との事でGithubからダウンロードできるようです。

Releases · TeraTermProject/osdn-download · GitHub

後は、パブリックIPアドレスを使用して、鍵は発行したキーペアを使用します。

【SSH】公開鍵認証とEC2について - Qiita

 

AWS EC2 AmazonLinux2 MySQLをインストールする - Qiita

MariaDB用のパッケージがあるそうなので、こちらの記事に倣います。

MySQL :: MySQL 8.0 リファレンスマニュアル :: 2.5.1 MySQL Yum リポジトリを使用して MySQL を Linux にインストールする

 

Amazon Linux2 はRedHat7がベースだそうです。

MySQL :: Download MySQL Yum Repository

現在は、mysql80-community-release-el7-10.noarch.rpm

 

初期パスワードは、sudo grep 'temporary password' /var/log/mysqld.logで確認が取れます。

ログインできず、下記エラーが発生しました。

Job for mysqld.service failed because a fatal signal was delivered to the control process. See "systemctl status mysqld.service" and "journalctl -xe" for details.

 

ep 04 11:13:00 ip-何々.internal systemd[1]: mysqld.service failed.
Sep 04 11:13:00 ip-何々.us-east-2.compute.internal systemd[1]: mysqld.service holdoff time over, scheduling restart.
-- Subject: Unit mysqld.service has finished shutting down
-- Unit mysqld.service has finished shutting down.
-- Subject: Unit mysqld.service has begun start-up
-- Unit mysqld.service has begun starting up.
Sep 04 11:13:05 ip-何々.us-east-2.compute.internal kernel: [   7528]    27  7528   271536    85325  1069056        0             0 mysqld
Sep 04 11:13:05 ip-何々.us-east-2.compute.internal kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/,task=mysqld,pid=7528,uid=27
Sep 04 11:13:05 ip-何々.us-east-2.compute.internal kernel: Out of memory: Killed process 7528 (mysqld) total-vm:1086144kB, anon-rss:341300kB, file-rss:0kB, shmem-rss:0kB, UID:27 pgtables:1044kB oom_score_adj:0
Sep 04 11:13:05 ip-何々.us-east-2.compute.internal systemd[1]: mysqld.service: main process exited, code=killed, status=9/KILL
-- Subject: Unit mysqld.service has failed
-- Unit mysqld.service has failed.
Sep 04 11:13:05 ip-何々.us-east-2.compute.internal systemd[1]: Unit mysqld.service entered failed state.
Sep 04 11:13:05 ip-何々.us-east-2.compute.internal systemd[1]: mysqld.service failed.
Sep 04 11:13:06 ip-何々.us-east-2.compute.internal systemd[1]: mysqld.service holdoff time over, scheduling restart.
-- Subject: Unit mysqld.service has finished shutting down
-- Unit mysqld.service has finished shutting down.
-- Subject: Unit mysqld.service has begun start-up
-- Unit mysqld.service has begun starting up.

 

Sep 04 11:13:05 ip-何々.us-east-2.compute.internal kernel: Out of memory: Killed process 7528 (mysqld) total-vm:1086144kB, anon-rss:341300kB, file-rss:0kB, shmem-rss:0kB, UID:27 pgtables:1044kB oom_score_adj:0

 

【out of memory kill process】OOM Killerさんに殺されたくない - Qiita

スワップ領域の作成で不足分を補います。

Linuxでスワップ領域を作成する方法 - Qiita

 

…次回はJDKのインストールから行います。

 

設定の見直しはこちらを参考にしたいと思います。

【2022年版】Amazon EC2 ベストプラクティス - Qiita

感想

CPUの性能はサーバーというのもありますが、いまいち、ピンと来ません。

また、Out Of memoryで具体的に消されてしまったプロセスについては、後日、詳細を調べたいと思います。

 

chess.comでパズルレートが前アカウントの2000に戻りました。

また、リーグがエリートに上がりました。

 

AtCoderでのコーディング力強化と基本情報技術者試験対策は順調です。

後者はいつでもできるので、デプロイを第一優先とします。

 

旧前田侯爵邸に行ってきました。

チューダー様式の素晴らしい内観と外観は、包み込むような壮大な空間で落ち着きました。また、暖房が地下から温風を送る構造であったり、地下とを結ぶエレベーターが存在しているようです。

昭和五年といいますと、1930年、私の母方の祖父が生まれる一年前か同じ歳です。

歴史を感じます。