【2022年10月版】AWS Transfer Family の SFTP を使ってみた

2022.10.31

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

こんにちは!丸屋 正志です。

今回、AWS Transfer Family の SFTP サービスを使う機会があったので、個人で学んだことをアウトプットしてみました!

そもそも、AWS Transfer Family の SFTPとは?
S3バケットへのSFTP接続によるファイル転送を可能とする、フルマネージドサービスとなります。

1, 今回作るモノの構成図

下記のようなイメージとなります。

インターネットに公開し、SFTPサーバーにアクセスする直前のVPCエンドポイントで接続元IPを絞るタイプとなります。

2, 料金について

AWS Transfer Family の SFTP 自体にかかる(※ 2022年10月時点)料金は下記となります。

  • エンドポイントで SFTP が有効になっている時間:$0.3/時間
  • SFTP データアップロード:$0.04/GB
  • SFTP データダウンロード:$0.04/GB

注意点として、AWS Transfer Family の SFTP 料金は、エンドポイントが作成されてから削除されるまで課金し続けます。
停止した場合でも課金は、継続し続けます。

そのため、本格利用の際には月$216が掛かります。
($216 = $0.3 * 24時間 * 30日という計算です)

最新の料金情報については公式ページをご参照ください。

3, 事前準備

事前に下記の内容を準備する必要があります。

4, やってみた

4.1, ワークフローを作成編

AWS Transfer Family の左ペインからワークフローにアクセスし、【ワークフローを作成】をクリックします。

画面が遷移したら、『多目的なステップ』の枠にある【ステップを追加】をクリックします。

ステップ 1 : ステップタイプを選択

【ファイルをコピー】を選択し、【次へ】をクリックします。

ローカルからtransfer-user/ にアップロードされたファイルを、 ユーザー名毎-copied フォルダにコピーさせます。

ステップ 2 : パラメータを設定

コピーパラメータを設定

  • 『ステップ名』: [任意の名前] (例 : copyfile)
  • 『送信先バケット名』:【任意のバケット名を選択】
  • 『送信先キープレフィックス』: [任意の名前] (例 : ${transfer:UserName}-copied/)

ステップ 3 : 確認と作成

ファイルをコピー

作成する内容に間違いがないかを確認し、【ステップを作成】をクリックし、画面下辺にある【ワークフローを作成】をクリックします。


4.2, SFTPサーバー を作成編

AWS コンソールから AWS Transfer Familyにアクセスし、【サーバーを作成】をクリックします。

ステップ 1 : プロトコルを選択

【SFTP (SSH ファイル転送プロトコル) - Secure Shell 経由のファイル転送】を選択し、【次へ】をクリックします。

ステップ 2 : ID プロバイダーを選択

今回は、サービスマネージドを選択していますが、環境に合わせて選択してください。

SFTP、 FTPS、 または FTP に対応する ID プロバイダー

【サービスマネージド】を選択し、【次へ】をクリックします。

ステップ 3 : エンドポイントを選択

エンドポイントを選択

  • 『エンドポイント』: 【VPC でホスト】
  • 『アクセス』:【インターネット向け】
  • 『VPC』:【任意のVPCを選択】
  • 『アベイラビリティーゾーン』:【任意のサブネットとEIP(IPv4)を選択】
  • 『セキュリティグループ』:【任意のセキュリティグループを選択】

ステップ 4 : ドメインを選択

ドメイン

【Amazon S3】を選択し、【次へ】をクリックします。

ステップ 5 : 追加の詳細を設定

マネージドワークフロー

※ 画面に表示されていない項目については、デフォルトもしくは空白になっています。

  • 『完全なファイルアップロードのワークフロー』:【任意のワークフローを選択】
  • 『マネージドワークフロー実行ロール』:【任意のIAMロールを選択】

ステップ 6 : 確認と作成

作成する内容に間違いがないかを確認し、【ステップを作成】をクリックします。

※ 環境を作成している際は、画面を閉じたり移動したりしないようにしてください。

状態がオンラインになるまで、少し待ちます。

  • 開始中 : サーバーを起動している状態
  • オンライン : サーバーが稼働している状態


4.3, SFTPサーバーにユーザーを追加編

コンソールに表示されている【サーバー ID】をクリックします。

ユーザー追加編

AWS Transfer Family の SFTP を利用するにあたり、専用のユーザーが必要となるため追加いたします。

ユーザー枠にある【ユーザーを追加】をクリックします。

ユーザー設定

  • 『ユーザー名』: [任意の名前] (例 : transfer-user)
  • 『ロール』:【任意のIAMロールを選択】
  • 『ホームディレクトリ』:【任意のバケット名を選択】

SSH パブリックキー

  • 『SSH パブリックキー』:【任意のパブリックキーを貼り付け】

作成する内容に間違いがなければ、【追加】をクリックします。

ユーザー追加が完了すると下記画面のようになります。


4.4, SFTPサーバーに接続してみた編

SFTPサーバーに接続するにあたり、初めにエンドポイントの詳細の枠にある【エンドポイント】をコピーします。

いざ、SFTPサーバーへ接続!

上記でコピーしたエンドポイント先をご利用になっているターミナルなどに貼り付けて、接続します。

$ sftp -i ssh鍵 接続するユーザー名@sご利用のエンドポイント名に合わせる

## サンプル実施コマンド
## sftp -i transfer-key transfer-user@s-エンドポイント名.server.transfer.ap-northeast-1.amazonaws.com

ファイルをアップロードしてみる

適当なファイルを用意してアップロードコマンドを実施してみると、下記のような情報が出力されます。

## 実施コマンド
sftp> put test.file

## 以下は出力内容
Uploading test.file to /S3バケット名/transfer-user/test.file
test.file                    100%  687    19.4KB/s   00:00

アップロード後のS3バケットを確認してみる

test.filetransfer-user/ にアップロードされ、その後に transfer-user-copied/ にコピーされます。

下記フォルダが無い場合は、自動生成されます。

  • transfer-user/
  • transfer-user-copied/
## 実施コマンド
$ aws s3 ls S3バケット名 --recursive

## 以下は出力内容
2022-10-31 14:22:12        687 transfer-user-copied/test.file
2022-10-31 14:22:12        687 transfer-user/test.file

5, Q&A

Q, 作成済みのワークフローの条件を変更したいのですが、既存のワークフローは変更できないですか?
A, はい、一度作成したワークフローの条件は変更不可となりますので、新しいワークフローを作成する必要があります。

Q, エンドポイントのタイプを変更したいですが、どうしたら良いですか?
A, 該当サーバーを一旦『停止』してから、希望のタイプに切り替えることが可能です。

Q, 利用するポートを22番以外にしたいですが、可能ですか?
A, はい、可能です。詳しくは下記 AWSナレッジをご参照ください。
AWS Transfer Family SFTP 対応サーバーエンドポイントで、カスタムリスナーポートを使用して Elastic IP アドレスを有効にする方法を教えてください。

6, 参考情報

7, 最後に

初めて AWS Transfer Family の SFTP を使ってみましたが、マネージドサービスという事もあり、運用管理をしなくていいのはメリットだと感じました。

コスト面でいくと検証環境などでは、利用するたびに作成 / 削除をしてもいいかなと思います。