G-gen の佐々木です。サーバーレス VPC アクセスコネクタ を使用した検証の際、コネクタを削除した後でも、コネクタ用の VPC を削除できない という事象に遭遇しました。当記事では、その原因と解決策を紹介します。
状況
- Cloud Run からサーバーレス VPC アクセスコネクタを使用して Cloud SQL に接続していた。
- Cloud Run を更新し、コネクタを使用しない設定でデプロイし直した。
- コネクタを削除した後、コネクタ用の VPC を削除しようとすると、エラーが出て削除できなかった。
エラーの内容
ネットワークを削除できませんでした。エラー: Operation type [delete] failed with message "The network resource 'projects/<プロジェクト名>/global/networks/<vpcの名前>' is already being used by 'projects/<プロジェクト名>/global/networkInstances/v-1087083075-5562e15b-3637-4477-98e3-e3bebbee7b6a'"
エラーの内容は、削除しようとしている VPC を使用しているリソースが存在する、といった内容に見えます。
Cloud Logging にも以下のようなメッセージが記録されています。
message: "RESOURCE_IN_USE_BY_OTHER_RESOURCE"
しかし、この VPC はコネクタ用に作成したものであり、コネクタの削除後、この VPC を使用しているリソースはないはずです。
原因と対処
コネクタを使用しない設定で Cloud Run をデプロイし直したあと、「コネクタを使用するように設定された Cloud Run のリビジョン(バージョン)」が残っていた ことが原因でした。
コネクタを使用していたリビジョンを削除したところ、コネクタ用の VPC も削除することができました。
このように、「コネクタそのもの」や「現在コネクタを使用するリソース」がない場合でも、「コネクタを使用するように設定されたリビジョン」が 1 つでも存在していると、コネクタ用の VPC を削除する際に、まだ VPC を使用しているリソースがあると判定されてしまうようです。
コネクタ自体は問題なく削除できてしまうため、「コネクタを削除したのに、まだ存在しているかのようなエラーが出る」という状況になってしまいます。
今回はサーバーレス VPC アクセスコネクタを使用する設定のリビジョンが 1 つだったため、リビジョンの特定や削除は手間にならなかったのですが、「今までずっとコネクタを使用していたけど、使用しない設定に切り替える」ような場合に、それまでデプロイしたリビジョンを全て削除しなければならない、といった状況にもなり得ます。
Cloud Run はサーバーレスのサービスであり、コンテナイメージさえあれば同一のものを作成するのは非常に容易であるため、可能であれば、新しい Cloud Run サービスを作成しなおし、コネクタを使用していたほうは削除してしまうのが良いでしょう。
佐々木 駿太 (記事一覧)
G-gen最北端、北海道在住のクラウドソリューション部エンジニア
2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2025 Fellowに選出。好きなGoogle CloudプロダクトはCloud Run。
趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。
Follow @sasashun0805