LoginSignup
0
0
個人開発エンジニア応援 - 個人開発の成果や知見を共有しよう!-

Spring × Ras Piでセンサから取得したデータを表示する #03AWS編

Last updated at Posted at 2023-09-30

前回までに行ったこと

  1. ローカルのPCでDocker上にデータベース構築とSpringでのサーバ構築
  2. Ras Pi側でセンサからのデータを取得してdocker内のデータベースにデータ登録

今回行うこと

今までローカルのPCで行っていたことをAWSに移行する。

AWSでdocker&docker-composeを動かす準備&テスト

docker部分

[AWS]EC2内でDockerコンテナを起動して、ブラウザからアクセスするを参考にHello Worldの表示まで行った。
スクリーンショット 2023-09-26 165149.png

docker-compose部分

さらにここからdocker-composeを導入する。
EC2(AmazonLinux)にDocker Composeをインストールするを参考に導入する。

docker-composeのバージョン確認&起動確認

[ec2-user@docker-app-ec2 ~]$ docker-compose -v
docker-compose version 1.24.0, build 0aa59064

dockerを起動する

[ec2-user@docker-app-ec2 ~]$ sudo systemctl start docker
[ec2-user@docker-app-ec2 ~]$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-09-27 02:19:32 UTC; 14s ago
     Docs: https://docs.docker.com

たぶん/usr/lib/systemd/system/docker.service; disabledが自動起動の設定で今は無効になっているので自動起動を有効化する。

[ec2-user@docker-app-ec2 ComfortServiceDemo]$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[ec2-user@docker-app-ec2 ComfortServiceDemo]$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-09-27 02:19:32 UTC; 5min ago
     Docs: https://docs.docker.com

自動起動の設定が完了!!

コンテナの自動起動は行わない。(今後追加実装したときに処理落ちすると大変そうなので、、)

git上で保管しているリポジトリからpull、cloneする

$ sudo yum install git
$ git version
git version 2.40.1

git導入後、単純にgit clone ~~でリポジトリを引っ張ろうとすると認証エラーがでた(おそらく原因はプライベートリポジトリをcloneしようとしたため)のでその解決からいこう!!

ec2にgitをインストールしてgithubからgit pullできるようになるまでを参考に操作を進める。

参考の記事ではSSH鍵生成の時にsudoで行っているが、自分がやった際にはsudoなしでできた。

SSH鍵作成

ssh-keygen -t ed25519 -C 「自分のメールアドレス」
vi /home/ec2-user/.ssh/id_ed25519.pub
ssh -T git@github.com
##############
Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

実際にpullしてcloneを作成する

[ec2-user@docker-app-ec2 ~]$ git clone git@github.com:mrAkito/ComfortServiceDemo.git
[ec2-user@docker-app-ec2 ~]$ ls
ComfortServiceDemo  hello-world-docker

ComfortServiceDemoのclone作成が完了した

コンテナを起動する

[ec2-user@docker-app-ec2 ~]$ cd ComfortServiceDemo/
[ec2-user@docker-app-ec2 ComfortServiceDemo]$ docker-compose up -d
Starting db ... done
Starting adminer ... done
Starting app     ... done
[ec2-user@docker-app-ec2 ComfortServiceDemo]$ docker-compose ps
 Name                Command               State                    Ports
-------------------------------------------------------------------------------------------
adminer   entrypoint.sh docker-php-e ...   Up      0.0.0.0:9000->8080/tcp,:::9000->8080/tcp
app       jshell                           Up      0.0.0.0:8080->8080/tcp,:::8080->8080/tcp
db        docker-entrypoint.sh postgres    Up      0.0.0.0:5432->5432/tcp,:::5432->5432/tcp

コンテナが起動していることが確認できた!!

起動したのでアプリ内に入ってビルド&Spring起動

[ec2-user@docker-app-ec2 ComfortServiceDemo]$ docker-compose exec app bash
root@60bb7ca4faa7:/srv# sh gradlew build
Starting a Gradle Daemon, 1 incompatible and 2 stopped Daemons could not be reused, use --status for details

BUILD SUCCESSFUL in 19s
7 actionable tasks: 7 up-to-date
root@60bb7ca4faa7:/srv# java -jar build/libs/app-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::               (v2.7.15)

2023-09-28 04:42:45.391  INFO 146 --- [           main] com.example.app.AppApplication           : Starting AppApplication using Java 11.0.16 on 60bb7ca4faa7 with PID 146 (/srv/build/libs/app-0.0.1-SNAPSHOT.jar started by root in /srv)
2023-09-28 04:42:45.399  INFO 146 --- [           main] com.example.app.AppApplication           : No active profile set, falling back to 1 default profile: "default"
2023-09-28 04:42:48.464  INFO 146 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-09-28 04:42:48.494  INFO 146 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-09-28 04:42:48.496  INFO 146 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.79]
2023-09-28 04:42:48.723  INFO 146 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-09-28 04:42:48.727  INFO 146 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3202 ms
2023-09-28 04:42:50.476  INFO 146 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page template: index
2023-09-28 04:42:50.985  INFO 146 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-09-28 04:42:51.016  INFO 146 --- [           main] com.example.app.AppApplication           : Started AppApplication in 6.852 seconds (JVM running for 7.999)

接続確認

EC2のIPアドレス:8080にアクセス
image.png

同じようにIpアドレス:9000にアクセス
image.png

初期データも入っていることが確認できた!&セキュリティグループでのポート開放も合っていることが確認できた!

Ras Piからのデータベース接続情報を変更する

Raspberry PiのInsertInfo.pyを一部変更する
データベース接続処理のhostをEC2のIPアドレスに変更する

#データベース接続処理
def InsertInit():
    constr = "host='52.68.157.245' port=5432 dbname=dev user=root password='root'"
    connect = psycopg2.connect(constr)
    cursor = connect.cursor()
    
    return cursor, connect

これでローカル環境でたてたdocker内のwebアプリケーションをAWSのクラウド環境に移行することができた!!

動作確認

時間が経った後にEC2のIPアドレス:8080にアクセス
スクリーンショット 2023-09-29 9.32.23.png

ちゃんとグラフが表示された!!
AWSへの移行完了!!!
今回はここまで!!

第1弾(Spring編)はこちら
第2弾(RasPi編)はこちら
問題解決編(デーモン化)はこちら

おまけと今後の展望

  • docker、docker-composeで立てたコンテナをEC2に移行するのに結構コストの高いインスタンスを借りないと無理かと思っていたけどt2.microの8GiBで正常動作したのがびっくりした。(今後の実装が怖いなぁ、、、)
  • RasPiからデータベースに接続してるが、サーバ(Java側)にデータを受け渡して処理をしたい。(Socket通信とか)
  • slackのAPIで不快指数の閾値を設定して通知を行うとかやってみたい。
  • Azure、GCPでも同じようにできるのか??メリットやデメリットの違いが気になる。
0
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
0
0