[マルチAZ構成]AWS PrivateLink + Transfer Family for FTP経由でファイル転送してみた

2024.02.20

はじめに

以前、AWS PrivateLink を利用してTransfer Family for FTP経由でのファイル転送をシングルAZ構成で構築しました。

今回は、上記の構築をもとに、マルチAZ構成を構築します。

前提

下記の記事通り、以下の構成を構築済み。(Transfer FamilyのVPCエンドポイントはシングルでも可能です)

今回のゴールであるマルチAZ構成は下記の通りです。

今回、FTPクライアントは、lftpを利用しました。シングルAZやマルチAZ構成に限らず、FTPクライアントによって、NLB経由ではTransfer Familyに接続できないケースやTransfer Family のPassiveIpパラメータを変更しなければならないケースがあります。他のFTPクライアントを利用する際は、下記の記事を一読ください。

以下の手順でマルチAZ構成を構築します。

  1. Transfer Familyのエンドポイントの追加
  2. NLBにサブネット追加
  3. ターゲットグループにIPアドレスを追加
  4. エンドポイントサービスにサブネット追加
  5. VPCエンドポイントにサブネット追加
  6. FTP接続

Transfer Familyのエンドポイントの追加

以下の通り、Transfer Familyのエンドポイントが1つのみの場合は、もう1つ追加します。

エンドポイントの設定からサブネットを追加して保存するのみです。

Transfer Familyのエンドポイント(VPCエンドポイント)に、10.0.4.82が追加されました。

現時点での構成は以下の通りです。

NLBにサブネット追加

NLBは、1サブネットのみのため、追加でサブネットを選択します。

サブネットを選択し、保存します。

現時点での構成は以下の通りです。

ターゲットグループにIPアドレスを追加

FTP通信を行うので、NLBのターゲットグループは、ポート21、8192~8200を指定し、ターゲットIPにはTransfer Familyのエンドポイントを指定しています。

ターゲットグループは、1つずつポートを指定するため、合計10つのターゲットグループが作成されています。

現在、ターゲットグループのターゲットIPにはTransfer Familyのエンドポイント10.0.0.3.255のみが登録されています。

先ほど追加したTransfer Familyのエンドポイントである10.0.4.82を追加します。

追加のIP登録直後は、ヘルスステータスがinitialになります。

数分後、ヘルスステータスがHealthyになります。

残り9個のターゲットグループも同様に登録します。

現時点での構成は以下の通りです。

エンドポイントサービスにサブネット追加

エンドポイントサービスを確認すると、PrivateLinkに紐づいているNLBは、1AZのみになっておりましたので、2AZに紐づくよう設定します。

[ロードバランサーの関連づけ/関連付け解除]を選択します。

1AZのみが関連付けされていますが、特に変更せずに[変更を保存]をクリックすると、NLBが2AZに紐づく設定に更新されます。(1AZのみの状態をスクリーンショットで保存していなかったため、モザイクをかけています)

[変更を保存]をクリック後、再度編集画面に遷移すると、2AZに紐づく表示になりました。

VPCエンドポイントにサブネット追加

利用者側のVPCエンドポイントも2AZに増やします。[サブネットを管理]から追加できます。

ステータスが[使用可能]になるまで待ちます。

これでマルチAZでの構成は完了です。

FTP接続

それではFTP接続を行います。

今回マルチAZ構成を実施しましたので、各AZからFTP接続が可能かを確認するため、VPCエンドポイントのAZ固有のDNS名(以下の赤枠参照)を使用します。リージョン固有のDNS名(以下の青枠参照)でも接続可能です。

ap-northeast-1aの場合

ftp接続時、ユーザー名とパスワード名の入力が必要です。シングルAZ構成時に設定したユーザー名はclassです。

$ lftp -d vpce-09de7f41eb073a17e-r95udb03-ap-northeast-1a.vpce-svc-04ec99342c0977f6c.ap-northeast-1.vpce.amazonaws.com

lftp vpce-09de7f41eb073a17e-r95udb03-ap-northeast-1a.vpce-svc-04ec99342c0977f6c.ap-northeast-1.vpce.amazonaws.com:~> login class

Password: 

lftp class@vpce-09de7f41eb073a17e-r95udb03-ap-northeast-1a.vpce-svc-04ec99342c0977f6c.ap-northeast-1.vpce.amazonaws.com:~> cd S3バケット名

lftp class@vpce-09de7f41eb073a17e-r95udb03-ap-northeast-1a.vpce-svc-04ec99342c0977f6c.ap-northeast-1.vpce.amazonaws.com:/S3バケット名> put test.txt

<--- 227 Entering Passive Mode (0,0,0,0,32,6)   
---- Address returned by PASV seemed to be incorrect and has been fixed
---- Connecting data socket to (10.1.135.46) port 8198
---- Data connection established
~中略~
5 bytes transferred

10.1.135.46は、VPCエンドポイントのap-northeast-1aのプライベートIPです。

ファイル転送できることが確認できました。

ap-northeast-1cの場合

$ lftp -d vpce-09de7f41eb073a17e-r95udb03-ap-northeast-1c.vpce-svc-04ec99342c0977f6c.atheast-1.vpce.amazonaws.com

lftp vpce-09de7f41eb073a17e-r95udb03-ap-northeast-1c.vpce-svc-04ec99342c0977f6c.ap-northeast-1.vpce.amazonaws.com:~> login class
Password: 
lftp class@vpce-09de7f41eb073a17e-r95udb03-ap-northeast-1c.vpce-svc-04ec99342c0977f6c.ap-northeast-1.vpce.amazonaws.com:~> cd S3バケット名

lftp class@vpce-09de7f41eb073a17e-r95udb03-ap-northeast-1c.vpce-svc-04ec99342c0977f6c.ap-northeast-1.vpce.amazonaws.com:/S3バケット名> put test.txt

<--- 227 Entering Passive Mode (0,0,0,0,32,2)
---- Address returned by PASV seemed to be incorrect and has been fixed
---- Connecting data socket to (10.1.157.78) port 8194
---- Data connection established
~中略~
5 bytes transferred

10.1.157.78は、VPCエンドポイントのap-northeast-1aのプライベートIPです。

ファイル転送できることが確認できました。

もちろん、リージョン固有のDNS名(vpce-09de7f41eb073a17e-r95udb03.vpce-svc-04ec99342c0977f6c.ap-northeast-1.vpce.amazonaws.com)でも接続できました。

最後に

今回、マルチAZ構成で、AWS PrivateLink + Transfer Family for FTP経由のファイル転送を構築しました。

シングルAZからマルチAZ構成による追加ランニングコストは、VPCエンドポイント1個分のUSD 0.014のみです。

Transfer Family サーバーには最大 3 つのアベイラビリティーゾーン (AZ) を選択できます。1 台のサーバに複数の AZ を設定しても、追加のコストは発生しません。引用

このランニングコストが許容できれば、基本的には本番運用では、マルチAZ構成がよいでしょう。