Rails APIとvueをAWSで公開するときのインフラ設計
AWS、インフラ初心者です。
Rails APIとvueでアプリを作りました。
Webpackerなどは使わず完全分離してます。
それをrails apiはec2、vueはS3で公開しようと思っているのですがそのような設計でよいでしょうか?
分かる方、回答お願いします。
AWS、インフラ初心者です。
Rails APIとvueでアプリを作りました。
Webpackerなどは使わず完全分離してます。
それをrails apiはec2、vueはS3で公開しようと思っているのですがそのような設計でよいでしょうか?
分かる方、回答お願いします。
S3に関しては良いかと思います(必要に応じてS3の静的webサイトホスティングではなくCloudfrontを挟むやり方も検討すると良いと思います)
Rails APIとはRuby on Railsで構築したJSONなどを返すプログラムだと仮定します
まずEC2を選定するのは他に最適な実行環境がない場合の最終手段だと思ってください。
・リクエスト・リプライ方式のAPIでバッチ処理もなく長時間実行する必要がない+料金を抑えたい+スケールアウトやネットワークを考慮したインフラ構築を行いたくない
→RubyランタイムのLambda
・他の環境に移植しにくいLambdaではなくGCPやAzure、オンプレミスの移植も考えている+インフラ構築を行いたくない
→Dockerで構築し、AppRunnerを利用
・AppRunnerでは利用できないWAFや既存のネットワークを使用したい(EC2より多少高くても良い)
→ECS×Fargate(簡単にインフラ周りを作ってくれるAWS CopilotというCLIを必要に応じて使うとよいかと思います)
いずれも上記のサービスはインスタンス内にデータを保持せず、外出ししておく必要があります(RDS・DynamoDB・S3に保管する)
EC2は料金がAPIベースのシステムで考えると高くなり※、ランタイムのインストール、OSのバージョンアップなど管理コストもかかってくるためおすすめしません
※例えば1日10リクエスト、1回あたりの処理500msかかるAPIを考えると
・EC2・・・最低でも1$はかかってくる
オンデマンドインスタンスのt2.nanoで25%の使用率を想定
・Lambda・・・無料枠に収まるため永年無料
@hntk さん。めっちゃ詳しいコメントありがとうございます!
rails awsで調べるとec2ばかり出てくるのでそれが最適なのかと思ってました。
自分はLambda、RDS、S3、cloudflareでやっていこうと思います。
本当に助かりました。
いえいえ参考になれば幸いです!
RDSに関してもNoSQLで代替できるのであれば無料枠があるDynamoDBをおすすめします
RDSをどうしても使う場合RDS Proxyを挟むことを検討してください
Lambdaはリクエストが来ると1つのコンテナを専有します。つまり同時リクエストが来るとリクエストの数だけコンテナ(サーバー数)を増やすため、RDSのコネクションをそれだけ専有します
またLambdaのコンテナは処理が完了しても次回以降のリクエストを素早く返すようにするため、しばらく消えないためコネクションが消えません。
そのためRDS Proxyというコネクションを管理するサービスを使うことをおすすめします