Tech Hotoke Blog

IT観音とは私のことです。

Vue×SpringでSPA作成8【AWSにアプリケーションのデプロイ】

f:id:TechHotoke:20211226002024p:plain

まえがき

こちらの記事の続編です。

techhotoke.hatenablog.com

目的

VueとSpringで作成したプロジェクトの構築手順の備忘録。 備忘録のため、詳細な説明を省略している部分があります。

前提

  • 基本的なJavaの知識やSpring、Vueの知識があること。
  • AWSに関する基本的な知識があること
  • ネットワークに関する基本的な知識があること

環境

  • Java 11
  • Spring Boot2.5.6
  • Gradle 7.1.1
  • Vue2.6
  • IDESTS
  • AWS(EC2,RDS,ELBなど)

やること

  • RDSへDBサーバーを移行する

やらないこと

構成

f:id:TechHotoke:20220110141231p:plain

なぜRDSに移行するのか?

  • 現状の構成では、Webサーバーの台数を増やしたいという要望が出てきた場合にDBサーバーもWebサーバーと同じだけ複製されてしまうから
  • その場合、リクエストによってアクセスできるDBが変わる可能性がありデータの生合成が取れなくなるから

RDSとは?

  • マネージドなデータサービス f:id:TechHotoke:20220111230112p:plain

  • 以下のRDBMSが使用可能 f:id:TechHotoke:20220111225721p:plain

  • DBのバージョンはAWSが提供しているものしか選択できない

  • DBインスタンスのスペックに上限がある

  • DBインスタンスのOSにはログインできない

    • パラメータグループとオプショングループによって設定をある程度変更することは可能
  • DBインスタンスの起動中でもストレージを増やすことが可能(減らすことは不可能)

  • マルチAZ配置を簡単に実現できる

  • リードレプリカ(読み取り専用DB)を使用することでDBインスタンスの負荷を低減することが可能

  • サブネットはパブリックにも配置可能(推奨はプライベート)

  • 自動的にバックアップを取得する(トランザクションログ+スナップショット)

    AmazonAuroraについて

  • MySQLとPostgre SQLと互換性のあるRDBMS
  • 処理能力が高く、MySQLの5倍、PostgreSQLの3倍
  • 障害体制に優れている(3つのAZに6つのデータをコピーする)

構築

  • VPCに新規のセキュリティグループを作成

    • インバウンドルールのソースにweb-appを選択。アウトバウンドルールは不要のため削除。 f:id:TechHotoke:20220111231538p:plain
  • RDSに移動

  • RDSにサブネットグループの新規作成(サブネットがわかりづらいので注意。privateサブネットを選択すること) f:id:TechHotoke:20220111231843p:plain

  • パラメータグループの作成 f:id:TechHotoke:20220111232144p:plain

  • RDSの作成

    • MySQLを選択
    • 今回は無料利用枠を使用
    • 接続する VPCを選択し、サブネットグループに上記で作成したものを選択
    • 追加設定の欄で、上記で作成したパラメータグループを選択
  • 踏み台サーバー経由でインスタンスにログインし、mysql -u admin -p -h [エンドポイント] コマンドでMySQLサーバーにログインする

  • `CREATE USER <User名> IDENTIFIED BY <パスワード>でユーザー作成

  • CREATE DATABASE <DB名>でDB作成

  • GRANT ALL PRIVILEGES ONコマンドで権限の付与を行う

  • RDSからログアウトし、mysqldump -u root -p TempleTaskManager > tms-db_20220113.sql コマンドを実行してEC2インスタンスのDBからデータをダンプする(下記のようにSQLファイルが生成されていればOKです) f:id:TechHotoke:20220113065732p:plain

  • mysql -u tmsAdmin -p -h templetaskmanager.cbjux39qgfk7.ap-northeast-1.rds.amazonaws.com TempleTaskManager < tms-db_20220113.sql;にてRDS のDBにデータをインポートする

  • mysql -u tmsAdmin -p -h templetaskmanager.cbjux39qgfk7.ap-northeast-1.rds.amazonaws.com TempleTaskManager;でRDS のDBにログインし、SHOW TABLESコマンドでテーブルが生成されていることを確認 f:id:TechHotoke:20220113070230p:plain

  • 念の為、SELECT文でデータも確認しておく

  • 確認ができたら、MySQLからログアウトし、DBの接続先(application.properties)をRDSのエンドポイントに変更する pring.datasource.url=jdbc:mysql://[エンドポイント]:[DBポート]/[DB名]

  • ELBのDNS名を利用してアプリケーションのURLにアクセスし、画面が正常に表示されればOk f:id:TechHotoke:20220113071938p:plain

  • sudo systemctl stop mysqldを実行し、EC2で起動しているMySQLを停止する

  • sudo systemctl status mysqldを実行し、statusがinactiveになっていることを確認

  • サーバー自動起動の設定をしていたので、そちらもsudo systemctl disable mysqldを実行して無効化しておきます(Removed symlinkとターミナルに表示されていればOKです)

  • sudo systemctl is-enabled mysqldを実行し、disableと表示されれば完了です

今回はここまでとなります。 お付き合い頂きありがとうございます。