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

自分のブログをCloudFront+HerokuからCloud Runに移行した

Takashi Masuda
September 30, 2022

自分のブログをCloudFront+HerokuからCloud Runに移行した

2022-09-30 フィードフォース社内技術勉強会のプレゼン資料です。
https://developer.feedforce.jp/entry/2022/09/30/180000

Takashi Masuda

September 30, 2022
Tweet

More Decks by Takashi Masuda

Other Decks in Technology

Transcript

  1. 自己紹介 • 増田貴士(@masutaka) • 株式会社フィードフォース App Unity所属 • 自称Lookerエバンジェリスト •

    来月10/28はベヨネッタ3の発売日👓 • 来年2/24はオクトパストラベラーⅡの発売日🚅 https://www.feedforce.jp/ 

  2. CloudFront + Heroku • https://masutaka.net/ • Herokuで動作するnginxコンテナが実体で、Hugoで生成 した静的コンテンツを配信 • 表側にCloudFront(CDN)を配置し、全世界に高速配信

    • ドメインとDNSはRoute53で管理 • 外形監視はHerokuのNew Relic Add-on • 月の家賃はHerokuの7USDと、Route53の0.5USDくらい
  3. 左から順に • GCE: AWSだとEC2に相当。でも今さらサーバーの管理はやりたくな い • GKE: AWSだとEKSに相当。Kubernetesはさすがにオーバースペック • Cloud

    Run: どちら様ですか...? • GAE: AWSだとElastic Beanstalkに近い?以前気になって試したこと あり。大本命 • Cloud Functions: AWSだとLamdaに相当。しかし今回は軽量すぎる
  4. • Google App Engine • 2009年に正式リリース • サーバーレスなWebアプリケーションプラットフォーム • 特定言語(PHP,

    Python, Node.js, Java, Go, C#)のアプリケーション を動かせるスタンダード環境と、Dockerコンテナを動かせるフレキ シブル環境がある • 今回はnginxコンテナを動かしたかったので、フレキシブル環境で試 した GAEとは https://cloud.google.com/appengine/ 

  5. 導入のためにやったこと env: flex runtime: custom service: default instance_class: B1 manual_scaling:

    instances: 1 resources: cpu: 1 memory_gb: 0.6 includes: - secret.yaml app.yamlを作ってgcloud CLIでデプロイす るだけ。 $ gcloud -q app deploy app.yaml --stop-previous-version Dockerfileはそのまま使えた。Herokuと同 様、$PORTのListenが求められるだけ。
  6. 参考: 使っているDockerfile FROM klakegg/hugo:0.101.0-onbuild AS hugo ARG HUGO_ENV_ARG=production FROM nginx:1.23.1-alpine

    COPY --from=hugo /target /usr/share/nginx/html COPY nginx/nginx.conf /etc/nginx/ COPY nginx/default.conf /etc/nginx/conf.d/ STOPSIGNAL SIGQUIT # hadolint ignore=DL3025 CMD sed -i -e "s/{{PORT}}/$PORT/" /etc/nginx/conf.d/default.conf && \ nginx -g "daemon off;"
  7. 問題点 https://cloud.google.com/appengine/pricing 
 • 料金が高い。最低インスタンスタイプであるB1またはF1 の1台稼働だと、月6,000円以上かかりそう ◦ $0.065/h x 24h

    x 30d ≒ $46.8/mo ≒ ¥6,692 ($1 = ¥143) ◦ フレキシブル環境には無料枠はない ◦ B1はマニュアルスケーリング、F1はオートスケーリングの最低インスタンスタイプ。どちら もCPU 600MHz, メモリ256MB • デプロイが遅い。6分から8分かかる。厳しい。Herokuは 2分半くらいだった
  8. Cloud Runとは https://cloud.google.com/run 
 • 2019年11月に正式リリース • サーバーレスなコンテナ型Webアプリケーションプラッ トフォーム •

    Knativeのマネージドサービスで、Dockerコンテナを動 かすことが出来る ◦ Knativeとは「Kubernetesでイベント駆動型プログラミングを実現しやすくするソフトウェ ア」とのこと。へぇ
  9. Cloud Run導入のためにやったこと Cloud Runのコンソールからポチポチ手 動でGitHub連携しただけ。 HugoのためにはCloud Buildのコンソー ルからコピーしたcloudbuild.yamlに右記 変更が必要だった。 今回もDockerfileをそのまま使えた。

    Herokuと同様、$PORTのListenが求め られるだけ。 diff --git a/cloudbuild.yaml b/cloudbuild.yaml index 2245dd6..7c3c0cc 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -1,4 +1,10 @@ steps: + - name: gcr.io/cloud-builders/git + args: + - submodule + - update + - '--init' + id: "git submodule update" - name: gcr.io/cloud-builders/docker args: - build @@ -8,6 +14,8 @@ steps: - . - '-f' - Dockerfile + - "--build-arg" + - "HUGO_ENV_ARG=production" id: Build - name: gcr.io/cloud-builders/docker args:
  10. 問題点 • やはり料金が高い。Cloud RunのvCPUを1つ常時稼働だと、 ロードバランサと合わせて実測で月1万円程度(!)かかりそ うだった ◦ Cloud Run: ¥215

    x 30d ≒ ¥6,450 ◦ ロードバランサ: ¥83 x 30d ≒ ¥2,490 ◦ 正直言って料金表は複雑で、実測しないと分からなかった ◦ 無料枠は実測で600円くらいのようだ • 「引っ越ししたら家賃が10倍以上になったかも/(^o^)\」と いうタイトルでもネタにはなったが... https://cloud.google.com/run/pricing 

  11. もっと気づく • 以上はインスタンス数がmax: 1, min: 0の話 • 試しにmax: 4, min:

    0にしたが料金は変わらなかった ◦ Cloud Runでは最低でもmaxを4にすることを奨励している • いつか起きるかもしれないアクセス増に耐えるために、 maxを16とか32にしても料金的な問題はないのかも
  12. 現在の設定 • コンテナ数: max 4, min 0 • リクエストの処理中にのみCPUを割り当てる •

    各コンテナに割り当てるvCPUの数: 1 • 各コンテナに割り当てるメモリ: 512MiB • 各コンテナの最大リクエスト数: 80
  13. めっちゃ良いかも • 料金が安い ◦ リクエストの処理中にのみCPUを割り当てれば、外形監視で起こし続けても安い ◦ おまけに月に¥600程度のクレジットが付きそう ◦ ¥32 x

    30日 - ¥600 = ¥360 • デプロイも速い ◦ 1分半から2分強で完了する。Herokuと同じくらい • 今回の使い方だとGAEの上位互換 https://cloud.google.com/run/pricing 

  14. 引っ越しによる変化の詳細 引越し前 引越し後 ドメイン AWS Route53 Google Domains DNS AWS

    Route53 Google Domains CDN AWS CloudFront なし ※2 DDoS防御 AWS Shield ※1 なし ※2 バックエンド Heroku Container GCP Cloud Run ロギング Heroku Add-on Papertrail + AWS Athena GCP Cloud Logging Metrics Heroku Metrics GCP Cloud Monitoring 外形監視 Heroku Add-on New Relic GCP Cloud Monitoring ※1 デフォルトで有効化されている ※2 Cloud Runはロードバランサーを有効化すれば Cloud CDNやCloud Armorを使える
  15. 料金の変化 引越し前 引越し後(予測) ドメイン $11/年 ¥1,540/年 DNS $0.5/月 ¥0/月 CDN

    $0/月 - DDoS防御 ¥0/月 - バックエンド $7/月 ※¥360/月 ロギング $0.7/月 ¥0/月 Metrics $0/月 ¥0/月 外形監視 $0/月 ¥0/月 ※ ¥32/日 x 30日 - クレジット¥600
  16. 学び • Cloud Runはお手軽にコンテナをポコポコ作れる ◦ 軽量なWebアプリケーションに良いみたい。プレビュー版でCloud Runジョブもあるよ • Dockerfileを変更せずにHerokuから移行できたのは良い 体験だった

    • GCPはAWSよりCDNの最低料金が高い ◦ ¥3,000/月くらいはかかる • Google Domainsはエンジニアでない方にも良さそう • GCPに外形監視があったのか