Next.jsでAWS Amplifyを使ってPDFアップロード機能を実装、Fast APIにPOST(こちらはApp runner)
更新日:2025/03/16

Next.jsプロジェクトをAmplifyにデプロイ
今いるディレクトリにNext.jsをセットアップ
npx create-next-app@latest ./
githubリポジトリ作成、httpsのURLを下記コードに張り付けてプッシュ
git remote add origin https://github.com/xxxx
shadcn/ui セットアップ
# shadcn/uiの初期化
npx shadcn@latest init
# 必要なコンポーネントをインストール
npx shadcn@latest add card
npx shadcn@latest add button
npx shadcn@latest add progress
AWSのAmplifyからGitHubを選択してデプロイ
問題点 | 内容 | 対処法 |
---|---|---|
fs.writeFile が使えない | Lambda(Amplify)では /tmp 以外は書き込めない | 一時保存なら /tmp を使う |
public/uploads/ に保存してもアクセスできない | ビルド時に固定化されるため、書き込み内容は見えない | S3へアップロードする |
temporary(テンポラリ)
S3にPDFをアップロード
[
{
"AllowedOrigins": ["http://localhost:3000", "https://your-domain.com"],
"AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD", "OPTIONS"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3600
}
]
Amplify に Next.js アプリをデプロイについて整理
そもそも通常のNode.jsサーバーにデプロイする場合(例:VPSやEC2)の場合
npm run build
npm run start
Node.js のサーバーを起動
⬇️
そのサーバーが SSR ページをリクエストごとに生成
→ つまり「SSR処理は常に自前のサーバーで処理してる」、アプリ全体が 1つのNodeプロセスで動いてる
Amplify に Next.js アプリをデプロイする場合(サーバーレス)
AmplifyはSSR/APIの必要な部分を切り出し、SSRページの処理を Lambda@Edge関数として個別に配置
ページアクセス時にそのLambdaが一時的に起動してSSRする
→ つまり「自前でNodeサーバーは立ち上がってない!必要なときだけLambdaで動く!」
実はVercelもAmplifyと同じ「サーバーレス型」ただし、VercelはNext.jsの「公式ホスティング」で、対応範囲がめちゃ広い
Middleware、Edge Functions、StreamingなどのNext.js最新機能に強い
Node.jsを使わずLambda(Amplify)だけでSSRする場合の制限事項
Lambda関数は書き込みできるのは /tmp のみのため、アップロードしたファイルをpublic/uploads保存に保存することはできません
/tmpについて
サーバー側のローカルディスク上の一時領域であって、
クライアント(ブラウザ)からアクセスできない!
/tmpに保存する場合
「保存したら外部に送りたい」って用途だったら、このまま /tmp に一時保存→送信→削除の流れにすればOK!
または保存せず、直接 POST でストリーム転送する方法もあるよ〜。
一般的&シンプルにFastAPIをデプロイする方法(AWS編)
方法 | 特徴 | メリット | デメリット | 推奨ケース |
---|---|---|---|---|
Fargate (ECS) | サーバレスコンテナ | 自由度高、常時稼働OK、運用楽 | 初期設定やや多め | 標準的なAPI運用に◎ |
Lambda + API Gateway | 関数型API | スケーラブル、完全サーバレス | 起動遅い、制限多め | 軽量API・Webhook向け |
EC2 + nginx | 仮想サーバ | 完全自由、チューニング可 | 運用コスト・セキュリティ対応必要 | 学習やがっつり運用 |
Amplify | フロント向けMBaaS | CI/CD込み、簡単デプロイ | FastAPI非対応、裏でLambda | React等との併用時のみ |
App Runner | フルマネージドWebアプリ実行環境 | 最速で公開、HTTPSも簡単 | 実行コストやや高 | 短期PoCやお試しに◎ |
Elastic Beanstalk | PaaS型アプリ実行環境 | デプロイ簡単、監視付き | 古め、挙動が重いことも | レガシー互換・お手軽運用 |
# fastapi-apprunnerという名前の新しいディレクトリを作成します
mkdir fastapi-apprunner
# 作成したfastapi-apprunnerディレクトリに移動します
cd fastapi-apprunner
# venvという名前のPython仮想環境を作成します
python -m venv venv
# 作成したvenv仮想環境を有効化(アクティベート)します(LinuxやmacOSのシェルで使用)
source venv/bin/activate
# WindowsのPowerShellで仮想環境をアクティブ化するには、以下のコマンド
.\venv\Scripts\Activate
(venv) PS C:\ida_test\work\fastapi-apprunner>
# FastAPIとUvicorn(ASGIサーバー)をインストールします
pip install fastapi uvicorn
# 現在の仮想環境にインストールされているパッケージとそのバージョンをrequirements.txtファイルに書き出します
pip freeze > requirements.txt
「venvでローカル実行もして、結局Dockerでも動かす」って、ちょっと二重構成っぽく見えますが、一般的な開発フローです
- venvは開発のためのパワーツール(ローカルチェック)
- Dockerはデプロイ用の本番対応パッケージ
venvで速く試す → 問題なさそう → Dockerでまとめてデプロイ
仮想環境(venv)がアクティブなまま docker buildします
docker build -t fastapi-apprunner .
docker run -p 8000:8000 fastapi-apprunner
App Runner デプロイ手順(GitHub 経由)
① GitHub と App Runner を接続する
AWS マネジメントコンソールへログイン
検索バーで「App Runner」と入力してサービスに移動
「Create service(サービスを作成)」をクリック
② ソースを指定する
ランタイムでDockerfileが指定できないので、下記の手順に変更
Dockerfile を元に AWS App Runner へデプロイ(ECR 経由)
App Runner + ECR + Dockerfile の組み合わせは、コンテナ化されたアプリケーションをAWSで簡単にデプロイ・運用するためのサーバーレスコンテナサービスです。
全体の流れ
- Dockerfileでアプリをコンテナ化
- ECRにDockerイメージをプッシュ
- App RunnerがECRからイメージを取得してデプロイ
AWS CLI をインストール
インストールを確認
aws --version
出力例
aws-cli/2.27.26 Python/3.13.3 Windows/11 exe/AMD64
aws configureで
AWS コンソールで IAM ユーザー作成 & アクセスキー取得
許可を設定→「ポリシーを直接アタッチする」
- AmazonEC2ContainerRegistryFullAccess
- AWSAppRunnerFullAccess
上記でユーザー作成したら、アクセスキーを取得します
AWS Access Key ID [None]: IAMで作成したアクセスキー(通常20文字)
AWS Secret Access Key [None]: 対応する秘密キー(40文字の長い文字列)
Default region name [None]: ap-northeast-1
Default output format [None]: json
ECRリポジトリを作成
aws ecr create-repository --repository-name fastapi-apprunner --region ap-northeast-1
“repositoryUri”: “xxxxxxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/fastapi-apprunner”,
上記をメモ
Docker を ECR にログイン
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
実行後
Login Succeeded
Docker イメージにタグをつける(ECR用)
docker tag fastapi-apprunner xxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/fastapi-apprunner
Docker イメージを ECR に push!
docker push xxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/fastapi-apprunner
App Runner のデプロイ
ECR アクセスロール
AppRunnerECRAccessRole
項目 | 入力内容 | 備考 |
---|---|---|
サービス名 | fastapi-apprunner (など任意) | 英数字・ハイフンOK、スペースはNG |
仮想CPU | 1 vCPU | そのままでOK(選べるけど、軽量APIならこれで十分) |
仮想メモリ | 2 GB | これも基本OK |
環境変数 | 任意(必要があれば ENV=prod など) | 無ければスキップでOK |
ポート番号 | 8080 | Dockerfileで CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"] にしてるならこれでOK! |
FastAPIコード更新後の再デプロイ手順(App Runner × ECR)
ステップ1:Docker イメージを再ビルド
※ ソースコードのあるディレクトリで実行
docker build --no-cache -t fastapi-apprunner .
ステップ2:ECR用にタグを付ける
docker tag fastapi-apprunner xxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/fastapi-apprunner
ステップ3:ECR に push
※ ログインしてから push すること!
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
docker push xxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/fastapi-apprunner
ステップ4:App Runner 側で再デプロイ
- AWS マネジメントコンソールにアクセス
- App Runner → 対象のサービスを選択
- 「デプロイ」タブを開く
- [最新のイメージに再デプロイ] ボタンをクリック
※ オプション:
初回設定時に「ECRイメージの更新で自動デプロイを有効にする」設定にしておけば、pushしただけで自動反映されます。

-
検索
(例) debug search etc.. -
カテゴリー
-
mixhostでのWordPress利用について
更新日:2024/04/02
303 view
-
scrollHint
更新日:2024/03/13
251 view
-
XML Sitemap Generator for Google不具合のダウングレード対応、代替プラグイン
更新日:2024/06/13
243 view
-
【SnowMonkey】納品までのフローまとめ
更新日:2025/02/15
164 view
-
【Snow Monkey】ショートコードで編集画面で任意の場所にHTMLファイルを挿入
更新日:2025/04/18
131 view
-
【Googleサーチコンソール】検索画面で表示させたくない「Googleのインデックス削除」
更新日:2024/06/07
131 view
-
tailwindcss使い方
更新日:2024/03/13
125 view
-
キーワード検索で上位表示させる方法【SEO】
更新日:2023/10/28
120 view
-
Recline: GitHub Copilotで動作するClaude 3.5 Sonnet搭載の開発支援ツール
更新日:2025/01/20
115 view
-
WordPressプラグイン「All-in-One WP Migration」のトラブル
更新日:2022/03/31
84 view
-
ワードプレスセキュリティー対策まとめ【2025年】「site guard wordpress」「BackWPup バージョン5でUI変更!?」
更新日:2025/02/25
77 view
-
VSCodeで開発効率を劇的に向上させる!Roo Code(Roo-Cline)プラグイン完全ガイド
更新日:2025/04/06
75 view
-
Express、FastAPIを使用し、二重fetch構成のメリット
更新日:2025/04/26
51 view
-
SSHを使用してGitHubのリポジトリをクローン、複数の接続元で公開鍵をディレクトリで区別する方法
更新日:2025/01/13
49 view
-
「JSONスキーマ」と「Few-shot Learning」で実現する次世代生成AIソフトウェア開発の可能性
更新日:2025/07/06
44 view
-
Supabase 初心者向け解説、Supabase CLI インストール(Scoop)
更新日:2025/06/07
44 view
-
リファクタリング【VSCode Javasctipt Python】
更新日:2025/03/09
36 view
-
Next.jsでAWS Amplifyを使ってPDFアップロード機能を実装、Fast APIにPOST(こちらはApp runner)
更新日:2025/06/06
36 view
-
形態素解析とは?初心者でもわかるツールの使い方と実践例
更新日:2025/02/08
34 view
-
VSCodeオススメプラグイン一覧「 Pretter – Code formatter」「PHP Intelephense 」
更新日:2025/07/07
31 view