🙆‍♀️

cloud runの要らなくなったリビジョンを消す

2023/03/21に公開

小ネタです。

運用をしていて、たくさんリリースしているとリビジョンが増えていることとかもあるかなと思いますが、コンソール上から消すのも面倒なので、コマンドで消しましょう。
というか、解説することもないので、結論と詰まった部分だけ残しておきます。

結論

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 かどうかはおいておきます。現状自分の勉強環境ではそうなっているし大体の環境がそうなっていると思います。

参考

https://stackoverflow.com/questions/74892568/how-to-list-non-active-revisions-of-cloud-run

Discussion