くりにっき

フルスタックキュアエンジニアです

地域.rbカレンダーをconnpass API v2に移行した

先日作ったgemを使って移行しました

sue445.hatenablog.com

github.com

モチベーション

費用面が大きかったです。

下記でも書いたようにconnpass API v1では送信元のIPアドレスの固定が必要でした。

sue445.hatenablog.com

しかしCloud Run Functionsで送信元のIPアドレスを固定にするには Serverless VPC Connector が必要です。

下記が地域.rbカレンダーの先月分の費用ですが、22.88ドル中21ドルくらい(グラフの青とオレンジと赤色の部分)がServerless VPC Connectorによる費用でした。*1

connpass API v2だと固定IPアドレスが不要になるので自分でgemを作ってでも早めに移行したいというモチベーションがありました。(月20ドルくらいなら全然払えなくはないんだけど円安がねぇ...)

connpass API v2に移行してServerless VPC Connectorを削除した後の費用の推移が下記です。

Serverless VPC Connectorの費用が完全に消えた4月6日以降だと下記ですがこのまま行くと明日以降はほぼ無料で運用できそう。

ハマったこと:Serverless VPC Connector削除後にVPCがなかなか消えなかった

API v2移行したので喜び勇んでServerless VPC Connectorのために必要だったリソースをまとめて消そうとしたんですが、VPCだけが下記のような理由で消えませんでした。

google_compute_network.main: Destroying... [id=projects/regional-rb-calendar-2/global/networks/main]
google_compute_network.main: Still destroying... [id=projects/regional-rb-calendar-2/global/networks/main, 10s elapsed]
╷
│ Error: Error waiting for Deleting Network: The network resource 'projects/regional-rb-calendar-2/global/networks/main' is already being used by 'projects/regional-rb-calendar-2/global/networkInstances/v-875397236-8cb06496-3c9b-3987-bc8c-2e8eba2e5a12'

下記を参考にCloud Runの古いリビジョンを全部消すことで解決しました。

blog.g-gen.co.jp

とはいえ100件以上あるリビジョンをコンソールから手で1つずつポチポチ消していくのもきついので、下記のようなスクリプトをCloud Shellで実行しました。

SERVICE_NAME=regional-rb-calendar
REGION=asia-northeast1

# 最新のリビジョンを取得
LATEST_REVISION=$(gcloud run services describe $SERVICE_NAME \
  --region=$REGION \
  --format='value(status.latestReadyRevisionName)')

# すべてのリビジョンを取得して、最新を除いたものを削除
gcloud run revisions list \
  --service=$SERVICE_NAME \
  --region=$REGION \
  --format='value(metadata.name)' | grep -v "$LATEST_REVISION" | while read REVISION
do
  echo "Deleting revision: $REVISION"
  gcloud run revisions delete "$REVISION" --region=$REGION --quiet
done

ChatGPTに「Cloud Runで最新以外の古いリビジョンを全部消すためのgcloudのコマンドを書いて」って聞いたら秒で教えてくれて便利

*1:余談ですがAWSのLambdaの場合でもNAT Gatewayでそれなりに費用は発生すると思います