Closed56

codespaces の storage 制限

tkttkt


すぐにいっぱいになってそこそこ高い

tkttkt

月に 1GB で $0.07 なのに $10 に到達してるってことは
142GB / month くらいの容量を使ってる?
そんな使ってるかな…

tkttkt

prebuild か codespaces のコンテナ本体が課金対象っていう想定はずれてなさそうだけどそれにしても…

tkttkt

prebuild の方は、base image を公式のもの使えばその分コスト削減できそう
Rust で使ってるのは 300 MB 位あるけど、これに追加でなんやかんや入れてるから、500MBくらいあってもおかしくなさそう?

tkttkt

それにしても limit には遠く届かないのよな

tkttkt

codespaces 始まってすぐは base image に brew 入れて遊んでたから、その分が大きくて膨れた、であればまだ…

でも一度 limit かかってからそれはやめたから…

tkttkt

$5 いれて、まだたりない
もっと気をつけよう
$5 いれて、ぜんぜんたりない…
なので

何か大きく見落としてそうな…
日毎、リポジトリ、種別でレポート出してくれないかな

tkttkt

CSV で一月分落として料金順に並べてみたら、prebuild でかかってる金額がかなり大きいことが判明した。
そして、prebuild してることを忘れてた repository だった

tkttkt

computing で $7 これは無料枠に収まってるっぽい

tkttkt

prebuild も全部がクソデカな訳ではないっぽい

tkttkt

クソデカビルドの中を見ようと思ったら、みれないやーん

tkttkt

codespaces の設定で、可用性の設定ができる

There is a storage cost associated with each prebuild version that's retained. For example, if you are generating prebuilds in 4 regions and retaining 2 versions, you will be charged for storage of up to 8 prebuilds. For more information on billing, see "About billing for GitHub Codespaces."

ここで調整することでコストを下げられそう

tkttkt
Unable to find image 'mcr.microsoft.com/devcontainers/universal:linux' locally

もってないん?

tkttkt
  • When you use the default dev container configuration (see "Introduction to dev containers"), we do not count the default container as used storage. When you create a custom container using a dev container configuration with a different base image we do count the container as used storage.
  • When you rebuild your container from the default image we do not count the base container as used storage. For other base images all of the storage consumed by the codespace, including the base container, is counted as used storage.

これに当てはまるのかそうでないのかが知りたい

tkttkt
 $ devcontainer-info

Development container image information

- Image version: 2.1.3
- Definition ID: universal
- Source code repository: https://github.com/devcontainers/images
- Source code release/branch: v0.2.29
- Timestamp: Mon, 19 Dec 2022 20:20:07 GMT

More info: https://github.com/devcontainers/images/tree/main/src/universal/history/2.1.3.md

こんなかんじにでてくる

tkttkt

これが storage に響いてくるのか知りたいんだけど、請求見に行く以外に確実な方法がない気がする

tkttkt

mcr.microsoft.com/devcontainers/base:focal" を基準にビルドしてみた

devcontainer.json
{
  "name": "base image",
  "image": "mcr.microsoft.com/devcontainers/base:focal",

  // Set *default* container specific settings.json values on container create.
  "settings": {
    "runOnSave.commands": [
      {
        "globMatch": "**/*",
        "command": "docker-compose exec -T app /bin/bash -c \"npm run format\"",
        "runIn": "backend"
      }
    ]
  },

  // Add the IDs of extensions you want installed when the container is created.
  "extensions": [
    "GitHub.vscode-pull-request-github",
    "ms-azuretools.vscode-docker",
    "GitHub.copilot",
    "donjayamanne.githistory",
    "eamodio.gitlens",
    "mhutchie.git-graph",
    "steoates.autoimport"
  ],

  // Use 'forwardPorts' to make a list of ports inside the container available locally.
  // "forwardPorts": [],

  // Use 'postCreateCommand' to run commands after the container is created.
  // "postCreateCommand": "",

  "features": {
    "ghcr.io/devcontainers/features/node:1": {
      "version": "18",
      "additionalVersions": "16"
    },
    "ghcr.io/devcontainers/features/github-cli:1": {
      "version": "latest"
    },
    "ghcr.io/devcontainers/features/docker-in-docker:2": {
      "version": "latest"
    }
  }
}
tkttkt

feature のところはしっかり追加でインストールしてそうなので、storage 的に universal が有利なら universal 使いたいけど果たして

tkttkt

これで作った codespace を数日間放置して、どれくらいの storage 消費があるか見てみる

tkttkt

universal の方も作っといてどっちが sorage 消費するか見てみるか

tkttkt

prebuild 編

build

base のほうがかなり軽そうな印象

  • universal:linux in 13m 43s

  • base:focalin 5m 13s

tkttkt

単純な image size に比例してるように見える

tkttkt

container 編

tkttkt


universal:linux vs base:focal

  • universal:linux: $0.002/day
    • ほぼ素
  • base:focal: $0.004/day
    • feature で何個か入れてるけど universal より実態は軽いはず
tkttkt

base image を軽くして節約したコンテナを作ろうとするよりも、できるだけ公式が用意してるimage をそのまま使ったほうがお得っぽい

tkttkt

カスタムイメージのコンテナ作ってなかったから、それ作って検証してみるとちゃんとわかりそう

tkttkt

  • universal:linux: $(0.002 ~ 0.009)/day
    • 25日はコンテナ内で npm i したりして作業してたから跳ねてるのだと思われ
  • rust:1.66.0-slim-bullseye: $(0.005 ~ 0.007)/day
    • 初日は一日まるまるにならないから二日目より少なく出ると思ってたら、初日のほうがかかってる
    • 作ってからコンテナの中に入って作業したりは特にしてない
tkttkt

/.codespaces/agent/bin/codespaces prebuild このコマンドが使えれば色々調べられそうな気配はするんだけど

tkttkt


limit 更新された

tkttkt

いつ更新されたんだろ。すでに1.41 はまた早々に使い切るペースな気がする

tkttkt

codespaces 使う場合は、定期的に billing 見に行くと節約しながら使えそう
消し忘れも防げるし

tkttkt

まとめ?

  • Compute
    • 2-4Core くらいであれば、Compute の使用量はそんなに跳ねない。料金も「そんなもんかな」の範囲内に思うので、積極的に活用すると良さそう
  • Storage
    • 普段の開発ではあまり気にしないところでもあるからか、意図せず消費されていることがあった。気をつければ全然対応できそう
    • Prebuild を使うと Storage の使用量が大幅に消費されるので、使う際は要注意。usage report を監視しておくと安心。
      • 複数人開発の場合は選択肢に入りそうだが、個人で使うにはコストが上振れしてつかいにくそう
    • 公式の base image を使うと、コンテナでの消費を抑えられる。特に要件がなければ、必要なパッケージがすでに十分含まれている image を使うのが良さそう。universal とか

コスト削減のための Action

  • 定期的に usage report を確認して使用量を調整しよう
  • Prebuild を使うと Storage の使用量が大幅に消費されるので、基本off で
  • 使い終わったコンテナはこまめに削除しておこう

すでに使っている方へ

  • まず usage report を落としてきて、意図せず消費されているものがないか確認してみるとよさそう
このスクラップは2023/01/04にクローズされました