Direct Connect経由でAWS Transfer for SFTPを利用する

## 2021/5/6 追記
本記事に記載されている手順は `VPC_ENDPOINT` エンドポイントタイプと呼ばれる現在は非推奨となった方式を利用する手順になっています。2020年1月以降は `VPC` エンドポイントタイプが利用可能になっており、現在はこちらの方式が推奨されています。

`VPC_ENDPOINT` エンドポイントタイプではユーザーが事前に PrivateLink による VPC Endopoint を作成しておく必要はありましたが、`VPC` エンドポイントタイプではその必要はありません。サーバー作成時にエンドポイントのタイプに `VPC でホスト`、アクセスを `内部` とすることで自動的に AWS マネージドのエンドポイントが作成され、それを利用する形になります。PrivateLink の利用料金も発生しません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/41796ab0-a453-4734-5d66-0a4cdd97faf5.png)

`VPC_ENDPOINT` エンドポイントタイプ と `VPC` エンドポイントタイプの機能は同等ですが、新機能は `VPC` エンドポイントタイプ に実装されます。また 2020年1月以降は `VPC_ENDPOINT` エンドポイントタイプのサーバー起動は AWS CLI/SDK 経由でのみ可能でしたが、2021/5/19 以降、`VPC_ENDPOINT` エンドポイントタイプを使用した新規サーバー構築ができなくなる旨が AWS Storage Blog で発表されています。

https://aws.amazon.com/jp/blogs/storage/update-your-aws-transfer-family-server-endpoint-type-from-vpc_endpoint-to-vpc/

### その他参考リンク
https://aws.amazon.com/jp/premiumsupport/knowledge-center/aws-sftp-endpoint-type/

https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html

追記おわり。

## はじめに
AWS Transfer for SFTP が PrivateLink をサポートしたため、VPCエンドポイントを使用して
インターネットを経由せずにS3へのSFTP転送が可能になりました。

https://aws.amazon.com/jp/about-aws/whats-new/2019/03/aws-transfer-for-sftp-now-supports-aws-privatelink/

## やってみる
最初にVPCコンソールからVPCエンドポイントを作成します。
コンソールからは 2つのサービス名
（com.amazonaws.\<region>.transfer と com.amazonaws.\<region>.transfer.server ）
が確認できるのですが、サーバー作成&接続に必要なのは
**com.amazonaws.\<region>.transfer.server** のエンドポイントです。
com.amazonaws.\<region>.transfer はCLI操作等でAPIエンドポイントへの
接続が必要な場合に利用します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/9ec52be2-ac0e-a832-ec4f-27b0c902bdd5.png)
VPCやサブネット、セキュリティグループを設定してエンドポイントを作成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/80f22035-8ca5-824b-41f0-2593f926af8e.png)
Transfer for SFTP サーバーの作成は Endpoint configurationで **VPC** を選択し
最初に作成したVPCエンドポイントのIDを選択すればOK、その他オプションの設定は通常と変わらずです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/59739c89-070c-5b4d-6112-8732b7fa738f.png)

作成後すぐに利用可能になります。
通常のパブリックエンドポイントと比較した注意点としては
**カスタムホスト名をサポートしていない**くらいかなと思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/b18bd996-b4f4-2493-fa20-0cbb6841e79e.png)

VPCエンドポイントのDNS名を指定して接続、転送することができました。

```shell-session
$ sftp -i .ssh/id_rsa user@vpce-xxxxxxxxxxxxxxxxx-yyyyyyyy.server.transfer.ap-northeast-1.vpce.amazonaws.com
Connected to user@vpce-xxxxxxxxxxxxxxxxx-yyyyyyyy.server.transfer.ap-northeast-1.vpce.amazonaws.com.
sftp> !ls test.txt
test.txt
sftp> put test.txt
Uploading test.txt to /<bucket_name>/test.txt
test.txt                                                                                                                                                                                                                                                         100%    0     0.0KB/s   00:00
sftp> ls test.txt
test.txt
sftp> bye
```

エンドポイント作成時にプライベートDNS名を有効にするにチェックを入れていれば、
VPC内やRoute53 Resolverを利用している環境では
server.transfer.ap-northeast-1.amazonaws.com を使用しても名前解決可能です。

```shell-session
$ dig server.transfer.ap-northeast-1.amazonaws.com +short
10.xxx.xxx.xxx
10.xxx.xxx.xxx
```


Direct Connect経由やVPCに閉じた形でS3へのSFTP転送が可能に
なったことでより使いやすくなったと思います。
簡単ですが、参考になれば幸いです。