前提条件
AWSアカウントを持っている
AWS Management Consoleにアクセスできる
ステップ 1: Amazon EC2インスタンスの作成
AWS Management Consoleにログインし、EC2ダッシュボードに移動します。
「Launch Instance」をクリックして新しいインスタンスを作成します。
**Amazon Machine Image (AMI)**の選択:
Ubuntu Server 20.04 LTSを選択します。
インスタンスタイプの選択:
t2.micro(無料利用枠対象)を選択します。
インスタンス設定の構成:
デフォルト設定のままで進めます。
ストレージの追加:
デフォルトの8GBから16GBに変更します。
タグの追加(オプション):
タグは任意ですが、後でインスタンスを管理しやすくするために追加します。
セキュリティグループの設定:
新しいセキュリティグループを作成し、以下のルールを追加します。
SSH(ポート22):自分のIPアドレスからのアクセスを許可
HTTP(ポート80):どこからでもアクセスを許可
HTTPS(ポート443):どこからでもアクセスを許可
Postgres(ポート5432):必要に応じてアクセス元を指定
確認して起動:
「Review and Launch」をクリックし、設定内容を確認して「Launch」をクリックします。
既存のキーペアを選択するか、新しいキーペアを作成してダウンロードします(このキーペアを使ってインスタンスにSSHでアクセスします)。
ステップ 2: インスタンスへの接続とセットアップ
SSHでインスタンスに接続:
ダウンロードしたキーペア(.pemファイル)を使ってSSHで接続します。
ssh -i "your-key.pem" ubuntu@your-ec2-public-dns
システムの更新:
sudo apt update
sudo apt upgrade -y
Pythonと必要なパッケージのインストール:
sudo apt install -y python3 python3-pip
pip3 install fastapi uvicorn psycopg2-binary
PostgreSQLのインストールと設定:
sudo apt install -y postgresql postgresql-contrib
sudo systemctl start postgresql
sudo systemctl enable postgresql
PostgreSQLの設定:
PostgreSQLにログインし、ユーザーとデータベースを作成します。
sudo -i -u postgres
psql
CREATE DATABASE mydatabase;
CREATE USER myuser WITH PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
\q
exit
ステップ 3: FastAPIアプリケーションの作成
FastAPIアプリケーションのディレクトリを作成:
mkdir ~/myfastapiapp
cd ~/myfastapiapp
FastAPIアプリケーションのコードを作成:
main.pyファイルを作成して以下のコードを追加します。
rom fastapi import FastAPI
import psycopg2
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
@app.get("/db")
def read_db():
conn = psycopg2.connect(
dbname="mydatabase",
user="myuser",
password="mypassword",
host="localhost"
)
cur = conn.cursor()
cur.execute("SELECT version();")
db_version = cur.fetchone()
cur.close()
conn.close()
return {"db_version": db_version}
Uvicornを使ってアプリケーションを起動:
uvicorn main:app --host 0.0.0.0 --port 8000
ステップ 4: Nginxの設定
Nginxのインストール:
sudo apt install -y nginx
Nginx設定ファイルを編集:
sudo nano /etc/nginx/sites-available/fastapi
以下の設定を追加:
server {
listen 80;
server_name your-domain-or-ip;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
設定を有効にしてNginxを再起動:
sudo ln -s /etc/nginx/sites-available/fastapi /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
ステップ 5: Route 53でドメイン設定
Route 53でホストゾーンを作成:
AWS Management ConsoleのRoute 53に移動し、「Create Hosted Zone」をクリックしてドメインを設定します。
Aレコードの追加:
ドメインのAレコードを作成し、EC2インスタンスのパブリックIPアドレスを指定します。
SSL証明書の設定:
AWS Certificate Manager(ACM)でSSL証明書を作成し、CloudFrontやALBで使用します。
まとめ
これで、FastAPIアプリケーションとPostgresデータベースがEC2インスタンスで動作し、Reactアプリケーションと通信できるようになります。Route 53を使用してドメインを設定し、SSL証明書を適用することで、セキュアな通信も実現できます。