この記事は公開されてから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の操作は可能になっています。
以下の順に操作します。
- サーバの作成
- ユーザの作成
- 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での実行
簡単にls
とget
のみでやってみます。
% 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サーバが必要な際は一つの選択として検討してみては如何でしょうか。