HULFT Squareでのファイル集配信におけるAWS環境構築をしてみた

## はじめに
こんにちは、すぎもんです:grinning:

今回は、当社の新たなサービス「HULFT Square」のファイル転送サービス（Transfer）を使ったファイルの集信や配信のために、必要な環境構築をやってみます。
HULFT Squareと外部通信する仕組みについては、[こちらの記事](https://qiita.com/sugimon/items/75263b34a8fa5943fd21)で理解していただき、本記事で実際に環境設定をやっていきましょう。

## HULFT Squareとは？
HULFT Squareとは、データを「安全・安心・柔軟に」連携するプラットフォームサービス、いわゆるiPaaSです。「ファイル転送のHULFT」×「データ連携のDataSpider」×「フルマネージドサービス」。これらの側面から、オンプレやクラウドなど分散されたデータを一元化し、データ活用することを可能とするサービスです。

## 記事構成
今回の記事構成は、<strong>HULFT Squareで集配信してみた全４回シリーズ</strong>　になります。環境構成をまず①②で理解して、③④と進んで読んでいただくのがおすすめです。
　　　　　　　①[HULFT Squareと外部通信する仕組みについて、AWS PrivateLinkなど含めて整理してみた](https://qiita.com/sugimon/items/75263b34a8fa5943fd21)
　★本記事★　②[HULFT Squareでのファイル集配信におけるAWS環境構築をしてみた](https://qiita.com/sugimon/items/6854f135b241f491c68b)
　　　　　　　③[HULFT Square配信　⇔　HULFT集信（EC2上）やってみた](https://qiita.com/sugimon/items/5fcb8db4bb8742c3278b)
　　　　　　　④[HULFT Square集信　⇔　HULFT配信（EC2上）やってみた](https://qiita.com/sugimon/items/7038422f2bc17d740abb)

## 今回の検証環境について
まずは、前記事のおさらいです。HULFT Squareと外部環境の通信では、プライベート通信のために「AWS PrivateLink」を利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ed917ddc-6101-0a35-1e9a-913ab373fbee.png)
例えば、HULFT Squareでファイル配信する場合は、お客様VPC環境に、
エンドポイントサービス、NLB、ターゲットグループの作成が必要です。

今回は、下図の環境構成を構築します。
HULFT Squareからの接続リクエストが、図中の<strong>「HULFT」</strong>に届くよう設定します。
今回は、お客様環境として作成したVPC上の1つのインスタンスに、HULFTをインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/a948ff07-0eac-786b-0c1d-174721b208ab.png)
<strong>＜今回の検証でHULFT Squareの通信先環境で必要な設定＞</strong>
通信先となるお客様環境VPC上のインスタンスにHULFTをインストールした環境にて、必要な環境設定は下記の通りです。
　　<strong>①VPCの作成</strong>
　　 　まずは、HULFT Squareと通信するVPC環境を作成します。
　　<strong>②プライベートサブネット上にEC2インスタンスの作成</strong>
　　 　次に、HULFTのインストール先となるサーバーを起動します。　
　　<strong>③HULFTインストール</strong>
　　　 ②で作成したインスタンス上にHULFTをインストールします。
　　<strong>④ターゲットグループの作成（HULFT Square配信の場合）</strong>
　　　 接続リクエストの転送先を指定します。
　　　 今回は、HULFTがインストールされた「インスタンス」を指定します。
　　<strong>⑤NLB（ネットワークロードバランサー）の作成（HULFT Square配信の場合）</strong>　
　　　 プロトコルとポートを指定して、ターゲットグループを指定します。
　　<strong>⑥セキュリティグループの設定</strong>
　　　 接続の受信トラフィックを、インバウンドルールに設定します。

これらの設定が、HULFT Squareの通信先環境で必要な設定です。
また、今回のやってみた検証での作業を実施する上で、いくつか追加設定もしてます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ca40632f-0396-93fc-f1c4-7af534327230.png)
<strong>＜今回の検証で作業をする上で必要となった設定＞</strong>
私が個人作業する上で、必要となった設定は下記の通りです。
　　<strong>①パブリックサブネット上にEC2インスタンスの作成</strong>
　　　 プライベートサブネット上のインスタンスへの踏み台として作成します。
　　　 WindowsOS上でHULFTのインストールや設定操作をします。　　　 

| パブリックサブネット |プライベートサブネット |
|:-----------:|:------------:|
| インターネット上から接続可能 | インターネット上から直接接続できない |

　　　 上記の表の通り、通常プライベートサブネットへの接続は、直接できません。
　　　 そのためパブリックサブネット上のインスタンスを踏み台として利用しました。
　　　 HULFTがあるインスタンスへは、リモートデスクトップ（RDP）接続をします。

　　<strong>②個人端末からSSM接続</strong>
　　　 上図の通り、踏み台となるパブリックサブネット上のEC2インスタンスには
　　　 SSM接続（★）をしました。直接プライベートサブネット接続も可能ですが、
　　　 エンドポイント作成等の省略のため、今回は踏み台サーバー経由での構成です。

<strong>★ AWS Session Manager(SSM)接続について ★</strong>
IAMで認証管理ができたり、SSHキーの管理が不要だったり、様々な利点ある機能ですが、何より、受信ポート側の解放が不要なのでAWS環境を使う場合はセキュリティ面でも手間の面でも便利です。AWS CLIやIAMロールの変更等の設定も必要ですが毎回の作業ではないので、トータルだと早いと思います。ここでは詳細省略します。

以上、２点（パブリックサブネットとSSM接続）は、今回私自身が検証してみる上で、必要になった設定です。HULFT Squareを使うために必要な設定ではありませんので、注意してください。他にも様々な環境構成の方法があると思いますので、一例としてご参考にしてください。

## 設定作業の流れ

今回やってみるHULFT Squareでのファイル集配信における環境準備の手順は、下記の通りです。
※HULFTインストールと、SSM接続に必要な設定などは省略します。
　　　①VPCの作成
　　　②プライベートサブネットにインスタンスの作成
　　　③パブリックサブネットにインスタンスの作成
　　　④ターゲットグループの作成
　　　⑤ネットワークロードバランサーの作成
　　　⑥インバウンドルールの見直し

それでは早速やっていきましょう！

## ①VPCの作成（AWS環境）
まずは、AWSのマネジメントコンソールにログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/12aea508-6c4e-b52e-8dc6-dce725381627.png)

「VPCを作成」を押下して、VPC（`HULFT Square_TEST_VPC`）を新たに作成します。
パブリックサブネットとプライベートサブネットは、1つずつ作成する構成にしたので、それぞれ「１」を選択します。その他はデフォルトで下記キャプチャの通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/edc12853-2601-0cd0-2c56-2f57f4acaff8.png)

:::note info 
サブネットやNAT Gatewayなどの各リソースはVPC作成後にも変更可能です。
DNSホスト名は使いますので、有効化にチェックして発行を忘れないように！
:::

VPCが正常に作成されていることを確認します。
（NatGatewayのアクティブ化に数分時間がかかります。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/839366e7-0266-cc36-6be4-a8b950f04419.png)

## ②プライベートサブネット上にインスタンス起動
次に、プライベートサブネットにインスタンスを作成します。

今回は、Windows ServerのEC2を日本語ベースで作成したいので、AMI選択時に、「Windows Japanese base」などと検索して、Amazonさんの検証済みという意味である「～provided by Amazon」と記載があるものから選択しました。
「`【名前】HULFT Square_Private`」の名前タグをつけて作成します。
※名前は私のチーム運用上必要で付与しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/9685fcb9-d40c-39d4-0253-ef0186706b00.png)

インスタンスタイプは、最新かつコスパの良い「t3.medium」にします。
VPCは先程作成した（HULFT Square_TEST_VPC）、サブネットはprivateサブネットを選択します。
セキュリティグループは（HULFT Square_TEST）という名称で作成し、インバウンドルールは任意の設定をします。後ほど、インバウンドルールの見直しをするので仮置きとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/642a54cf-6ec8-1db7-1d8d-1f292b36e866.png)
「インスタンスを起動」を押下するとインスタンスが作成されます。

## ③パブリックサブネット上にインスタンス起動
同様の手順で、パブリックサブネットのインスタンスを「`【名前】HULFT Square_public`」の名前タグをつけて作成します。
VPCは先程作成した（`HULFT Square_TEST_VPC`）、サブネットはpublicサブネットを選択します。
先程作成したセキュリティグループ（`HULFT Square_TEST`）を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/a05fb382-73aa-3b01-c825-a69f11ebf23d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/8e81917a-bb50-006c-ce4d-2269564540c8.png)
「インスタンスを起動」を押下するとインスタンスが作成されます。

## ④ターゲットグループの作成

次に、メニュー [EC2] > [ターゲットグループ]から、ターゲットグループを作成します。
登録したターゲットにリクエストをルーティングするための設定をしていきます。

今回は、プライベートサブネットのインスタンスをターゲットとするので、
ターゲットタイプは「インスタンス」を選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/cb528fb3-f406-f285-29cf-7a448259ed33.png)
ターゲットグループ名（`HULFT SquareTESTTargetGroup`)で、HULFT疎通用として「TCP:30000ポート」と設定し、VPCは先程作成した（`HULFT Square_TEST_VPC`）を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/8876238a-cef1-bdce-1add-733405683d5c.png)
ヘルスチェックは、「TCP」にします。ヘルスチェックは、ターゲットグループ単位に定義して、ロードバランサーが、登録されたターゲットの状態をモニタリングします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ab6dc8fa-30e4-b867-a017-05b48fa39da8.png)
「次へ」を押下して、「ターゲットの登録」を完了します。

ターゲットとして使用可能なインスタンスが表示されるので、privateサブネットのインスタンス（`【名前】HULFT Square_Private`）にチェックを入れ、画面中央にある「保留中として以下を含める」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/18b73cd2-90a9-bd7e-4625-e991f43c188e.png)
ターゲットとしてprivateサブネットのインスタンスが追加されたことを確認し、「ターゲットグループの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/7d9a96b4-dd27-1ee2-e171-44cc6cdbf8ec.png)
「`HULFT SquareTESTTargetGroup`」という名前のターゲットグループが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/189af789-1d23-2bd8-4705-1656d1e14dd0.png)
以上で、ターゲットグループの作成は完了です。HULFTがインストールされたプライベートサブネット上のインスタンスを、接続リクエストの転送先として登録できたことになります。

## ⑤ネットワークロードバランサーの作成

次に、ネットワークロードバランサー（以下、NLB）の作成をします。
[EC2] > [ロードバランサー] から、「ロードバランサーの作成」を押下して、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/3f9e8f43-1b2c-eb7b-529e-859e87bb25ee.png)
「Network Load Balancer」の「作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/cf249f5a-b9e0-f2c4-150a-5f126a7e37a2.png)
ロードバランサー名（`HULFT SquareTESTLoadBalancer`）で作成します。
「スキーム」は（`内部`）、「IPアドレスタイプ」を(`IPv4`)とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/58d0295c-7ef6-2bbf-8f72-a86d5877baea.png)
作成したVPC(`HULFT Square_TEST_VPC`)を選択し、privateサブネットにマッピングします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/2964ff40-247e-2f8a-e84b-6c46f6024c48.png)

::: note warn
**■2024/2 追記**　
「ネットワークマッピング」と「リスナーとルーティング」の間に「セキュリティグループ」の設定が追加されています。
**※　今後もAWS設定項目が変更される可能性がありますのでご留意ください。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ce6167ce-b791-2f17-fad5-50c4463705c7.png)
:::


リスナーとして「転送先」に、先程作成したターゲットグループ「`HULFT SquareTESTTargetGroup`」を設定します。HULFT疎通用として、「`TCP`」プロトコル,ポートは「`30000`」に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e93e4244-8a2d-6d89-b7ed-4cbc97b03aee.png)
「ロードバランサーの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/676a6b7a-4c22-cfd4-b7b6-5c31c9c51830.png)
ロードバランサーが正常に作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1bce55db-7dc4-de3b-bc27-ecbb786bfadd.png)
以上で、ネットワークロードバランサーの作成は完了です。AWS PrivateLinkに必要なエンドポイントサービスに紐づく、NLBとターゲットグループの作成がこれで完了です。

:::note warn
**■2024年2月追記**
前述の通り、NLB作成時に「セキュリティグループの設定」が必要になりました。
その場合、「ロードバランサー」の「セキュリティ」タブで「PrivateLinkトラフィックにインバウンドルールを適用する」を「オフ」にしておく必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/79921567-1046-9f8f-ca20-6126a6d0c7c8.png)

※「オン」の場合、セキュリティグループ設定でHULFT Squareからの通信を許可する必要があります。一方で、通信許可をIP指定でする場合、HULFT Squareのプライベートアドレスを設定する必要があるものの、プライベートアドレスは未公開のため現時点設定不可能となります。



因みに、私がNLBを作成した時は、ロードバランサー作成時にセキュリティグループの設定項目がなかったため、「セキュリティ」は、下記の表示になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d8fd067d-1469-a2ac-a004-10439b80ffd6.png)
:::

## ⑥インバウンドルールの見直し
冒頭で、「セキュリティグループの作成」をしましたが、踏み台となるパブリックサブネット上のインスタンスから、プライベートサブネットのインスタンスにRDP接続できるよう「セキュリティグループのインバウンドルールを追加」が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/97808b77-0d1f-5314-b798-44b1a3ca6b2d.png)
対象のセキュリティグループを選択し、画面下部の「インバウンドルール」タブの「インバウンドのルールを編集」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d0594cbb-e7ae-c4fd-14be-482fd0873c0d.png)
セキュリティグループの「インバウンドルールを編集」で設定を、2つ追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d16f416e-fe2f-b161-2893-3255707b3c6b.png)
<strong>＜設定①＞</strong>
パブリックサブネットのIPアドレスを設定します。
「タイプ」　　　：　`RDP`　　　　
「プロトコル」　：　`TCP`
「ポート範囲」　：　`3389`　　　 
「ソース」　　：　`※パブリックサブネットインスタンスのプライベートIPアドレス`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/87a44c90-3d39-8a53-e11b-8b104c5f17b2.png)
また、NLBとの紐づけを行うために、セキュリティグループのインバウンドルールにNLBの情報も追加します。
<strong>＜設定②＞</strong>
「タイプ」　　　：　`カスタムTCP`　　　　
「プロトコル」　：　`TCP`
「ポート範囲」　：　`30000`　　　
「ソース」　　　：　`※NLBのIPアドレスを設定`

:::note info
NLBのIPアドレスは、`「nslookupコマンド」+「ロードバランサーのDNS名」`でIPアドレス取得ができます。また、AWSマネジメントコンソール画面メニューにある「ネットーワークインターフェイス」からも確認が可能です。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/5a31b755-9c9a-48b4-9b6d-33c5cbf36cb2.png)
以上で、セキュリティグループのインバウンドルールの見直しは完了です。

ここまでで、HULFT SquareとEC2上のHULFTと疎通するためのAWS環境の作成の大枠が完成しました。

但し、記事冒頭でHULFT Squareの外部通信についてご説明した通り、実際の疎通では、AWS PrivateLink接続のために、HULFT Squareからの配信の場合は、AWS環境内でのエンドポイントサービス（NLBやターゲットグループ含む）作成が必要ですし、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/537c722c-d31c-60c9-1bd0-4ffedf89b931.png)
HULFT Squareが集信する場合は、AWS環境内でのエンドポイントの作成が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/019dfd7b-30a2-458b-5bcd-ea5dd1e32205.png)
AWS PrivateLinkを利用するために必要となるエンドポイントやエンドポイントサービスの作成については、別記事に書いてあります。下記の記事も是非、ご一読ください！

[HULFT Square配信　⇔　HULFT集信（EC2上）やってみた](https://qiita.com/sugimon/items/5fcb8db4bb8742c3278b)
[HULFT Square集信　⇔　HULFT配信（EC2上）やってみた](https://qiita.com/sugimon/items/7038422f2bc17d740abb)

## 最後に
皆さん、いかがでしたでしょうか。

今回は、HULFT SquareとEC2上のHULFT集配信における、HULFT側のAWS環境設定についてやってみました。VPCを新規で作成することはなかなかない機会だったので、非常に勉強になりました。一つ一つの積み上げになりますが、集配信を一通りやってみると、HULFT Squareの概要が整理できるかと思います。

今回の記事構成は、HULFT Squareで集配信してみた全４回シリーズ　になります。環境構成をまず①②で理解して、③④と進んで読んでいただくのがおすすめです。
　　　　　　　①[HULFT Squareから外部通信する仕組みについて、AWS PrivateLinkなど含めて整理してみた](https://qiita.com/sugimon/items/75263b34a8fa5943fd21)
　★本記事★　②[HULFT Squareでのファイル集配信におけるAWS環境構築をしてみた](https://qiita.com/sugimon/items/6854f135b241f491c68b)
　　　　　　　③[HULFT Square配信　⇔　HULFT集信（EC2上）やってみた](https://qiita.com/sugimon/items/5fcb8db4bb8742c3278b)
　　　　　　　④[HULFT Square集信　⇔　HULFT配信（EC2上）やってみた](https://qiita.com/sugimon/items/7038422f2bc17d740abb)

最後までお読みいただき、ありがとうございました！
それでは、また！