2022年7月15日金曜日

Dialogflowを削除してもFirebaseプロジェクトが削除できない問題に対処 (エラー:削除を防ぐリーエンがプロジェクトに配置されました。)

Firebaseに新しいプロジェクトを追加しようとしたところ、プロジェクト数の上限が近づいていました。 

過去にActions on Googleを色々試していた時にサンプルを動かすためだけに作ったプロジェクトが多数あったため、それを削除して整理しようと思いました。

発生した現象

Firebaseコンソールでプロジェクトの設定画面からFirebaseプロジェクトを削除しようとすると、「削除を防ぐリーエンがプロジェクトに配置されました。削除を許可するには、リーエンを削除してください。」というエラーが表示され、削除できませんでした。

Dialogflowとリンクされていることが原因のようだったので、Dialogflowコンソールから該当するDialogflowエージェントを削除しました。

ところが、Dialogflowエージェントの削除後も同じエラーが表示され続け、Firebaseプロジェクトが削除できない状態になりました。

解決した方法

下記手順で、プロジェクトの削除を防いでいる「リーエン」を削除することで解決できました。

  1. gcloud CLI (Google Cloud CLI) をインストール
    参考: https://cloud.google.com/sdk/docs/install-sdk?hl=ja

  2. リーエンの一覧を確認
    >gcloud alpha resource-manager liens list --project my-project-name
    NAME                                                 ORIGIN                                                                                                                                                                                                                           REASON
    p703716169729-*********-****-****-****-************  You cannot delete this project because it is linked with a Dialogflow agent. Please follow the link to Dialogflow and delete the agent: https://console.dialogflow.com/api-client/#/agent/430c5fc3-****-****-****-************/  Deletion blocked by Dialogflow.
    
  3. liens/<NAME欄に表示されたリーエンの名前> の形式でリーエン名を指定して、下記コマンドを実行
    >gcloud alpha resource-manager liens delete liens/p703716169729-*********-****-****-****-************
    Deleted [liens/liens/p703716169729-*********-****-****-****-************].
    
  4. リーエンが削除されたことを確認
    >gcloud alpha resource-manager liens list --project my-project-name
    Listed 0 items.
    
  5. Firebaseコンソールに戻り、Firebaseプロジェクトを削除

解決までに試した内容

このあたりのページを行き来しながら試行錯誤しました。

【資料1】Firebaseプロジェクトを削除しようとした際に案内されたページ
https://cloud.google.com/vpc/docs/deprovisioning-shared-vpc#removelien

【資料2】Google Cloud Consoleからプロジェクトを削除しようとした際に案内されたページ
https://cloud.google.com/resource-manager/docs/troubleshooting-project-deletion?&_ga=2.230970719.-1958245398.1628529780#liens

【資料3】リーエンそのものについて調べているうちに行き着いたページ
https://cloud.google.com/resource-manager/docs/project-liens#removing_liens_from_a_project

2020年頃に作ってDialogflowとリンクした後、ずっと放置していた古いプロジェクトだったので、何か齟齬が起きていたのかもしれません。

以下、発生したエラーと試したことの備忘録です。

Firebaseプロジェクト削除時にエラーが発生

発生したエラー:

Firebaseプロジェクト削除時のエラーメッセージ

削除を防ぐリーエンがプロジェクトに配置されました。削除を許可するには、リーエンを削除してください。詳細

「詳細」からリンクされていた【資料1】のページ を見ると、Dialogflowを先に削除する必要がありそう(と思った)。

すべてのサービス プロジェクトをホスト プロジェクトから接続解除する

(注:後々混乱するのですが、このリンク先のページではずっと「共有VPC」の話をしていて、この「サービス プロジェクト」というのも共有VPCのことを指しているようです。共有VPCは有料の機能で、そもそも私は有効にしていませんでした。なので実はこのページの内容は関係ありませんでした…。)

Dialogflowエージェントを削除

Dialogflowコンソールで、削除したいプロジェクトとリンクされているエージェントを削除。

Dialogflowコンソールのプロジェクト設定画面

(スクリーンショットはこの記事を書くために別のプロジェクトで後から撮ったので、設定等異なるかもしれません。APIのバージョンがV1というような設定があったような…?)

しかし、再度Firebaseプロジェクトを削除しようとすると、まだ同じエラーが出て削除できない状況。

Google Cloud Consoleでエラーの詳細を確認

Google Cloud Consoleで該当するプロジェクトを確認し、「アクティビティ」欄に、削除操作時のエラーログが出ているのを見つける。

Google Cloud Consoleのアクティビティに表示されていたエラーの詳細

しかし、ログに表示されているDialogflowのエージェントはすでに削除したはず。ログに出ているURLにアクセスしても、現存する別のエージェントの画面にリダイレクトされる。

Google Cloud Consoleからプロジェクトの削除を試みる→エラー

Google Cloud Console で、プロジェクトの設定からシャットダウンを試みる。しかしやはりエラー。

Google Could Consoleからプロジェクトを削除した際のエラーメッセージ

エラー内容:

プロジェクト「my-project-name」を削除できません

プロジェクト「my-project-name」には、誤って削除されるのを防ぐために 1 つ以上リーエンが含まれています。プロジェクトを削除するには、リーエンを削除してから、もう一度お試しください。 [詳細](https://cloud.google.com/resource-manager/docs/troubleshooting-project-deletion?hl=ja#liens)

リーエンの原点

You cannot delete this project because it is linked with a Dialogflow agent. Please follow the link to Dialogflow and delete the agent: https://console.dialogflow.com/api-client/#/agent/430c5fc3-****-****-****-************/

「リーエンを削除」からリンクされているのは、先ほどエラーログ内にあったものと同じDialogflowのエージェントへのURL。別のエージェントにリダイレクトされる。

「詳細」のリンクからは【資料2】のページにリンクされていた。

これを読んで、プロジェクトの削除失敗時に作成された「リーエン」自体を手動で削除しないといけない?と考える。

gcloud コマンドでリーエンの削除を試みる→エラー

最初のFirebaseプロジェクト削除時のエラーメッセージからリンクされていた、【資料1】に戻る。

【資料1】で案内されている強制削除の手順を試してみる。

gcloud というコマンドを使うようなので、gcloud CLI (Google Cloud CLI) をインストール

インストールされた Google Cloud SDK Shell を管理者として実行。 (全ユーザー対象にインストールしてしまったためか、最初に実行した際ファイル操作の権限がなくてエラーになってしまったので)

【資料1】を見て、下記コマンドを実行

>gcloud alpha resource-manager liens list --project my-project-name
NAME                                                 ORIGIN                                                                                                                                                                                                                           REASON
p703716169729-*********-****-****-****-************  You cannot delete this project because it is linked with a Dialogflow agent. Please follow the link to Dialogflow and delete the agent: https://console.dialogflow.com/api-client/#/agent/430c5fc3-****-****-****-************/  Deletion blocked by Dialogflow.

リーエンが1つあることを確認。削除してみる。

【資料1】によれば、

リーエンがなくなるまで、1 つずつ名前を指定してリーエンを削除します。LIEN_NAME は、削除するリーエンの名前に置き換えます。

gcloud alpha resource-manager liens delete LIEN_NAME \
--project HOST_PROJECT_ID

となっている。

ひとつ前の実行結果のNAME欄の名前を使用して、コマンドを gcloud alpha resource-manager liens delete p703716169729-*********-****-****-****-************ --project welcome-sample として実行してみる。
→エラー。404エラーと、エラー画面を表示したいらしいHTMLが返ってきている。

>gcloud alpha resource-manager liens delete p703716169729-*********-****-****-****-************ --project my-project-name
ERROR: (gcloud.alpha.resource-manager.liens.delete) HTTPError 404: <!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
  <title>Error 404 (Not Found)!!1</title>
  <style>
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
  </style>
  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
  <p><b>404.</b> <ins>That’s an error.</ins>
  <p>The requested URL <code>/v3/p703716169729-*********-****-****-****-************?alt=json</code> was not found on this server.  <ins>That’s all we know.</ins>

念のため再度 liens list で確認してみるも、やはり削除されていない。

ここで悩みながらこれまで見てきたページを行ったり来たりしていろいろ試す。

解決

【資料2】で案内されているコマンドを実行してみた。

>gcloud projects delete my-project-name
Your project will be deleted.

Do you want to continue (Y/n)?  Y

ERROR: (gcloud.projects.delete) FAILED_PRECONDITION: Precondition check failed.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: 'A lien to prevent deletion was placed on the project by [You cannot
      delete this project because it is linked with a Dialogflow agent. Please follow
      the link to Dialogflow and delete the agent: https://console.dialogflow.com/api-client/#/agent/430c5fc3-****-****-****-************/].
      Remove the lien to allow deletion.'
    subject: liens/p703716169729-*********-****-****-****-************
    type: LIEN
- '@type': type.googleapis.com/google.rpc.Help
  links:
  - description: Troubleshooting project deletion
    url: https://cloud.google.com/resource-manager/docs/troubleshooting-project-deletion
- '@type': type.googleapis.com/google.rpc.ErrorInfo
  domain: cloudresourcemanager.googleapis.com
  reason: PROJECT_DELETE_LIEN

表示されたエラーの内容は、トラブルシューティングの対象として案内されているものではない。当初と同じ、Dialogflowエージェントとリンクされているから削除できないというエラー。

しかしここで、エラーに表示された subject: liens/p703716169729-*********-****-****-****-************ という行を見て、もしかしてコマンドに渡すリーエンの名前(LIEN_NAME)をこの liens/ で始まる形式で指定しなければいけないのでは?と思い当たる。
また、【資料3】 のページでは、--project my-project-name のオプションを付けない形のコマンドが記載されていたので、こちらも付けずに実行してみる。

実行

>gcloud alpha resource-manager liens delete liens/p703716169729-*********-****-****-****-************
Deleted [liens/liens/p703716169729-*********-****-****-****-************].

できた!!

liens list で確認してみる。

>gcloud alpha resource-manager liens list --project my-project-name
Listed 0 items.

削除できている様子!

リーエンが削除できたので、Firebaseコンソールに戻って、Firebaseプロジェクトを削除。
→削除できました!!

Firebaseプロジェクト削除成功メッセージ

0 件のコメント:

コメントを投稿