codespaces の storage 制限
すぐにいっぱいになってそこそこ高い
月に 1GB で $0.07 なのに $10 に到達してるってことは
142GB / month くらいの容量を使ってる?
そんな使ってるかな…
内訳が知りたい
prebuild か codespaces のコンテナ本体が課金対象っていう想定はずれてなさそうだけどそれにしても…
prebuild の方は、base image を公式のもの使えばその分コスト削減できそう
Rust で使ってるのは 300 MB 位あるけど、これに追加でなんやかんや入れてるから、500MBくらいあってもおかしくなさそう?
それにしても limit には遠く届かないのよな
codespaces 始まってすぐは base image に brew 入れて遊んでたから、その分が大きくて膨れた、であればまだ…
でも一度 limit かかってからそれはやめたから…
$5 いれて、まだたりない
もっと気をつけよう
$5 いれて、ぜんぜんたりない…
なので
何か大きく見落としてそうな…
日毎、リポジトリ、種別でレポート出してくれないかな
出せるっぽい
ここにあった。
結構探した
CSV で一月分落として料金順に並べてみたら、prebuild でかかってる金額がかなり大きいことが判明した。
そして、prebuild してることを忘れてた repository だった
prebuild も全部がクソデカな訳ではないっぽい
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."
ここで調整することでコストを下げられそう
さくげんさくげん
クソデカ prebuild の中身、brew 入れてた設定だった
brew が取ってる幅が大きそうだなあ
コストの削減に役立つ(らしい)公式イメージたち
でも日に$0.2くらいかかる、可用性の制限はしてないのでこのままでも削れはする
この設定にしてどれだけ料金が下がるかをみてみる
Unable to find image 'mcr.microsoft.com/devcontainers/universal:linux' locally
もってないん?
- 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.
これに当てはまるのかそうでないのかが知りたい
$ 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
こんなかんじにでてくる
これが storage に響いてくるのか知りたいんだけど、請求見に行く以外に確実な方法がない気がする
mcr.microsoft.com/devcontainers/base:focal"
を基準にビルドしてみた
{
"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"
}
}
}
universal の方も作っといてどっちが sorage 消費するか見てみるか
universal:linux
https://github.com/tktcorporation/ateaparty-manager/blob/09bb1b7852755bf2cb5054c7db46ca9352591536/.devcontainer/devcontainer.json
base:focal
https://github.com/tktcorporation/tktcorporation.com/blob/fe4b69700e0a303f59af7e99cea90dcb020946f8/.devcontainer/devcontainer.json
この2つでどういうコストが上がってくるのかを観察してみる
prebuild 編
build
base のほうがかなり軽そうな印象
-
universal:linux
in 13m 43s
-
base:focal
in 5m 13s
container 編
universal:linux
vs base:focal
-
universal:linux
: $0.002/day- ほぼ素
-
base:focal
: $0.004/day- feature で何個か入れてるけど universal より実態は軽いはず
base image を軽くして節約したコンテナを作ろうとするよりも、できるだけ公式が用意してるimage をそのまま使ったほうがお得っぽい
カスタムイメージのコンテナ作ってなかったから、それ作って検証してみるとちゃんとわかりそう
-
universal:linux
: $(0.002 ~ 0.009)/day- 25日はコンテナ内で
npm i
したりして作業してたから跳ねてるのだと思われ
- 25日はコンテナ内で
-
rust:1.66.0-slim-bullseye
: $(0.005 ~ 0.007)/day- 初日は一日まるまるにならないから二日目より少なく出ると思ってたら、初日のほうがかかってる
- 作ってからコンテナの中に入って作業したりは特にしてない
/.codespaces/agent/bin/codespaces prebuild
このコマンドが使えれば色々調べられそうな気配はするんだけど
ほえー、な結果
codespaces 使う場合は、定期的に billing 見に行くと節約しながら使えそう
消し忘れも防げるし
まとめ?
- Compute
- 2-4Core くらいであれば、Compute の使用量はそんなに跳ねない。料金も「そんなもんかな」の範囲内に思うので、積極的に活用すると良さそう
- Storage
- 普段の開発ではあまり気にしないところでもあるからか、意図せず消費されていることがあった。気をつければ全然対応できそう
- Prebuild を使うと Storage の使用量が大幅に消費されるので、使う際は要注意。usage report を監視しておくと安心。
- 複数人開発の場合は選択肢に入りそうだが、個人で使うにはコストが上振れしてつかいにくそう
- 公式の base image を使うと、コンテナでの消費を抑えられる。特に要件がなければ、必要なパッケージがすでに十分含まれている image を使うのが良さそう。universal とか
コスト削減のための Action
- 定期的に usage report を確認して使用量を調整しよう
- Prebuild を使うと Storage の使用量が大幅に消費されるので、基本off で
- 使い終わったコンテナはこまめに削除しておこう
すでに使っている方へ
- まず usage report を落としてきて、意図せず消費されているものがないか確認してみるとよさそう
ここ 30 日の請求
そろそろ記事にするか…
かいた