はじめに
今回は、AWS EC2上にJavaをインストールし、Hello Worldしてみました。
備忘録として、記録します。
環境
・Windows 11
・エディタはVScodeを使用
前提
・AWSのアカウントを持っていること
・IAMユーザーを一つ作成してあること
*AWSのベストプラクティス的にルートユーザーで作業することは推奨されていないため。
IAMユーザーの作り方は以下を参照
https://qiita.com/kzykmyzw/items/ca0c3276dfebb401f7d8
今回やること
EC2上にJarファイルをデプロイし、アクセスできる。
Step1 セキュリティグループの作成
まず、はじめに任意のIAMユーザーでコンソールにログインし、EC2を開きます。
そして、右下にあるセキュリティ・グループを押して、右上にあるセキュリティグループを作成を選択します。
別途VPCを作成してもいいですが、インバウンド以外は基本デフォルトでいいです。
IGWを作成したりするのが面倒だったので、今回はデフォルトのVPCを使っています。
インバウンドについてですが、すべてのIPアドレスからのアクセスを許可するために0.0.0.0/0にしておきます。(ソースからAnywhere-IPv4を選択するとできます)
カスタムTCPのポートは8080にしておきます。
Step2 EC2インスタンスの作成
コンソールからEC2を開き、インスタンスの起動を選択してEC2インスタンスを作成する。
specは以下の通り
・AMI:Amazon Linux 2023 AMI 2023.3.20240219.0 x86_64 HVM kernel-6.1
・インスタンスタイプ:t2.micro
キーペアを作成し、セキュリティグループはStep1で作成したものを適用する。
*キーペアはSSH接続する際に使用するので、適切に管理してください。
Step3 Javaアプリケーション&jarファイル作成
vscodeで「ctrl+shift+p」でコマンドパレットを起動し、create java Projectを選択。
ビルドツールはGradleを選択します。
verは各々都合のいいものを選択してください。
今回、Javaアプリケーションを作成することは目的ではないので、割愛します。
Spring Bootを使い以下のようなコントローラーを作成し、「index.html」でHello Worldを表示します。
package com.example.demo.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MyController {
@GetMapping("/")
public String index(Model model){
model.addAttribute("message","Hello World!");
return "index";
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Spring Boot with Thymeleaf</title>
</head>
<body>
<h1 th:text="${message}"></h1>
</body>
</html>
もし、Gradleをインストールしていない場合はインストールが必要です。
私は、以下のブログを参考にさせていただきました。
https://tokuty.hatenablog.com/entry/2021/03/14/Java_Vscode%E3%81%A7SpringBoot%E3%82%92jar%E3%81%AB%E3%81%99%E3%82%8B
プロジェクトのディレクトリで、ビルドしてjarファイルを作成。
gradle build
プロジェクトディレクトリにjarファイルがあることを確認できたらStep3は終了。
Step4 EC2にSSH接続する。
ssh接続にはTeraTarmを使用。
TeraTarmのインストール方法は以下を参考にさせていただきました。
https://eng-entrance.com/teraterm-install
ホストには、EC2インスタンスのパブリック IPv4 DNSを入れる。
ユーザー名は「ec2-user」、パスフレーズは空白のまま。
秘密鍵として先ほど作成したEC2インスタンスのキーペア(.pem)にして、OKを選択。
以上で、EC2へのssh接続は完了。
Step5 java,Tomcatのインストール
EC2へのSSH接続が完了したので、実際にEC2にJava,Tomcatを入れて動かしてみようと思います。
まず、Javaをダウンロードします。
今回はOpenJDK17をインストールします。
https://jdk.java.net/archive/
wget https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_linux-x64_bin.tar.gz
ダウンロードしたgzipを展開します。
tar xvf openjdk-17_linux-x64_bin.tar.gz
展開したjdkを移動させます。
sudo mv jdk-17 /opt/
これだけだとJavaは使えないので、pathを通します。
etc/profle.dにシェルスクリプトとしてコマンドを入れておくと、ログイン時に読み込んでくれます。
*teeコマンドは標準入力した内容を指定したファイル(今回の場合、etc/profle.d/jdk.sh)に出力してくれます。
sudo tee /etc/profile.d/jdk.sh <<EOF
export JAVA_HOME=/opt/jdk-17
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
先ほど出力したシェルスクリプトを実行して、環境変数を設定します。
source /etc/profile.d/jdk.sh
javaがインストールされているか確認します。
java --version
インストールされていることを確認できたら、次はTomcatをインストールします。
Tomcatのダウンロードリンクは変わるかもしれないので、各自以下のサイトから確認してからcurlコマンドを打つことをおすすめします。
Coreのtar.gzのリンクを確認してください。
https://tomcat.apache.org/download-90.cgi
curl -O https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.86/bin/apache-tomcat-9.0.86.tar.gz
ダウンロードしたgzipを展開する。
tar xvf apache-tomcat-9.0.86.tar.gz
/opt/tomcat-9に移動させる。
sudo mv ~/apache-tomcat-9.0.86.tar.gz /opt/tomcat-9
ここまで来たら後はjarファイルを置いて、起動させるだけです!
Step6 jarファイルの配置&Hello World
EC2に接続してある状態でTeraTarmにStep3で作成したjarファイルをドロップ&ドラックします。すると、以下のように送信先が聞かれるのでそのままOKを押してください。
jarファイルがホームディレクトリにダウンロードされていることを確認します。
$ ls -l
-rw-r--r--. 1 ec2-user ec2-user 21289217 Feb 27 12:06 demo-0.0.1-SNAPSHOT.jar
それでは、実際にjarファイルを使ってjavaアプリケーションを起動してみます。
java -jar 任意のjarファイル
http://[EC2のIPアドレス]:8080にアクセスすると、無事HelloWorldされていることを確認できました!
終わりに
今回はEC2上にjarファイルを配置し、HelloWorldしてみました。
至らない部分やミス等あるかもしれませんが、どなたかの役に立てれば幸いです。
次回は、実際にJavaアプリケーションを作成し、RDS等も使いながらAWS上でアプリケーションを動かしたいと思います!