アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【GoogleDebian
Google Cloud StorageをDebian/Linuxで使う
POSTED BY
2023-05-14

Google Cloud Storageは、Google Cloud Platform(Amazon AWSのGoogle版)で提供される機能のひとつで、ファイル/フォルダをオンラインに保存して安全性を保つ又は公開する目的で使われる。

GmailアカウントでGoogle Cloud Platform/Storage利用開始の契約をして、Linux/DebianにGoogle提供のツールをインストールして操作する。

https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu?hl=ja

Google Cloud SDKツールのインストール

sudo -s
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
apt-key list
apt-get update
apt-get install google-cloud-sdk
exit

aptパッケージリストにgoogle-cloud-sdkを加えインストール。

Google Cloud Platformにログイン

一般ユーザーに戻って、

gcloud init

・ログインするかどうか聞かれるのでYとする。
・認証URLが出るのでブラウザで開き、Cloud Storageを契約しているgmailアカウントを選択。
・求めているアクセスをすべて許可にすると、認証コードが出るので、コンソールに貼り付ける。
・コンソール側で今度は連携アカウント選択が出るので契約しているものを選んで完了。

あとは基本的にgsutilコマンドで操作する。

https://cloud.google.com/storage/docs/gsutil?hl=ja

gsutil help # コマンド一覧表示
gsutil help options # オプション一覧表示
gsutil help cp # cpコマンドのヘルプ

新規バケットの作成

gsutil ls # バケット一覧確認
gsutil mb gs://my-expp-test-bk/
Creating gs://my-expp-test-bk/...
gsutil ls
gs://my-expp-test-bk/

ファイルのアップロード

cat > とっぷ.txt
ああああ
Ctrl+D
gsutil -m cp とっぷ.txt gs://my-expp-test-bk/
Copying file://とっぷ.txt [Content-Type=text/plain]...
/ [1/1 files][   10.0 B/   10.0 B] 100% Done
Operation completed over 1 objects/10.0 B.
gsutil ls gs://my-expp-test-bk/
gs://my-expp-test-bk/とっぷ.txt

フォルダのアップロード

mkdir さぶふぉるだ
cat さぶふぉるだ/さぶ.txt
いいいい
Ctrl+D
gsutil -m cp -r さぶふぉるだ gs://my-expp-test-bk/
Copying file://さぶふぉるだ/さぶ.txt [Content-Type=text/plain]...
/ [1/1 files][   13.0 B/   13.0 B] 100% Done
Operation completed over 1 objects/13.0 B.
gsutil ls gs://my-expp-test-bk/さぶふぉるだ/
gs://my-expp-test-bk/さぶふぉるだ/さぶ.txt

ファイルのダウンロード

gsutil -m cp gs://my-expp-test-bk/とっぷ.txt .
Copying gs://my-expp-test-bk/とっぷ.txt...
/ [1/1 files][   10.0 B/   10.0 B] 100% Done
Operation completed over 1 objects/10.0 B.

フォルダのダウンロード

gsutil -m cp -r gs://my-expp-test-bk/さぶふぉるだ .
Copying gs://my-expp-test-bk/さぶふぉるだ/さぶ.txt...
/ [1/1 files][   13.0 B/   13.0 B] 100% Done
Operation completed over 1 objects/13.0 B.

フォルダのダウンロード(rsync同期)

mkdir downloads
cd downloads
gsutil -m rsync -r -d gs://my-expp-test-bk/ .
Building synchronization state...
Starting synchronization...
Copying gs://my-expp-test-bk/とっぷ.txt...
Copying gs://my-expp-test-bk/さぶふぉるだ/さぶ.txt...
- [2/2 files][   23.0 B/   23.0 B] 100% Done
Operation completed over 2 objects/23.0 B.
gsutil -m rsync -r -d gs://my-expp-test-bk/ .
Building synchronization state...
Starting synchronization...

変更のあったファイル/フォルダのみをダウンロードする場合上記rsyncを使う。
ただし変更してもファイルサイズが同じ場合変更と見なされずダウンロードされない(しょぼい)。
-d オプションはrsyncの--deleteと同じで、保存先にしか無いファイル/フォルダは消える(完全同期)ので注意。

ファイルの一般公開

gsutil acl ch -u AllUsers:R gs://my-expp-test-bk/とっぷ.txt
Updated ACL on gs://my-expp-test-bk/とっぷ.txt

https://storage.googleapis.com/my-expp-test-bk/とっぷ.txt

で、誰からでも見れるようになる=公開。

ファイルの一般公開取り消し

gsutil acl ch -d AllUsers gs://my-expp-test-bk/とっぷ.txt
Updated ACL on gs://my-expp-test-bk/とっぷ.txt

フォルダ内ファイルの一括公開

gsutil acl ch -r -u AllUsers:R gs://my-expp-test-bk/さぶふぉるだ
Updated ACL on gs://my-expp-test-bk/さぶふぉるだ/さぶ.txt

あくまでファイルの公開なので、フォルダのみの公開とアクセスはできない。

https://storage.googleapis.com/my-expp-test-bk/さぶふぉるだ/さぶ.txt

はアクセスできるが、

https://storage.googleapis.com/my-expp-test-bk/さぶふぉるだ

はAccess Denied。

フォルダ内ファイルの一括公開取り消し

gsutil acl ch -r -d AllUsers gs://my-expp-test-bk/さぶふぉるだ
Updated ACL on gs://my-expp-test-bk/さぶふぉるだ/てすと.txt

バケット全体の一般公開

gsutil iam ch allUsers:objectViewer gs://my-expp-test-bk/

バケット内のすべてのファイル・フォルダが公開される。この場合、

https://storage.googleapis.com/my-expp-test-bk/

で、バケットインデックスもXMLで見れるようになる。

バケット全体の一般公開取り消し

gsutil iam ch -d allUsers:objectViewer gs://my-expp-test-bk/

ファイルの削除

gsutil -m rm gs://my-expp-test-bk/とっぷ.txt
Removing gs://my-expp-test-bk/とっぷ.txt...
/ [1/1 objects] 100% Done
Operation completed over 1 objects.

フォルダの削除

gsutil -m rm -r gs://my-expp-test-bk/さぶふぉるだ/
Removing gs://my-expp-test-bk/さぶふぉるだ/さぶ.txt#1589440437050895...
/ [1/1 objects] 100% Done
Operation completed over 1 objects.

バケットの削除

gsutil rm -r gs://my-expp-test-bk/
Removing gs://my-expp-test-bk/とっぷ.txt#1589441826032912...
Removing gs://my-expp-test-bk/さぶふぉるだ/#1589444483605840...
Removing gs://my-expp-test-bk/さぶふぉるだ/さぶ.txt#1589441825715129...
/ [3 objects]
Operation completed over 3 objects.
Removing gs://my-expp-test-bk/...

ファイルシステムとしてマウントする

※面倒なわりに問題が多く正直おすすめできません※

追加ツールが必要。

gcloud auth application-default login

アカウントを間違えないようにして選択認証

gcloud auth application-default print-access-token

gcsfuseインストール

sudo -s
cd /etc/apt/sources.list.d
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 -
apt update
apt install gcsfuse
exit

一般ユーザに戻ってログイン/認証

gcloud auth login
認証以下略

マウント用ディレクトリ作成

sudo -s
cd /home
mkdir gcs
chown hogeuser:hogegroup gcs # 一般ユーザ用にする
exit

一般ユーザに戻ってマウント

cd /home/gcs
mkdir my-expp-test-bk
gcsfuse my-expp-test-bk /home/gcs/my-expp-test-bk
Using mount point: /home/gcs/my-expp-test-bk
Opening GCS connection...
Opening bucket...
Mounting file system...
File system has been successfully mounted.

確認

ls -alF /home/gcs/my-expp-test-bk
total 1
-rw-r--r-- 1 hogeuser hogegroup 10 May 14 16:14 とっぷ.txt

あるはずの「さぶふぉるだ」が無い。

調べたところCloud Storageはオブジェクトとキーのみでディレクトリの概念が無いとかなんとか理由が出るが、要はバグではないか。実際見えてないんだから。

自分でディレクトリを作ると、見れるようになる。

cd /home/gcs/my-expp-test-bk
mkdir さぶふぉるだ
ls -alF
total 1
drwxr-xr-x 1 hogeuser hogegroup  0 May 14 17:21 さぶふぉるだ/
-rw-r--r-- 1 hogeuser hogegroup 10 May 14 16:14 とっぷ.txt
ls -alF さぶふぉるだ
total 1
-rw-r--r-- 1 hogeuser hogegroup 13 May 14 16:13 さぶ.txt

面倒すぎる!ミスのもとです。

なので、マウント時、--implicit-dirsオプションをつけると、最初から見れるらしいが、、

gcsfuse --implicit-dirs my-expp-test-bk /home/gcs/my-expp-test-bk

ls -alF
total 1
drwxr-xr-x 1 hogeuser hogegroup  0 May 14 17:21 さぶふぉるだ/
-rw-r--r-- 1 hogeuser hogegroup 10 May 14 16:14 とっぷ.txt

確かに見えてますが、そのかわりすべての操作が滅茶苦茶重い、使い物にならない。

さっさとアンマウントして、gsutilのみを使いましょう。

アンマウント

fusermount -u /home/gcs/my-expp-test-bk

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】