LoginSignup
0
0

FastAPIとPostgresのデプロイをAWS初心者向けに解説

Posted at

前提条件

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証明書を適用することで、セキュアな通信も実現できます。

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