■概要
業務でMountpoint for Amazon S3について学ぶ機会があったため、勉強メモとして記事にまとめました。
現場で求められたこと
APIサーバーの不定期かつ容量が小さいログを1日1回ローテーションしてS3に保存する仕組みとして、Mountpoint for Amazon S3を使用してEC2にS3をマウントし、直接ログ収集を行う。
Mountpoint for Amazon S3とは
Mountpoint for Amazon S3は、Amazon S3バケットをLinuxマシン上のローカルファイルシステムとしてマウントできるオープンソースのファイルクライアントです。これにより、標準的なファイルシステム操作(読み取り、書き込み、ファイルのリスト表示など)を使用してS3オブジェクトにアクセスし、管理することができます。■導入方法
導入手順は以下の通りです。対象のEC2にパッケージをインストールしてS3をマウントするだけなので、シェルスクリプトを作成するよりも比較的労力が少なくなります。①パッケージのインストール
wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.rpm
sudo yum install -y ./mount-s3.rpm
②マウントの実施
mkdir s3mount
mount-s3 mountpoint-for-s3-test s3mount
③マウントの確認
共有ディスクをマウントした場合は、dfコマンドを実行するとマウント済みの領域が表示されます。
df -hT
※コマンド実行時の表示例
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 475M 0 475M 0% /dev
tmpfs tmpfs 492M 0 492M 0% /dev/shm
tmpfs tmpfs 492M 408K 492M 1% /run
tmpfs tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 xfs 8.0G 3.0G 5.1G 37% /
tmpfs tmpfs 99M 0 99M 0% /run/user/0
{S3バケット名} fuse 1.0P 0 1.0P 0% /root/s3
■注意点
①マウントするサーバーのロール要件について
EC2から直接S3に書き込む場合、割り当てるIAMロールは「AmazonS3FullAccess」を設定する必要があります。ただし、権限を限定したい場合は以下のIAMポリシーが必要です。
s3:ListBucket
s3:GetObject
s3:PutObject
s3:AbortMultipartUpload
s3:DeleteObject
②EC2再起動時のマウント解除
EC2サーバーが再起動された場合、S3のマウントが解除されます。そのため、再起動後に自動でマウントが実行されるよう、事前にクーロンジョブを設定する必要があります。
■MountPoint for S3の制約/制限
バケットの作成と管理に関する制約
・他のバケット内から新しいバケットを作成することはできない。
・バケットを作成する際には、バケット名とAWSリージョンを指定する必要があり、これらは作成後に変更できない。
バケット名の命名ルール
・アプリケーションがバケットを自動生成する場合、命名の衝突を防ぐためにユニークな命名スキームを採用する必要がある。