大量の re:Invent 2023 のレポート投稿に追いつけ追い越せ。と Advent Calendar の方も盛り上げていきましょう。
こんにちは、アプリケーションサービス部の千葉@4日目担当です。
コロナウイルスのニュースがめっきり減ったと思ったら、次はインフルエンザが流行っているみたいですね。
ウチのチビが通っている幼稚園では、30名のクラスのうち12名が体調を崩してお休みをしていました。
『子供は風の子』なんて簡単には言ってはイケない世の中みたいです。
あわただしい年の暮れですが、皆様どうぞお健やかにお過ごしください。
さて今回のタイトルについてですが、いつか私が世界を統治したなら戦争と貧困と二日酔いをなくしたいな。と、飲んだ翌日に妄想しています。
ご賛同・ご興味を頂けましたら、ぜひ以下のサイトをご確認ください。
そんな素晴らしい未来に向けての Day One ってコトで、今日は手始めに CloudShell から S3 をマウントしてみたいと思います。
AWS CloudShell について
AWS CloudShell の概要については 公式: What is AWS CloudShell? をご確認ください。
2020年の re:Invent で発表があり、無料で利用できることから当初は CloudShell でどれだけ面白いことができるか。を多くのエンジニアが発信していた記憶です。
とてもユニークなサービスなのですが、いくつかの制限があります。
- 1 vCPU (仮想 CPU) / 2 GiB メモリ
- 各シェルセッションが終了した後にリサイクルされるエフェメラルな環境
- HOMEディレクトリのみ永続的ストレージとして利用可能(1GB)
- 最後のセッション終了から120日間アクセスがなければ HOME ディレクトリは自動的に削除
ほかにもインバウンド通信の遮断、VPC内のリソースへのアクセスは不可等の制約がありますが、すこし複雑なことをやろうとチャレンジしたが 3
のストレージ制限で詰んでしまい断念した。って事例を幾つかみてきました。
↓わたしもそのひとりです。
S3 のマウントについて
S3 をローカルのファイルシステムとしてマウントしたい。って要望は、AWS 初期の頃から多くの声があり s3fs をはじめとする多くのツールが 3rd party からリリースされてきました。
AWS からは EFS がリリースされ、ローカルのファイルシステムとしてマウントできるストレージはココに落ち着くんだろうな。と思っていたんです。(CloudShell から EFS は利用できません)
そしたら今年の8月に↓こんな記事が流れてきたではありませんか。
Advent Calendar の投稿に8月の記事を引っ張ってきて言うのも何ですが、早速試してみましょうじゃありませんか。
インストール、マウント
以下の例では S3 バケット example_s3_bucket
をローカルディレクトリ ~/mnt
にマウントしています。
$ wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm $ sudo yum install -y mount-s3.rpm $ mkdir ~/mnt $ mount-s3 example_s3_bucket ~/mnt --allow-delete
マウント状況の確認
$ mount --types fuse mountpoint-s3 on /home/cloudshell-user/mnt type fuse (rw,nosuid,nodev,noatime,user_id=1000,group_id=997,default_permissions)
検証1: ストレージ 1GB 制限を回避できるのか?
HOMEディレクトリの制限が 1GB なので、試しに 3GB のファイルを生成してみてストレージの状況を確認してみましょう。
実行前に確認した /home/cloudshell-user
の利用率は 3% です。
$ df -h Filesystem Size Used Avail Use% Mounted on overlay 16G 3.5G 12G 24% / tmpfs 64M 0 64M 0% /dev shm 64M 0 64M 0% /dev/shm /dev/nvme1n1 16G 3.5G 12G 24% /home /dev/loop0 974M 24M 883M 3% /home/cloudshell-user /dev/nvme0n1p1 30G 5.1G 25G 17% /aws/mde/mde
3GB のファイルを /home/cloudshell-user/mnt/3G.dummy
に作成します。
$ dd if=/dev/zero of=~/mnt/3G.dummy bs=1M count=3000 $ ls -lh ~/mnt/ total 3.0G -rw-r--r--. 1 cloudshell-user cloudshell-user 3.0G Dec 3 16:16 3G.dummy
3GB のファイル作成後も /home/cloudshell-user
の利用率が 3% のままであることを確認します。
$ df -h Filesystem Size Used Avail Use% Mounted on overlay 16G 3.5G 12G 24% / tmpfs 64M 0 64M 0% /dev shm 64M 0 64M 0% /dev/shm /dev/nvme1n1 16G 3.5G 12G 24% /home /dev/loop0 974M 24M 883M 3% /home/cloudshell-user /dev/nvme0n1p1 30G 5.1G 25G 17% /aws/mde/mde
実際に S3 に 3G.dummy
オブジェクトが作成されていることを確認します。
検証2: ファイル操作
公式: Mountpoint for Amazon S3 - Configuration and usage にて以下の一文があります。
Mountpoint for Amazon S3 intentionally does not implement the full POSIX standard specification for file systems.
意図的にPOSIX標準仕様に準拠していない。とのことです。
基本的なファイル操作でみるとファイルの作成・削除はOK、移動・編集はNGのようです。
(vim でファイルを編集しようもんならヒドい状態になりました)
$ echo "abc" > ~/mnt/foo.txt $ echo "def" >> ~/mnt/foo.txt -bash: /home/cloudshell-user/mnt/foo.txt: Operation not permitted $ mv ~/mnt/foo.txt ~/mnt/bar.txt mv: cannot move ‘/home/cloudshell-user/mnt/foo.txt’ to ‘/home/cloudshell-user/mnt/bar.txt’: Function not implemented $ rm ~/mnt/foo.txt
詳細は 公式: Mountpoint for Amazon S3 file system behavior をご確認ください。
アンマウント
$ sudo umount ~/mnt
まとめ
POSIX標準仕様に準拠していないので、利用シーンは限られてしまいますが追加・参照・削除のみのファイル操作であれば 1GB の制限を回避できるようになりました。
未検証ですが、たとえば ~/.config
を S3 にもっていけば Python の仮想環境やパッケージファイルでストレージを食い潰さないような運用ができるんじゃないかな。とか
世界の統治までの道はとんでもなく遠そうですが千里の道も一歩から。ってヤツです。
いつの日か二日酔いのない世界がくることを信じて来年も頑張っていきます。
草々