TOP

AWS 格安構成 ~個人アプリをデプロイしよう~

これは 日本CTO協会24卒 Advent Calendar 2024 の5日目の記事です!

みなさん趣味で開発してますか?

エンジニアにとってアウトプットは大事な要素だと思うのですが、お金がかかっては気軽にできませんね。

今回はAWSのみで (CloudflareやVercel、Supabaseなどに頼らずに) お金をなるだけかけないように頑張っていきたいと思います。

アプリケーションサーバー編

AWSで使えるサーバーは、主要なところだとEC2やECS、Lambdaなどがあります。

無料枠で収めたい場合、サーバーレスのLambdaがほとんど唯一の選択肢になるかと思います。

Lambda

その中でも特にシンプルな方法を以下で紹介します。

① Lambda (標準のランタイムを使う)

Node.jsやPythonといった、Lambdaにランタイムが標準で提供されているものは簡単にデプロイできますね。

特徴は以下のようなものがあります。

ちょっとしたスクリプトを書き散らす場合はこれが便利ですね。

② Lambda (Docker + Lambda Web Adapter)

個人的に気に入っているのはこちらの方法です。

Lambda Web Adapterを使うと、ハンドラーを定義せずとも、HTTPを話すWebサーバーならなんでもLambdaに乗せられるようになります。

特にDockerコンテナを使う場合、Dockerfileに1行追加するだけで動くようになります。

特徴としては、

などがあります。

Rustで試した例もあるので興味があれば見てください!

フロントエンド編

① CloudFront + S3

これが王道かつシンプルな構成かなと思っています。

CloudFront+S3

というような場合によく使います。

Next.jsのApp Routerなどバックエンドの機能が乗ってくる場合は、以下の②がオススメです。

(Lambda@Edgeを使って自前で頑張ることもできますが…)

② Amplify Hosting

Amplify

使ったことが無い方は、AWS純正のVercelだと思ってください。

Amplify自体にはたくさんの機能がありますが、ホスティングの機能のみ使うというイメージです。

なぜ便利かと言うと、

という特徴があるからです。

ほとんど無料枠で動きますが、アカウント開設から1年以上経っている方は、ビルド時間に対して1分単位で課金されるので気をつけましょう。

また、Vercelのビルド時間を想像していると、Amplify Hostingの方は長いと感じるかもしれません。

HTML+CSS+JavaScriptの構成をAmplify Hostingに乗せた記事も書いているので、参考にしてみてください!

データベース編

① DynamoDB

DynamoDB

サーバーレスのLambdaを使うなら、サーバーレスのDynamoDBですよね!

NoSQLなので、RDB畑から参戦する場合は学習コストは飲む必要があります。

注意するべきことは、

2024年11月にオンデマンドキャパシティの価格がグッと下がったため、プロダクション用ワークロードではオンデマンドキャパシティが良さそうです

② EFS + SQLite

EFS

無料でどうしてもRDBが使いたい人のための構成です。

SQLiteのファイルを持ったEFSをLambdaにマウントする形で使います。

SQLiteに対応しているORMなどを使えるのが強みでしょうか。

書き込みの少ないアプリを1年ほど動かしていますが、今のところ耐えています。

先人がいらしたので見てみてください。

③ Aurora Serverless v2

Aurora

Aurora Serverless v2は、今まで最低のキャパシティが0.5 ACUでした。

しかし、2024年11月のアップデートで、ゼロキャパシティへのスケーリングがサポートされました!

多少お金をかける覚悟があれば、RDBを使いたい人にとってはとても良い選択肢になります。

複数のアプリケーションでDBを共有するのもアリかもしれません。

アーキテクチャの例

で組み立てる場合の構成図例です。とても簡略化しています。

アーキテクチャの例

CloudFrontに好きなドメインを紐づける想定です(このとき、Route 53のホストゾーンに毎月固定で0.5ドルかかります)。

まとめ

AWSでアプリケーションをデプロイできるイメージは湧いたでしょうか?

もちろん、無料枠をたくさん用意してくれている他のプラットフォームを使うのは賢い選択肢だと思います。

「AWSで完結したい!」というアツい思いがある人は、チャレンジしてくれると嬉しいです!