AWS Transfer for SFTPでTerminalからサーバ作成してbatchmodeでの動作確認までやってみた #reinvent

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

re:Invent 2018で発表されたAWS Transfer for SFTPにて、サーバ作成からbatchmodeでのファイル取得までをTerminal上で一通り完結させてみたくなり、試してみました。

目次

事前準備

pipenvにてPython3.6とawscliを導入します。

% pipenv install --python 3.6
% pipenv install awscli
% pipenv shell

なお、利用するRoleは事前に作成しておきます。以下の記事を参考にしてみてください。

Role-Arnの確認

RoleのArnが要求されるため、事前にaws-iamにて確認しておきます。

% aws iam list-roles | jq '.Roles[].Arn'

awscliからの操作

既にawscliからtransferの操作は可能になっています。

以下の順に操作します。

  1. サーバの作成
  2. ユーザの作成
  3. PublicKeyの登録

サーバの作成

作成後に表示されるServerIDを把握しやすくするため、jqで絞り込んでいます。

% aws transfer create-server --identity-provider-type SERVICE_MANAGED | jq '.ServerId'
"s-XXXXXXXXXXXXXXXXXXX"

ユーザの作成

今回はSFTPのユーザ名をtestにして作成しています。

% aws transfer create-user --role="arn:aws:iam::XXXXXXXXXXXXXXX:role/<ROLE_NAME>"  --server-id="s-XXXXXXXXXXXXXXXXXXX" --user-name="test"
{
    "ServerId": "s-XXXXXXXXXXXXXXXXXXX",
    "UserName": "test"
}

PublicKeyの登録

Keyを作成していない場合はssh-keygenで作成しておきます。

% aws transfer import-ssh-public-key --server-id="s-XXXXXXXXXXXXXXXXXXX" --ssh-public-key-body="`cat ~/.ssh/id_rsa.pub`" --user-name="test"
{
    "ServerId": "s-XXXXXXXXXXXXXXXXXXX",
    "SshPublicKeyId": "key-XXXXXXXXXXXXXX",
    "UserName": "test"
}

Terminalからのsftp接続指定

特に特別な指定は必要ありません。接続先は<SERVER_ID>.server.transfer.ap-northeast-1.amazonaws.comとなります。

% sftp -i ~/.ssh/id_rsa test@s-XXXXXXXXXXXXXXXXXXX.server.transfer.ap-northeast-1.amazonaws.com
The authenticity of host 's-XXXXXXXXXXXXXXXXXXX.server.transfer.ap-northeast-1.amazonaws.com (XX.XX.XX.XX)' can't be established.
RSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Are you sure you want to continue connecting (yes/no)? yes
Connected to test@s-XXXXXXXXXXXXXXXXXXX.server.transfer.ap-northeast-1.amazonaws.com.
sftp>

batchmodeでの実行

簡単にlsgetのみでやってみます。

% cat << EOF > batch_commands
ls
get *
EOF
% sftp -b batch_commands -i ~/.ssh/id_rsa test@xxxxxxxxxxxxxxxxx.server.transfer.ap-northeast-1.amazonaws.com

ファイル一覧が表示されて、それらがまとめてローカルに転送されているはずです。

Serverの削除

削除する場合の手続きです。

ユーザの削除

% aws transfer delete-user --user-name="test" --server-id="s-XXXXXXXXXXXXXXXXXXX"

サーバの削除

% aws transfer delete-server --server-id="s-XXXXXXXXXXXXXXXXXXX"

まとめ

awscliを利用することで、AWS Transfer for SFTPもTerminal上から操作を完結できました。今回は最もシンプルな設定で行いました。必要に応じて各種オプションを指定しましょう。

十分すぎる程に素早く設営ができるため、SFTPサーバが必要な際は一つの選択として検討してみては如何でしょうか。