在春天和Raspberry Pi上显示传感器获取的数据#03AWS版本
之前所做过的事情
-
- 在本地PC上使用Docker构建数据库和Spring构建服务器
- 从Ras Pi (树莓派) 获取传感器数据并将数据注册到Docker内的数据库中
这次要做的事情是什么?
将之前在本地电脑上进行的工作迁移到AWS上。
准备并测试在AWS上运行docker和docker-compose。
容器化技术中的docker功能

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命令拉取存储库时出现了身份验证错误(可能是由于尝试克隆私有存储库),因此我们从解决此问题开始!
参考にしながら、操作を進めて、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命令来创建克隆。
[ec2-user@docker-app-ec2 ~]$ git clone git@github.com:mrAkito/ComfortServiceDemo.git
[ec2-user@docker-app-ec2 ~]$ ls
ComfortServiceDemo hello-world-docker
ComfortServiceDemo的克隆创建已完成。
启动容器
[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)
请确认连接。


我确认了初始数据的存在!同时也确认了安全组中的端口开放设置是正确的!
修改从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的云环境中!
验明动作

图表成功显示了!!迁移到AWS完成了!!这次就到这里吧!!
这是第1弹(春季篇)
这是第2弹(树莓派篇)
这是问题解决篇(守护化)
额外赠品和未来展望
-
- docker、docker-composeで立てたコンテナをEC2に移行するのに結構コストの高いインスタンスを借りないと無理かと思っていたけどt2.microの8GiBで正常動作したのがびっくりした。(今後の実装が怖いなぁ、、、)
-
- RasPiからデータベースに接続してるが、サーバ(Java側)にデータを受け渡して処理をしたい。(Socket通信とか)
-
- slackのAPIで不快指数の閾値を設定して通知を行うとかやってみたい。
- Azure、GCPでも同じようにできるのか??メリットやデメリットの違いが気になる。