AWS SFTPサーバの構築
まずはAWS SFTPサーバを立てます。AWSマネージメントコンソールからAWS Transfer for SFTPを選び、Create serverを押します。
とりあえずオプションは全てデフォルトで実行します。DNSや認証関連の設定を行うので、本番運用する場合はきちんと設定する必要があります。
これでCreate serverを押すとサーバが立ち上がります。なんて簡単!!
少し待つと、StateがOnlineに変わります。
ユーザーの登録
続いて、ユーザーの登録をします。Server IDをクリックするとサーバの詳細が表示されるので、Add userをクリックします。ユーザー名はインスタンス同様ec2-userとしておきます。
さらに各種権限の設定を行う必要があります。ここは、SFTPのためのIAMポリシーおよびロールの作成を参考に作業を進めます。一見ゴチャゴチャしていますが、このドキュメントの通りに進めれば簡単に設定できます。アクセス権の制限などについても記述されているので、目を通すといいでしょう。この設定をうまく使うことで、ユーザー毎にアクセスするディレクトリを変えるということもできるようになります。今回はフルアクセス可能な状態にし、ポリシーの名前はAWS-SFTP-S3、ロールの名前はAWS-SFTP-S3-Roleとしました。
ポリシーとロールの作成ができたら、ユーザー登録画面に戻ってそれぞれを指定します。
Home directoryは先ほど作成したS3バケット、condorannexdataを指定します。
SSH Public Keyはインスタンスに接続するために使用しているものがあるはずなので、それをそのまま使います。
ここまで入力できたらユーザーの作成をします。
AWS SFTPサーバに接続してみる
さて、準備ができたのでSFTP経由でS3バケットにアクセスしてみます。
ホスト名はEndpoint名、ユーザー名は先ほど作成したec2-userです。
つながりました!!事前に作成したfoobarファイルやKitchen_setも見えています。
sftpを使用したファイルのアップロードも試してみます。ファイルアップロード時に転送先のファイルのタイムスタンプを転送元のものと同じにする機能はサポートされていないようなので、クライアントによっては明示的にオフにしておかないとエラーになるようです。WinSCPではPreserve timestampをオフにすることで解決できました。
先ほどと同じKitchen_setを転送したところ、4分30秒ほどで完了しました。まだかなり遅いですが、かなり改善されています。参考までに、ひとつで22MBのファイルを転送したら20秒ほどで終わったので、細かいファイルを個別に送るのにはあまり向いていなさそうということはわかります。実際に使用する際はアーカイブファイルにまとめてから転送し、転送先で展開するような処理をした方がいいかもしれないです。
ちなみに、S3→EC2インスタンスのコピーも試してみました。
[ec2-user@ip-172-31-92-46 ~]$ time cp -Rp /var/s3fs/Kitchen_set .
real 0m15.673s
user 0m0.012s
sys 0m0.040s
[ec2-user@ip-172-31-92-46 ~]$
細かいファイルが多くあることを考えれば、決して速くはないですが驚異的に遅いということもなさそうです。
次回予告
これでかなりクラウド側の環境を整えることができました。次回からはこの環境の上で各種ジョブを実行できる環境をつくっていきます。本連載のクラウド編も佳境ですので引き続きよろしくおねがいします!!
そして、クラウド編終了後の次のネタも絶賛大募集中なのです!!
第19回の公開は、2019年12月を予定しております。
プロフィール