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

    View Slide

  2. 自己紹介
    from 京都
    - 中榮健二 (なかえけんじ)
    - twitter: @n_1215 
    - 株式会社Nextat 取締役
    - Webアプリのバックエンドがメインのはず。インフラ専任ではない
    - ここ最近はGoを使ったりUnityを使ってクライアント側をやったりPHP以
    外の仕事も増加
    Nextat Inc. 2

    View Slide

  3. 発表概要
    1. 本発表の背景
    2. Webアプリケーションサーバから見る選択肢
    3. DBサーバから見る選択肢
    4. その他
    5. まとめ
    Nextat Inc. 3

    View Slide

  4. 1. 本発表の背景
    Nextat Inc. 4

    View Slide

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

    View Slide

  6. 例1. 弊社の場合
    全部入りEC2
    nginx + PHP-FPM + MySQL + Redis
    複数サービスが同居している
    勤怠管理システム、プロジェクトAのテスト環境 etc.
    EC2の時限起動・停止によるコスト削減
    社内システムの場合は 定期DBバックアップ(cron)-> S3
    アクセス元IPアドレス制限やBasic認証
    リモートワークの時代だが?
    Nextat Inc. 6

    View Slide

  7. 例2. どこかのプロジェクトで見たテスト環境の場合
    全部入りEC2 1台
    ドメインを当てていないのでIPアドレスでアクセス
    非HTTPS
    担当者しかデプロイできない
    Nextat Inc. 7

    View Slide

  8. 弊社の事情
    インフラ専任の開発者はいない
    Webアプリ開発の片手間にできる人がやる
    特定の人に偏りがち
    「これのデプロイどうするんだっけ?」
    創業初期はWebサイト製作の比率も高かった
    共用レンタルサーバ → VPS → IaaSと変遷してきた
    本番環境はコンテナを使う比率が高い
    ただテスト環境や社内システムの場合はEC2で良くない?となりがち
    医者の不養生
    Nextat Inc. 8

    View Slide

  9. 人的コストや保守の問題
    VM 1台だとインフラコストは安い(1環境あたり数百円/月〜)
    だがしかし
    隠れた人件費を考慮するとそちらのほうが高い
    小さい組織にありがちな「役員がやれば実質人件費ゼロ」
    テスト環境の保守にかける時間を他の開発に当ててもらいたい
    精神的な負担もある
    保守の悪循環
    EC2の中身がごった煮であまり触りたくない
    触りたくないので現状維持され続ける悪循環
    Nextat Inc. 9

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. FaaS
    AWS Lambda や Google Cloud Functions
    無料枠は大きい場合が多い
    AWS LambdaはPHPの公式対応がない
    リクエストを処理している時間だけの課金も選べるため、リクエストが少ないサ
    ービスで非常に安上がり
    EC2を使う時間だけ起動・停止するよりも高い効果が得られる
    普段慣れているアプリケーション開発の構成を変える必要がある
    FaaS特有の知識が必要になるので必要なインフラ知識はむしろ増える
    ローカルでの再現に難あり
    今回はこれもパス
    スケーラビリティ重視の場合やインフラコスト削減への強い要望がある場合
    はAWS縛りの中のLambdaは強力な選択肢
    Nextat Inc. 21

    View Slide

  22. クラウドプロバイダのコンテナ系マネージドサービス
    AWS ECS、App Runner、Cloud Runあたり
    ローカルでの再現は比較的楽
    デプロイパイプラインの一部は自前になるのでPaaSより少し手間
    大抵はコンテナイメージをビルドしてコンテナレジストリに保存するくらい
    料金について
    ECS on Fargate: リクエストがなくてもお金はかかる+ロードバランサの
    料金
    App Runner: リクエストがなくても待機状態。コンテナインスタンス数を
    完全に0にはできないが今後に期待
    Cloud Run:無料枠あり。コンテナインスタンス数の最小を0にできるので
    その点はFaaSの特性にも近い
    Nextat Inc. 22

    View Slide

  23. 補足) PHPの場合のPaaSやコンテナ系のマネージ
    ドサービス利用の注意点
    1コンテナにWebサーバとPHP-FPM または Apache httpd + mod_phpとなる
    ことが多い
    1コンテナ1プロセスの教えには反するが、Herokuで実績は十分あるので……
    Nextat Inc. 23

    View Slide

  24. 3. DBサーバから見る選択肢
    Nextat Inc. 24

    View Slide

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

    View Slide

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

    View Slide

  27. RDBの選択肢
    PaaSの無料枠や安いプラン
    HerokuでPostgreSQL
    Render $7/month
    Fly.io $6.88/month
    Nextat Inc. 27

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  32. 4. その他(できればなかったことにしたい部分)
    Nextat Inc. 32

    View Slide

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

    View Slide

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

    View Slide

  35. 非同期処理・キュー
    AWS ECSでキューワーカー起動 + SQS
    SQSは無料枠が割と大きい
    ECSを常時起動させる分で料金がかかってくる
    GCP Cloud Runでキューワーカー起動 + Pub/Sub
    Webアプリ用とは異なり、CPUを常に割り当てる設定が必要になる分で料金
    がかかる
    GCP Cloud Tasks
    料金的には期待できそう
    GCPへのロックインにはなるのでローカルでの再現率は落ちる
    Nextat Inc. 35

    View Slide

  36. アクセス元IPアドレス制限
    サービスによってはロードバランサやCDNが必要になり、その分のお金はかかる
    最悪Webアプリ側で実装してくださいで押し通す手もある
    リモートワーク時代なので、GCPの Identity-Aware Proxyを使うなどアクセス
    元IPアドレス制限以外の方法も選択肢
    ゼロトラストセキュリティ
    Nextat Inc. 36

    View Slide

  37. 5. まとめ
    Nextat Inc. 37

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide