たのしい工学

プログラミングを学んで、モノをつくりたいひと、効率的に仕事をしたい人のための硬派なブログになりました

[GCP] GCEにGCSをマウントしてファイルシステム的に扱う方法

   

今回はGCEにGCSをマウントしてファイルシステム的に扱う方法について書きます。

GCEのアクセス権を変更する

GCEからGCSに対してファイル操作を行うには、GCEにGCSのアクセス権限を付与する必要があります。この操作を行わないとGCEからGCS上のファイルを操作出来ません。

  • GCEを停止
  • VMインスタンスの詳細画面より「編集」
  • アクセススコープを「各APIにアクセス権を設定」に変更
  • ストレージの項目を「フル」に変更(デフォルトでは「読み取り」のみ)

GCEにGCSバケットをマウント

  • gcsfuseのインストール
  • GCSをGCEにマウント
    gcsfuse -o nonempty bucket /path/to/mnt
  • ディレクトリの可視化
    [注意] GCSのディレクトリはマウント時点では不可視です

    すべてのディレクトリを可視化

    --implicit-dirs

    をコマンドオプションに指定
    基本的には不可視で一部を可視化

    mkdir -p /path/to/implicit/dir

    都度、可視化したいディレクトリの名前でディレクトリを作成

  • 参考:GCSバケットのアンマウント

    マウントを永続化

    上記の方法ではGCEを再起動すると自動的にアンマウントされます。マウントを永続化したい場合は、GCEの起動時にマウントするように起動スクリプトを設定しましょう。

    GCEのGUI管理コンソールから、
    編集>カスタムメタデータ>
    「項目:startup-script」
    「値:sudo gcsfuse --implicit-dirs --dir-mode "777" -o allow_other backet /path/to/mnt」
    を設定します。このとき、マウント先のディレクトリの所有権はrootである必要があるので、下記でrootに変更。

    chown root:root /path/to/mnt

    念のため、GCEで下記のマウントスクリプトが手動実行できるかを確認しておくとよいでしょう。

    sudo gcsfuse --implicit-dirs --dir-mode "777" -o allow_other backet /path/to/mnt

    GCSバケットファイルシステムの注意点

    • ディレクトリ名の変更不可
    • どうしても変更したい場合
    • cp -r [名称変更したいdir] [新名称]

      の後に

         rm -r [名称変更したいdir]

      と愚直に行うしかないようです。(2020年1月11日現在)
      なお、名称を変更したいディレクトリが多くのファイルを内包する場合、上記の方法は非常に時間がかかります。

    参考:バケット操作するためのCLIコマンド「gsutil」について

    今回はここまでです。ではでは!

     - GCP, テクノロジー