2024年7月10日水曜日

EC2にRDSから情報を取得し、FlaskでWebアプリとして表示させる

 今回はEC2にRDSから情報を取得し、FlaskでWebアプリとして表示させることをやっていきます。

事前知識

・EC2でサーバを立ち上げてクラウドシェルで接続(https://smizunolab.blogspot.com/2023/10/ec2.html)

・Pythonでデータベースに情報を格納する(https://smizunolab.blogspot.com/2024/07/python.html)

・EC2でjupter-notebookをインストールする(https://smizunolab.blogspot.com/2023/11/ec2jupter-notebook.html)

1. EC2を立ち上げ、Flaskをインストールする

上記の「EC2でサーバを立ち上げてクラウドシェルで接続」の方法でEC2にサーバを立ち上げます。また「EC2でjupter-notebookをインストールする」にあるpipのインストールを実施しといてください。

$ sudo yum install python3-pip

今回はec2-userでFlaskをインストールしていきます。

(1) Flaskのインストール

$ pip install Flask mysql-connector-python

(2) Flaskアプリケーションの設置 : ホームディレクトリに作成

$ mkdir my_flask_app

$ cd my_flask_app

$ touch app.py

$ mkdir templates

$ touch templates/index.html

(3) app.pyの作成:

from flask import Flask, render_template
import mysql.connector
app = Flask(__name__)
def get_db_connection():
conn = mysql.connector.connect(
host="localhost",
user="root",
passwd="LinuxOS99@",
database="nasa"
)
return conn
@app.route('/')
def index():
conn = get_db_connection()
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM apod")
apod_data = cursor.fetchall()
cursor.close()
conn.close()
return render_template('index.html', apod_data=apod_data)
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
view raw gistfile1.txt hosted with ❤ by GitHub

ホストやパスワードは自分の環境に揃える

(4) index.htmlの作成:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>APOD</title>
</head>
<body>
<h1>Astronomy Picture of the Day</h1>
{% for apod in apod_data %}
<div>
<h2>{{ apod.title }}</h2>
<img src="{{ apod.url }}" alt="{{ apod.title }}">
<p>{{ apod.explanation }}</p>
</div>
{% endfor %}
</body>
</html>
view raw gistfile1.txt hosted with ❤ by GitHub

templates/index.html にコードを書き込みます。

(5) セキュリティグループの追加 : インバウンドルールに5000を追加(Flaskのデフォルトポートが5000)

(6) app.pyの実行 : python3 app.py
(7) http://publicDNS:5000 でアクセスし、データベースの内容を確認する

もしうまくいかない場合は以下をチェック
・データベース(今回はRDS)に接続ができているか
・データベース上にデータベース(nasa)、テーブル(apod)が保存されているか
・Flaskのインストールができているか
・5000番ポートでのアクセスができているか(セキュリティグループにインバウンドルールが追加されているか)

0 件のコメント:

コメントを投稿