🙆♀️
cloud runの要らなくなったリビジョンを消す
小ネタです。
運用をしていて、たくさんリリースしているとリビジョンが増えていることとかもあるかなと思いますが、コンソール上から消すのも面倒なので、コマンドで消しましょう。
というか、解説することもないので、結論と詰まった部分だけ残しておきます。
結論
ACTIVEじゃないものをすべて消す
#!/bin/bash
SERVICE_NAME=$1
revisions=$(
gcloud run revisions list --service=$SERVICE_NAME \
--filter="status.conditions.type:Active AND status.conditions.status:'False'" \
--format="value(metadata.name)"
)
for rev in $revisions; do
gcloud run revisions delete $rev --quiet --async
done
ある日付以前にdeployされたものを消す(ACTIVEなものは残しつつ)
filterに日付条件を追加しただけです
#!/bin/bash
SERVICE_NAME=$1
TARGET_DATE=$2
revisions=$(
gcloud run revisions list --service=$SERVICE_NAME \
--filter="status.conditions.type:Active AND status.conditions.status:'False' AND metadata.creationTimestamp<$TARGET_DATE" \
--format="value(metadata.name)"
)
for rev in $revisions; do
gcloud run revisions delete $rev --quiet --async
done
詰まったところ
filterの使い方がわからず困っていました。具体的には、なんのkeyを入れればいいのか。試していたfilterとしては、こんな感じ。
--filter="DEPLOYED<2023/03/10"
理由としては gcloud run revisions list
で出てくる値を使うんだろうと想定していたためです。
実際はそうではなく gcloud run revisions list --format=json
で出てくる形のものをfilterできるということ。
なので、以下のようにやるのが正しい。
--filter="metadata.creationTimestamp<2023/03/10"
DEPLOYEDの値が creationTimestamp
かどうかはおいておきます。現状自分の勉強環境ではそうなっているし大体の環境がそうなっていると思います。
参考
Discussion