本記事は 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のインストール・マウント設定を行うことで、サーバーをスケールアウトさせた際にも自動で設定を行ってくれるため良いかと思います。