Upgrade to Pro — share decks privately, control downloads, hide ads and more …

テスト環境のインフラ・運用コストを下げたい話〜全部入りEC2を超えていけ

n1215
PRO
August 27, 2022

 テスト環境のインフラ・運用コストを下げたい話〜全部入りEC2を超えていけ

PHPカンファレンス沖縄2022の発表資料です

n1215
PRO

August 27, 2022
Tweet

More Decks by n1215

Other Decks in Programming

Transcript

  1. for PHPカンファレンス沖縄 2022 テスト環境のインフラ・運用コストを下げたい話 〜全部入りEC2を超えていけ 2022年8月27日 (土) 株式会社Nextat 中榮健二 Nextat

    Inc. 1
  2. 自己紹介 from 京都 - 中榮健二 (なかえけんじ) - twitter: @n_1215  -

    株式会社Nextat 取締役 - Webアプリのバックエンドがメインのはず。インフラ専任ではない - ここ最近はGoを使ったりUnityを使ってクライアント側をやったりPHP以 外の仕事も増加 Nextat Inc. 2
  3. 発表概要 1. 本発表の背景 2. Webアプリケーションサーバから見る選択肢 3. DBサーバから見る選択肢 4. その他 5.

    まとめ Nextat Inc. 3
  4. 1. 本発表の背景 Nextat Inc. 4

  5. 本発表が想定する環境 テスト環境や社内システムの運用環境 個人開発サービスの環境も似たような問題はあるはず VPSやクラウドサービス(IaaS)のVM1台で運用 ある程度の規模のサービスの本番環境に比べて 保守について考えていない インフラコストはかけない 属人性が高い ことが多い 【要出典】

    インフラ専任の技術者がチームにいない Nextat Inc. 5
  6. 例1. 弊社の場合 全部入りEC2 nginx + PHP-FPM + MySQL + Redis

    複数サービスが同居している 勤怠管理システム、プロジェクトAのテスト環境 etc. EC2の時限起動・停止によるコスト削減 社内システムの場合は 定期DBバックアップ(cron)-> S3 アクセス元IPアドレス制限やBasic認証 リモートワークの時代だが? Nextat Inc. 6
  7. 例2. どこかのプロジェクトで見たテスト環境の場合 全部入りEC2 1台 ドメインを当てていないのでIPアドレスでアクセス 非HTTPS 担当者しかデプロイできない Nextat Inc. 7

  8. 弊社の事情 インフラ専任の開発者はいない Webアプリ開発の片手間にできる人がやる 特定の人に偏りがち 「これのデプロイどうするんだっけ?」 創業初期はWebサイト製作の比率も高かった 共用レンタルサーバ → VPS →

    IaaSと変遷してきた 本番環境はコンテナを使う比率が高い ただテスト環境や社内システムの場合はEC2で良くない?となりがち 医者の不養生 Nextat Inc. 8
  9. 人的コストや保守の問題 VM 1台だとインフラコストは安い(1環境あたり数百円/月〜) だがしかし 隠れた人件費を考慮するとそちらのほうが高い 小さい組織にありがちな「役員がやれば実質人件費ゼロ」 テスト環境の保守にかける時間を他の開発に当ててもらいたい 精神的な負担もある 保守の悪循環 EC2の中身がごった煮であまり触りたくない

    触りたくないので現状維持され続ける悪循環 Nextat Inc. 9
  10. 大雑把な目標 社内の人間がインフラの保守に割く時間を減らしたい 複数のシステムの環境が密結合しないようにしたい 属人性を減らしたい インフラの知識があまりなくてもデプロイできる環境にしたい コンテナについてちょっと分かるくらい 触っていて楽しい(重要) ローカル開発用にコンテナを使うのであまり差異がないほうが良い インフラコストもなるべく抑える Nextat

    Inc. 10
  11. Q. 全部入りEC2のままでもある程度改善は可能では? それはそう ドキュメントの作成 コンテナ on VMでミドルウェアのバージョンの密結合を緩和 EC2運用でももちろんデプロイは自動化できる でもこの方向性だと僕のモチベーションがわかない Nextat

    Inc. 11
  12. 補足 クラウドプロバイダはAWSやGCPの話が多くなります PHP以外の言語を利用する場合でも大筋は同じですが、一部PHP特有の事情も入 ります 調査段階なので詳しい料金計算までは含みません Nextat Inc. 12

  13. 2. Webアプリケーションサーバから見る選択肢 Nextat Inc. 13

  14. 共用レンタルサーバ 今回はコンテナを使いたいのでパス 1つの契約で複数アプリケーション配置も可能なのでインフラコストは安い IaaSより保守コストは安い EC2以外のIaaSやVPS EC2利用と手間はあまり変わらずなのでパス Nextat Inc. 14

  15. PaaS アプリケーション開発に集中したいならば本命の一つ 特にデプロイはGitHubなどに連携できることがほとんどなので楽 スタンダードなプランを利用する想定だとDBまで含め、3000〜5000円/月くら いはかかるのではという感じ 人的コストに比べれば安い 円安注意 ホビープラン的なもので済ませられるならもう少し安くなる Nextat Inc.

    15
  16. PaaSの例1 Heroku https://heroku.com/ Freeプランもあるがスリープあり Hobbyプランで$7/dyno/月、Standardプラン $25/dyno/月 レイテンシ USで動いているのでレイテンシは大きい Heroku Enterpriseなら東京リージョンが使えるがお高い

    Nextat Inc. 16
  17. PaaSの例1 Heroku HerokuのBuildpackはCloud Native Buildpacksに対応しているので、PaaSで はあるがローカルで同じ環境を動かしやすい https://buildpacks.io/ この前のインシデントが気にはなるところ Nextat Inc.

    17
  18. PaaSの例2 Render https://render.com/ Buildpacksには対応していないがDockerfile対応なのでローカルでの再現は楽 Background Workerあり(キューワーカーに使える) Cron Jobあり(定時バッチに使える) リージョンは今の所シンガポールが日本から近いが、東京対応予定はあるそう シンガポールリージョンでもHeroku程はレイテンシは気にならない

    Nextat Inc. 18
  19. PaaSの例3 Fly.io https://fly.io/ アクセスしたユーザに近いリージョンでサービス(コンテナ)を実行するという 一風変わったPaaS。CDNに近い発想 Buildpacks・Dockerfile対応でローカルでの再現が楽 Nextat Inc. 19

  20. PaaSの例4 Google App Engine https://cloud.google.com/appengine 無料枠あり コールドスタートでも速い ローカルでの再現に難あり。SDKで専用のエミュレータを使う GAEスタンダード環境のPHPのバージョンが長らく更新されていなかった。現在 は8.1対応

    GAEフレキシブル環境は自由度が高いがCloud Runがあるのでもはや Nextat Inc. 20
  21. FaaS AWS Lambda や Google Cloud Functions 無料枠は大きい場合が多い AWS LambdaはPHPの公式対応がない

    リクエストを処理している時間だけの課金も選べるため、リクエストが少ないサ ービスで非常に安上がり EC2を使う時間だけ起動・停止するよりも高い効果が得られる 普段慣れているアプリケーション開発の構成を変える必要がある FaaS特有の知識が必要になるので必要なインフラ知識はむしろ増える ローカルでの再現に難あり 今回はこれもパス スケーラビリティ重視の場合やインフラコスト削減への強い要望がある場合 はAWS縛りの中のLambdaは強力な選択肢 Nextat Inc. 21
  22. クラウドプロバイダのコンテナ系マネージドサービス AWS ECS、App Runner、Cloud Runあたり ローカルでの再現は比較的楽 デプロイパイプラインの一部は自前になるのでPaaSより少し手間 大抵はコンテナイメージをビルドしてコンテナレジストリに保存するくらい 料金について ECS

    on Fargate: リクエストがなくてもお金はかかる+ロードバランサの 料金 App Runner: リクエストがなくても待機状態。コンテナインスタンス数を 完全に0にはできないが今後に期待 Cloud Run:無料枠あり。コンテナインスタンス数の最小を0にできるので その点はFaaSの特性にも近い Nextat Inc. 22
  23. 補足) PHPの場合のPaaSやコンテナ系のマネージ ドサービス利用の注意点 1コンテナにWebサーバとPHP-FPM または Apache httpd + mod_phpとなる ことが多い

    1コンテナ1プロセスの教えには反するが、Herokuで実績は十分あるので…… Nextat Inc. 23
  24. 3. DBサーバから見る選択肢 Nextat Inc. 24

  25. DBサーバの選択肢 DBサーバのコストは全体に占める割合が比較的高いのでここも重要 PaaSはRDBサーバやRedisも対応していることが多い クラウドプロバイダのコンテナ系のマネージドサービスを使う場合は、同じプロ バイダで済ませるのが一番楽 Nextat Inc. 25

  26. 非RDBのデータベース 必要な知識が増加するので今回はパスだが一応触れる 価格が安く無料枠もあることが多い アプリケーションの構成を変える必要がある 各サービスにロックイン気味にはなる場合も DynamoDB ローカルでもそれなりにかんたんに再現可 Firestore ローカルでの再現に難あり エミュレータ

    MongoDB Atlas https://www.mongodb.com/ja-jp/atlas/database MongoDBのマネージドサービス ロックイン度合いは低い Nextat Inc. 26
  27. RDBの選択肢 PaaSの無料枠や安いプラン HerokuでPostgreSQL Render $7/month Fly.io $6.88/month Nextat Inc. 27

  28. PlanetScale https://planetscale.com/ スケーラビリティが売りだそうなので本発表の要件とは少し合わないか 従量課金 無料のプランもあるが、Scalerプランだと $29/月〜 SQLite コンテナでSQLiteを動かし、LitestreamでS3にバックアップするなどして運用 する方法が一時期話題になっていた https://litestream.io/

    確かにコストは安くなるけど人間が考えることが増えるのでパス Nextat Inc. 28
  29. クラウドプロバイダのRDBサービス AWSのRDS https://aws.amazon.com/jp/rds/ GCPのCloud SQL https://cloud.google.com/sql?hl=ja 定期バックアップ機能が大抵ついている フルに動かすと安くとも1000〜2000円/月くらいはかかる EC2のように時限停止させるともう少し減らせるが手間 DBサーバだけ複数サービスで共有するという手がある

    データベースだけ分ける 共用レンタルサーバと同じ発想 Nextat Inc. 29
  30. Amazon Aurora Serverless https://aws.amazon.com/jp/rds/aurora/serverless/ v1はコールドスタートがかなり遅い v2に期待していたがは結構お高い。こちらもApp Runnerと同じく非利用時の料 金が完全に0にはならない スケーラビリティを重視するなら Nextat

    Inc. 30
  31. Redis 地味に高い セッションストア・キャッシュストア用途(シェアードナッシング) AWS: ElastiCache for Redis https://aws.amazon.com/jp/elasticache/redis/ GCP: Memorystore

    for Redis https://cloud.google.com/memorystore?hl=ja Redis Enterprise Cloud(AWS/GCP/Azure対応) https://redis.com/redis-enterprise-cloud/overview/ セッション情報もRDBに入れてしまう手もある。特にテスト環境 Upstashってどうなの? https://upstash.com/ Nextat Inc. 31
  32. 4. その他(できればなかったことにしたい部分) Nextat Inc. 32

  33. Webアプリ以外のワーカーもコンテナにしたい HTTPリクエストの同期処理だけで済むなら不要ではある コンテナを使う上で結構悩ましい点の一つ PaaSは定時処理、ワーカーのための機能を独自に用意している場合もある Nextat Inc. 33

  34. 定時処理(cron代替) AWS: ECSタスク GCP: Cloud Run + Cloud SchedulerはHTTPエンドポイントからの実行 若干構成の変更が要る点やセキュリティ面の考慮でマイナス

    Cloud Run Jobs + Cloud Scheduler まだ試していないが良さそう Nextat Inc. 34
  35. 非同期処理・キュー AWS ECSでキューワーカー起動 + SQS SQSは無料枠が割と大きい ECSを常時起動させる分で料金がかかってくる GCP Cloud Runでキューワーカー起動

    + Pub/Sub Webアプリ用とは異なり、CPUを常に割り当てる設定が必要になる分で料金 がかかる GCP Cloud Tasks 料金的には期待できそう GCPへのロックインにはなるのでローカルでの再現率は落ちる Nextat Inc. 35
  36. アクセス元IPアドレス制限 サービスによってはロードバランサやCDNが必要になり、その分のお金はかかる 最悪Webアプリ側で実装してくださいで押し通す手もある リモートワーク時代なので、GCPの Identity-Aware Proxyを使うなどアクセス 元IPアドレス制限以外の方法も選択肢 ゼロトラストセキュリティ Nextat Inc.

    36
  37. 5. まとめ Nextat Inc. 37

  38. まとめ インフラにかかるコストは人件費も忘れずに PaaSかコンテナ系マネージドサービスがおすすめ DBサーバはコストが高いが、PaaSの安いプランやDBサーバの共有などの手あり 定時処理や非同期処理も含めるとコストが上がる 個人的にはFly.ioかCloud Runが好み Nextat Inc. 38

  39. PR: ITエンジニアを募集しています 株式会社Nextat nextat.co.jp 受託開発 業務システム、ECサイト、スマホアプリ、VR... 本社は京都ですが、東京・名古屋・北海道などフルリモート勤務の実績あり 設計の話に付き合ってくれる方大歓迎! Nextat Inc.

    39
  40. ご清聴ありがとうございました Nextat Inc. 40