カテゴリ: Flask 更新日: 2025/12/31

Python FlaskアプリをAWS EC2にデプロイする基本とコツをわかりやすく解説

FlaskアプリをAWS EC2にデプロイする基本とコツをわかりやすく解説
FlaskアプリをAWS EC2にデプロイする基本とコツをわかりやすく解説

先生と生徒の会話形式で理解しよう

生徒

「Flaskで作ったアプリをAWS EC2という場所に公開したいです。どうすればいいですか?」

先生

「EC2はAWSの仮想サーバーです。お家(あなたのパソコン)ではなく、クラウド上のサーバーにアプリを置くイメージです。」

生徒

「難しい設定が多そうで心配です…」

先生

「大丈夫です。今回は初心者でもわかるように、ステップを少しずつ丁寧に説明していきますね。」

1. EC2とは何?初心者向けにやさしく説明

1. EC2とは何?初心者向けにやさしく説明
1. EC2とは何?初心者向けにやさしく説明

AWS EC2(イーシーツー)は、Amazonが提供しているインターネット上の仮想サーバーです。仮想サーバーとは、実際のパソコンの代わりに、クラウド上に用意されたコンピューターのことを指します。

EC2は24時間ずっと動き続けるため、Flaskアプリを停止せずに公開し続けることができます。自分のパソコンでFlaskを起動すると、電源を切った瞬間にアプリも止まってしまいますが、EC2ならその心配はありません。

イメージとしては「電源が常についた貸しパソコン」をインターネット上で借りている感じです。そこにPythonやFlaskをインストールし、自分のアプリを置いて動かします。

EC2でできること(超かんたん例)


# EC2にログインしたあとに実行できる例
python3 --version

このように、EC2に接続すると自分のパソコンと同じようにコマンドを実行できます。ここにFlaskアプリを置くことで、世界中からアクセスできるWebアプリになります。

2. デプロイとは?本番環境に置く意味を知ろう

2. デプロイとは?本番環境に置く意味を知ろう
2. デプロイとは?本番環境に置く意味を知ろう

「デプロイ(deploy)」とは、自分のパソコンで作ったプログラムを、外部の人が使える場所に置く作業のことです。Flaskアプリの場合、ローカル環境(自分のPC)からAWS EC2のようなサーバーへ移し、インターネット経由でアクセスできる状態にします。

開発中は localhost にアクセスして動作確認をしますが、これは自分しか見られません。デプロイを行うことで、URLを知っている人なら誰でもブラウザからアプリを開けるようになります。

また「本番環境」とは、テスト用ではなく、実際にユーザーが使う前提で動かす環境のことです。安定して動き続けることや、途中で止まらないことが重要になります。

デプロイ前と後の違い(イメージ)


# デプロイ前(自分のPCだけで見える)
http://localhost:5000

# デプロイ後(インターネットからアクセス可能)
http://EC2のIPアドレス:8000

このように、デプロイは「自分用のアプリ」を「公開アプリ」に変える大切なステップです。EC2に置くことで、Flaskアプリは本番用として動き始めます。

3. 前準備:AWSアカウントとEC2インスタンスの作成

3. 前準備:AWSアカウントとEC2インスタンスの作成
3. 前準備:AWSアカウントとEC2インスタンスの作成

FlaskアプリをEC2にデプロイするには、最初にAWSアカウントの作成EC2インスタンスの起動が必要です。AWSには無料利用枠(フリーティア)が用意されているため、学習目的であれば大きな費用をかけずに試せます。

アカウント作成後、AWSの管理画面(マネジメントコンソール)にログインし、サービス一覧からEC2を選択します。「インスタンスを起動」をクリックすると、サーバー作成の画面に進みます。

  • AWS無料利用枠でアカウント登録
  • EC2を選択し、「インスタンスを起動」をクリック
  • OS(Amazon Linux 2 または Ubuntu)を選択

インスタンス作成時にはキーペア(.pemファイル)を作成します。これは後でSSH接続するときに使う「サーバーの鍵」です。なくすと接続できなくなるため、大切に保管してください。

初心者向けメモ:インスタンス作成後に確認すること


# EC2管理画面でチェックするポイント
・インスタンスが「実行中」になっているか
・パブリックIPアドレスが表示されているか

ここまで準備ができれば、EC2という「空のサーバー」が用意できた状態です。次のステップでは、このサーバーにSSHで接続していきます。

4. SSHでEC2に接続する方法

4. SSHでEC2に接続する方法
4. SSHでEC2に接続する方法

SSH(エスエスエイチ)は、自分のパソコンからEC2サーバーを遠隔操作するための仕組みです。画面越しに操作するというより、「コマンドで直接つながる電話」のようなイメージを持つとわかりやすいです。

EC2を作成するときにダウンロードした秘密鍵(.pemファイル)は、この接続に必要な“本人確認用のカギ”です。ユーザー名・パスワードの代わりに、この鍵を使って安全にログインします。


ssh -i path/あなたの鍵.pem ec2-user@EC2のIPアドレス

コマンドを実行してエラーが出ず、ユーザー名が表示されれば接続成功です。これ以降は、EC2サーバーの中で操作している状態になります。

初心者向けチェックポイント


# 接続できたかを確認する簡単なコマンド
pwd

サーバー上のパス(例:/home/ec2-user)が表示されればOKです。ここからPythonやFlaskのセットアップを進めていきます。

5. Flask環境をサーバーに準備しよう

5. Flask環境をサーバーに準備しよう
5. Flask環境をサーバーに準備しよう

SSHでEC2に接続できたら、次はFlaskアプリを動かすための環境づくりを行います。ここでは、サーバーにPythonを用意し、アプリ専用の仮想環境を作って、必要なライブラリを入れていきます。

仮想環境とは、サーバーの中に作る「アプリ専用の作業スペース」です。他のアプリと影響し合わないため、本番環境では必ず使うのが一般的です。


# パッケージ情報を最新にする
sudo yum update       # Ubuntuの場合は sudo apt update

# Pythonと仮想環境、Gitをインストール
sudo yum install python3 python3-venv git

# 仮想環境を作成
python3 -m venv venv

# 仮想環境を有効化
source venv/bin/activate

# FlaskとGunicornをインストール
pip install flask gunicorn

仮想環境が有効になると、コマンドの先頭に (venv) と表示されます。これが出ていれば準備は成功です。この状態でFlaskアプリを動かすことで、サーバー上でも安全に開発・運用ができます。

6. Flaskアプリをサーバーにアップロードしよう

6. Flaskアプリをサーバーにアップロードしよう
6. Flaskアプリをサーバーにアップロードしよう

Flask環境の準備ができたら、次は自分のパソコンで作ったFlaskアプリをEC2サーバーに配置します。ここでは初心者でも扱いやすい「Git」を使った方法を紹介します。

Gitを使うと、アプリのファイル一式をまとめてサーバーにコピーできます。ファイルを1つずつ送る必要がなく、更新もしやすいため、本番環境ではよく使われる方法です。


# Gitが入っていない場合はインストール
sudo yum install git

# GitHubなどに置いたリポジトリを取得
git clone あなたのGitリポジトリURL

# アプリのフォルダへ移動
cd リポジトリ名

# 必要なライブラリをまとめてインストール
pip install -r requirements.txt

この作業で、EC2サーバー内にFlaskアプリのファイルが配置され、実行に必要なライブラリもそろいます。ここまで完了すれば、サーバー上でFlaskアプリを動かす準備はほぼ整った状態です。

7. GunicornとSystemdで常に動かそう

7. GunicornとSystemdで常に動かそう
7. GunicornとSystemdで常に動かそう

Gunicorn(ガニコーン)は本番環境向けの実行エンジンです。Systemd(システムディー)は、サーバー起動と同時にアプリを自動で動かす設定です。


# gunicorn起動テスト
gunicorn --bind 0.0.0.0:8000 app:app

ブラウザでEC2のIPとポート8000にアクセスすると、Flaskアプリが表示されます。

8. Systemdユニットファイルの作成

8. Systemdユニットファイルの作成
8. Systemdユニットファイルの作成

アプリを自動で起動させたいときは、/etc/systemd/system に設定ファイルを作ります。


sudo tee /etc/systemd/system/flask.service <<EOF
[Unit]
Description=Flask App

[Service]
User=ec2-user
WorkingDirectory=/home/ec2-user/リポジトリ名
Environment="PATH=/home/ec2-user/リポジトリ名/venv/bin"
ExecStart=/home/ec2-user/リポジトリ名/venv/bin/gunicorn --bind 0.0.0.0:8000 app:app

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable flask
sudo systemctl start flask

9. セキュリティグループとポート設定

9. セキュリティグループとポート設定
9. セキュリティグループとポート設定

AWSのEC2には「セキュリティグループ」という、ネットの出入り口の鍵があります。ここでポート8000や80番を開けると、インターネットからアプリにアクセスできます。

10. ApacheやNginxでリバースプロキシをおすすめする理由

10. ApacheやNginxでリバースプロキシをおすすめする理由
10. ApacheやNginxでリバースプロキシをおすすめする理由

Gunicorn単体でも動きますが、ApacheやNginxというWebサーバーを使うと、SSL(https)や画像配信が速くなるなどのメリットがあります。

ここでは「まずはGunicornだけで動かす」方法を紹介しました。

11. Flaskアプリを更新したいときの手順

11. Flaskアプリを更新したいときの手順
11. Flaskアプリを更新したいときの手順

ソースコードを編集したら、以下のコマンドで再起動します。


sudo systemctl restart flask

これで最新のコードに切り替わります。

12. よくあるつまずきポイントと解決法

12. よくあるつまずきポイントと解決法
12. よくあるつまずきポイントと解決法
  • SSH接続できない→ 鍵のアクセス権(chmod 400)を設定してください。
  • ポートが開かない→ AWSのセキュリティグループで正しくポート8000や80番を許可しているか確認。
  • Gunicorn起動エラー→ 仮想環境(venv)のPATHやapp:appの指定を見直しましょう。

13. EC2デプロイのメリットと注意点

13. EC2デプロイのメリットと注意点
13. EC2デプロイのメリットと注意点
  • 仮想サーバーを自由に設定できる
  • 本番環境に近いリアルな設定が学べる
  • サーバー費用がかかる(無料枠終了後)
  • SSLやリバースプロキシは自分で設定する必要があります

まとめ

まとめ
まとめ

AWS EC2にFlaskアプリを公開する作業は、初めて取り組むと難しく感じられますが、ひとつひとつの流れを丁寧に理解していけば必ずできるようになります。今回の内容では、まずEC2という仮想サーバーの仕組みから始まり、デプロイの意味、SSH接続の方法、Flaskの動かし方、Gunicornの活用、Systemdによる自動起動、そしてセキュリティグループの調整やリバースプロキシの考え方まで、一連の流れを学んできました。とくに、初心者がつまずきやすいポイントとして多いのが、SSHの鍵ファイルの扱い、Linuxコマンド操作、パスの指定、Gunicornの起動ミス、セキュリティグループの設定漏れなどですが、これらは経験を重ねることで自然と理解が深まっていきます。 FlaskアプリをEC2で運用するということは、自分のアプリが「インターネット上で公開される」という大きな一歩であり、単にコードを書く以上の学びが必要になります。クラウドサーバーという環境で動かす以上、ネットワークやセキュリティの基礎、Webサーバーの仕組み、Linuxの基本操作など、さまざまな知識がつながり、理解が広がっていきます。今回のステップを通じて、アプリを本番環境に近い構成で動かす基礎が身につき、クラウドの知識を応用できる大きな力になります。 また、クラウドサーバーでアプリを運用する際に重要なのは、安定してアプリを動かし続けるための仕組みづくりです。Gunicornによる本番環境向けの実行、Systemdでの常時起動、EC2のネットワーク設定やポート開放、そしてリバースプロキシによる拡張性などは、実際のサービスでも必要となる実践的な内容です。とくにSystemdを活用した「サーバー起動と同時にアプリが自動で立ち上がる仕組み」は、運用で欠かせない大切なポイントであり、初心者のうちに使い方を理解しておくと非常に役に立ちます。 セキュリティ面では、SSH鍵の適切な権限設定や、セキュリティグループによるポート管理が重要です。どのポートを開けるのか、どこからアクセスを許可するのか、どのサービスがどのポートで動いているのか、これらを把握することによって安全にアプリを公開できます。また、ログイン試行や不正アクセスを想定した構成を組むことで、より安心してアプリを運用することができるようになります。 さらに、アプリを公開したあとに更新作業が必要になる場面では、Gitを使ったコード管理、Systemdを使った再起動手順などが役立ちます。開発したアプリを安全に、確実に、本番環境へ反映することは、サービス運営においてとても大切な流れです。今回の学びでは、その更新作業の流れについても実際に触れ、確実にアプリが最新状態になる手順を習得できました。 EC2は自由度の高いサーバー環境であり、自分の好きな構成でアプリを運用できるという大きな魅力があります。その一方で、クラウドの知識、ネットワークの知識、Linux操作の知識を少しずつ身につける必要があります。しかし、ひとつひとつを丁寧に取り組めば、決して難しい壁ではありません。今回の内容を通して、Flaskアプリをクラウド上に展開するまでの全体像をしっかり理解し、自分の力でサービスをインターネット上に公開できるようになる実践的な力が身につきます。 初めてのEC2デプロイは大きな挑戦ですが、学ぶステップを追うことで自然と理解が深まり、次のアプリ開発やクラウド運用にも必ずつながっていきます。これらの流れを何度も実践することで、環境構築やデプロイ作業にも自信が生まれ、より高度な構成にも挑戦できるようになります。

サンプルコード:GunicornとSystemd連携の基本構成


sudo tee /etc/systemd/system/flask-app.service <<EOF
[Unit]
Description=Flask App with Gunicorn

[Service]
User=ec2-user
WorkingDirectory=/home/ec2-user/myapp
Environment="PATH=/home/ec2-user/myapp/venv/bin"
ExecStart=/home/ec2-user/myapp/venv/bin/gunicorn --bind 0.0.0.0:8000 app:app

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable flask-app
sudo systemctl start flask-app
先生と生徒の振り返り会話

生徒

「EC2にアプリを置くのはとても難しいと思っていましたが、流れが分かると仕組みが見えてきました!」

先生

「実際の動きを体験すると理解が深まりますね。クラウドでアプリを公開するというのは、とても価値のある経験ですよ。」

生徒

「Systemdで自動起動できるようにする仕組みも便利ですね。アプリが勝手に止まらないようにできるなんてすごいです!」

先生

「そのとおりです。運用では自動化がとても大切です。今回の手順を理解できれば、もっと複雑な構成にも挑戦できますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Flaskで作ったアプリをAWS EC2にデプロイするとはどういう意味ですか?

FlaskアプリをAWS EC2にデプロイするとは、自分のローカルパソコンで動かしていたアプリケーションを、インターネット上の仮想サーバー(EC2)に公開して、誰でもアクセスできるようにすることです。
カテゴリの一覧へ
新着記事
New1
Django
Djangoのプロジェクトとアプリの違いを徹底解説!初心者でも迷わない構造の考え方
New2
Flask
FlaskでRQ(Redis Queue)を使って非同期タスク管理を行う方法|初心者向けやさしい解説
New3
Flask
FlaskでCookieを安全に使う方法!HttpOnly・Secureフラグの使い方を徹底解説
New4
Flask
Flask‑RESTfulでREST APIを構築する手順まとめ!初心者向けにやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Flask
Flaskアプリの環境変数設定方法!安全で柔軟な構成を実現しよう
No.3
Java&Spring記事人気No3
Django
DjangoとFlaskの違いを完全比較!初心者でもわかるPythonフレームワーク入門
No.4
Java&Spring記事人気No4
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.5
Java&Spring記事人気No5
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.6
Java&Spring記事人気No6
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説
No.7
Java&Spring記事人気No7
Python
Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
No.8
Java&Spring記事人気No8
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説