1
0

【Java】EC2でHello Worldするまで

Posted at

はじめに

今回は、AWS EC2上にJavaをインストールし、Hello Worldしてみました。
備忘録として、記録します。

環境

・Windows 11
・エディタはVScodeを使用

前提

・AWSのアカウントを持っていること
・IAMユーザーを一つ作成してあること
*AWSのベストプラクティス的にルートユーザーで作業することは推奨されていないため。

IAMユーザーの作り方は以下を参照
https://qiita.com/kzykmyzw/items/ca0c3276dfebb401f7d8

今回やること

EC2上にJarファイルをデプロイし、アクセスできる。

Step1 セキュリティグループの作成

まず、はじめに任意のIAMユーザーでコンソールにログインし、EC2を開きます。
そして、右下にあるセキュリティ・グループを押して、右上にあるセキュリティグループを作成を選択します。
image.png
別途VPCを作成してもいいですが、インバウンド以外は基本デフォルトでいいです。
IGWを作成したりするのが面倒だったので、今回はデフォルトのVPCを使っています。

インバウンドについてですが、すべてのIPアドレスからのアクセスを許可するために0.0.0.0/0にしておきます。(ソースからAnywhere-IPv4を選択するとできます)
カスタムTCPのポートは8080にしておきます。
image.png

Step2 EC2インスタンスの作成

コンソールからEC2を開き、インスタンスの起動を選択してEC2インスタンスを作成する。
specは以下の通り
・AMI:Amazon Linux 2023 AMI 2023.3.20240219.0 x86_64 HVM kernel-6.1
・インスタンスタイプ:t2.micro

キーペアを作成し、セキュリティグループはStep1で作成したものを適用する。
*キーペアはSSH接続する際に使用するので、適切に管理してください。
image.png

Step3 Javaアプリケーション&jarファイル作成

vscodeで「ctrl+shift+p」でコマンドパレットを起動し、create java Projectを選択。
ビルドツールはGradleを選択します。
verは各々都合のいいものを選択してください。
今回、Javaアプリケーションを作成することは目的ではないので、割愛します。
Spring Bootを使い以下のようなコントローラーを作成し、「index.html」でHello Worldを表示します。

Mycontroller.java
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";
	}
}

index.html
<!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を入れる。
image.png
ユーザー名は「ec2-user」、パスフレーズは空白のまま。
秘密鍵として先ほど作成したEC2インスタンスのキーペア(.pem)にして、OKを選択。
以上で、EC2へのssh接続は完了。
image.png

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を押してください。image.png
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されていることを確認できました!
image.png

終わりに

今回はEC2上にjarファイルを配置し、HelloWorldしてみました。
至らない部分やミス等あるかもしれませんが、どなたかの役に立てれば幸いです。
次回は、実際にJavaアプリケーションを作成し、RDS等も使いながらAWS上でアプリケーションを動かしたいと思います!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0