8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GCSFuseを使ってGCEにGCSバケットをマウントする

Last updated at Posted at 2022-12-20

本記事は ZOZO Advent Calendar 2022 カレンダー Vol.4 の 21 日目の記事です。昨日の投稿は @luckyriver さんの「見やすいダッシュボードのために意識した7つのこと」でした。

GCSFuseとは

GCSFuseを使うことで、GCSバケットをファイルシステムとしてGCEにマウントすることができます。

使い方

基本的にはインストール手順通りに設定を行います。

Terraformを使って設定する

今回に関してはGCS,GCEともにTerraformで管理をしたかったため、GCSFuseについてもGCEの起動時に一緒に設定を行うようにしました。

以下がGCEのインスタンステンプレートの設定になります。
参照している他のリソースについては割愛させていただきます。

resource "google_compute_instance_template" "test-gcs-fuse-instance-template" {
  description = "Instance template for test-gcs-fuse"
  region      = local.region

  instance_description = "test-gcs-fuse instance"
  machine_type         = "f1-micro"

  scheduling {
    automatic_restart   = true
    on_host_maintenance = "MIGRATE"
  }

  disk {
    source_image = "ubuntu-2004-lts"
    auto_delete  = true
    boot         = true
  }

  network_interface {
    network    = google_compute_network.test-gcs-fuse-vpc.name
    subnetwork = google_compute_subnetwork.test-gcs-fuse-vpc-subnet.name
  }

  metadata_startup_script = templatefile("../../scripts/init_gcs_fuse.sh", { ENVIRONMENT = local.env })

  service_account {
    email  = google_service_account.compute-engine.email
    scopes = ["cloud-platform"]
  }

  lifecycle {
    create_before_destroy = true
  }
}

GCEには起動スクリプト(start-up script)という機能があり、その名の通りインスタンス起動時に実行させたいコマンドを記述したファイルを渡すことで、起動時に行う設定などを自動化することができます。

今回はシェルスクリプトで起動スクリプトを用意し、そちらを以下のようにTerraformのtemplatefileで参照するようにしました。

metadata_startup_script = templatefile("../../scripts/init_gcs_fuse.sh", { ENVIRONMENT = local.env })

参照している起動スクリプトが以下になります。
起動スクリプト内でGCSFuseのインストールと、マウントするバケットの指定を行っています。

#!/bin/bash

set -eu

sudo apt-get update && sudo apt-get install -y curl lsb-release gnupg

export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sudo apt-get update && sudo apt-get install -y gcsfuse

echo "mount file from gcs."
sudo su - test-gcs-fuse-user -c "gcsfuse GCSバケット名 /home/test-gcs-fuse-user"

また、以下の記述でGCEが使用するサービスアカウントを指定しているのですが、このサービスアカウントにはマウントするバケットの閲覧権限が必要になります。

  service_account {
    email  = google_service_account.compute-engine.email
    scopes = ["cloud-platform"]
  }

まとめ

今回初めてGCS Fuseを使いましたが、簡単にGCS上のファイルをGCEで見れるようになるので便利だと思いました。
また、GCEの起動スクリプトでGCSFuseのインストール・マウント設定を行うことで、サーバーをスケールアウトさせた際にも自動で設定を行ってくれるため良いかと思います。

8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?