AWS Transfer for SFTPを使って、Amazon Linux 2にマウントしてみた #reinvent

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、コンサル部の望月です。

re:invent2018もアディショナルタイムに入りました。

新サービス、AWS Transfer for SFTPが発表されましたが、最初の私の感想としてマウントしてみたい。というものがありました。ということでマウントしてみました。

やってみた

SFTPサーバの作成

こちらは下記ブログにて詳細に書かれているので本ブログでは書きません。作成する際には、ぜひ下記ブログを参考にしてください。

新サービスAWS Transfer for SFTPを使って、WinSCPからS3へアクセスする #reinvent

Amazon Linux 2からSFTP接続

さて、みなさんSFTPサーバの作成は終わったかと思います。

それでは、適当なファイルを作成し、ファイルをSFTPでアップロードできることを確認します。

$ echo test > test.txt
$
$ sftp -i keypair.pem yutamochizuki@s-xxxxxxxxxxxxxxxxx.server.transfer.ap-northeast-1.amazonaws.com
Connected to s-xxxxxxxxxxxxxxxxx.server.transfer.ap-northeast-1.amazonaws.com
sftp> put ./test.txt
Uploading ./test.txt to /<バケット名>/test.txt
./test.txt                                                                                                          100%    5     0.4KB/s   00:00
sftp> ls
test.txt
sftp>
sftp>
sftp> exit

問題なければ、いよいよSFTPでのマウントを行います。

マウントにはsshfsコマンドを利用しますが、例のごとく通常レポジトリにはなくepelが必要となるため amazon-linux-extrasコマンドでepelを有効化し、fuse-sshfsパッケージをインストールします。

$ sudo amazon-linux-extras install epel
$ sudo yum install fuse-sshfs

マウントポイントとして/sftpfsを作成し、マウントを行います。マウント時に以下注意点があります。

  • IdentityFileでの秘密鍵指定は絶対パスの必要があります
  • sftpコマンドの場合、sftpユーザ作成時に指定したホームディレクトリにそのまま接続しますが、sshfsコマンドでのマウント時にはホームディレクトリを指定する必要があります
$ sudo mkdir /sftpfs
$ sudo chown ec2-user. /sftpfs/
$ sshfs -o IdentityFile=/home/ec2-user/keypair.pem yutamochizuki@s-xxxxxxxxxxxxxxxxx.server.transfer.ap-northeast-1.amazonaws.com:/<バケット名> /sftpfs

エラー等、出力がなかった場合はdfコマンドでマウントされていることを確認します。

$ df -h
ファイルシス                                                                                      サイズ  使用  残り 使用% マウント位置
devtmpfs                                                                                            476M     0  476M    0% /dev
tmpfs                                                                                               493M     0  493M    0% /dev/shm
tmpfs                                                                                               493M  388K  493M    1% /run
tmpfs                                                                                               493M     0  493M    0% /sys/fs/cgroup
/dev/xvda1                                                                                          8.0G  1.4G  6.7G   18% /
tmpfs                                                                                                99M     0   99M    0% /run/user/1000
yutamochizuki@s-xxxxxxxxxxxxxxxxx.server.transfer.ap-northeast-1.amazonaws.com:/<バケット名>       1000G     0 1000G    0% /sftpfs

簡単にファイルの追加と削除を試してみましたが、問題なく使えました。

$ echo test > /sftpfs/test2.txt
$ cat /sftpfs/test2.txt
test
$ rm /sftpfs/test2.txt
$ ls /sftpfs/test2.txt

簡単に書き込み速度を測ってみました。(t2.microにて実施)

$ dd bs=1M count=100 if=/dev/zero of=/sftpfs/disktest oflag=direct
100+0 レコード入力
100+0 レコード出力
104857600 バイト (105 MB) コピーされました、 2.85042 秒、 36.8 MB/秒

最後に、マウントした/sftpfsをアンマウントします。

$ fusermount -u /sftpfs

アンマウントされたことを確認します。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         476M     0  476M    0% /dev
tmpfs            493M     0  493M    0% /dev/shm
tmpfs            493M  444K  493M    1% /run
tmpfs            493M     0  493M    0% /sys/fs/cgroup
/dev/xvda1       8.0G  1.4G  6.7G   18% /
tmpfs             99M     0   99M    0% /run/user/1000
tmpfs             99M     0   99M    0% /run/user/0

まとめ

予想通り、問題なくAWS Transfer for SFTPをファイルシステムとしてマウントすることができ、マウント欲を解消することができました。

s3fsなど、S3を直接マウントするよりも、手軽にマウントできる反面、AWS Transfer for SFTP分のコストが発生するため、ご注意ください。

また、想定された使い方ではないため、事前検証がんばりましょう。