Terraform を使用して VM を起動できます。GCP ウェブ UI からその VM にシェルを実行すると、次の方法で手動で認証できます。
gcloud auth application-default login
gcloud auth login
その後、GCP バケットを VM に手動でマウントできます。
gcsfuse bucket_name ~/mount_point/
しかし、Terraform 起動スクリプトからこれを自動的に行うことはできません。もちろん、認証コマンドは本質的に非常に手動であり、ブラウザーにジャンプしてキーを取得するなどの作業が必要です。また、gcsfuse コマンドは認証なしでは明らかに失敗するため、それを起動スクリプトに入れても機能しません。予想どおり、権限エラーが発生します。
GCP にはさまざまなサービス アカウントとアプリケーション アカウントが既にあり、関連する json キー ファイルをダウンロードしましたが、バケットをマウントするために Terraform から新しい VM を自動認証する方法がわかりません。これは google_service_account と google_service_account_key に関係があると思われますが、まだ方法がわかりません。起動スクリプトを実行している VM のルート ユーザーがバケットをマウントできるように、json キー ファイルを Terraform 構成にシューホーンする方法がわかりません。
他の誰かが、これは fstab にも関係があるかもしれないと示唆しました。私はすでに起動スクリプトに以下を追加しました:
echo 'bucket_name /mount/bucket_name gcsfuse rw,noauto,user' >> /fstab
また、シェルから echo コマンドが機能したことがわかります (それに応じて fstab が変更されています) が、まだバケットをマウントできません。また、gcsfuse の代わりに mount を使用してマウントしようとしました。
mount -allow_other -t gcsfuse -o rw,user bucket_name /mnt/bucket_name/
しかし、それもうまくいきません。マウントしてもエラーは発生しませんが、マウントされたディレクトリは空のままです。ガッ!ここでの解決策は何ですか?
ありがとう。