I hate services that don't put a price on things like bandwidth (because there's always a price!). So we priced bandwidth and made it transparent. You can put an app on Fly.io and server petabytes of data every month, if you want. We'll never complain that you're serving the wrong content type.
But the reality is – having an unlimited bandwidth promise is perfect for for a fire and forget blog site. We're not doing ourselves any favors with scary pricing for that kind of app.
Cloudflare shouldn't restrict media (video, images, and audio) from its unlimited bandwidth promise for Workers and R2 (though, ToS doesn't yet reflect that).
https://news.ycombinator.com/item?id=28682885
> But the reality is – having an unlimited bandwidth promise is perfect for for a fire and forget blog site
I think, an auto flyctl pause -a <myapp> when myapp exceeds $x in charges (with an auto-resume when the billing rolls over) may serve as a viable interim solution. May be this is already possible with fly.io's graphql api?
#!/usr/bin/env bash
set -euo pipefail
QUERY=$(cat <<EOF
{
"variables":{
"app":"$1",
"start":"$(date +%Y-%m)",
"end":"$(date -d "$(date +%Y%m01) +1 month -1 day" +%Y-%m-%d)"
},
"query":"query (\$app: String!, \$start: ISO8601DateTime!, \$end: ISO8601DateTime!) { app(name: \$app) { organization { billables(startDate: \$start, endDate: \$end) { edges { node { app { id } category quantity } } } } } } "
}
EOF
)
curl https://api.fly.io/graphql \
-H "Authorization: Bearer $(fly auth token)" \
-H 'content-type: application/json' \
--compressed \
-X POST \
--data-raw "$QUERY" \
--silent |
jq '[.data.app.organization.billables.edges[].node | select(.app.id == "'"$1"'" and .category == "data_out") | .quantity] | add'