AWS PrivateLink構築のつまづきポイントや通信エラーの確認方法

# はじめに
[前回](https://qiita.com/2keta/items/21cfbc5c93dfd02a89d3)に続き、今回はAWS PrivateLink経由でHULFT転送を行うにあたり相談や問合せが多い
* 設定できない
* 設定したものの転送できない

といった代表的な問題に対する具体的な確認方法を紹介します。
必ずしもHULFTによるファイル転送に限らない内容がほとんどですので
同様の状態で困っている方々の参考になればと思います。
なお、昨今ではPrivateLinkに関する記事も増えてきておりますので
基本的な設定要領や個別の説明はそちらへお譲りし、ここでは割愛します。

# 目次
つまづきポイント　~　HULFT のPrivateLink通信について問合せ、質問が多いものたち　~
[問題1. 設定できない](https://qiita.com/2keta/private/a045f94ce2c5ce37542b#%E5%95%8F%E9%A1%8C%EF%BC%91--%E8%A8%AD%E5%AE%9A%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84)
[問題2. 宛先ホスト名が長すぎて配信HULFTに設定できない](https://qiita.com/2keta/private/a045f94ce2c5ce37542b#%E5%95%8F%E9%A1%8C%EF%BC%92--%E5%AE%9B%E5%85%88%E3%83%9B%E3%82%B9%E3%83%88%E5%90%8D%E3%81%8C%E9%95%B7%E3%81%99%E3%81%8E%E3%81%A6%E9%85%8D%E4%BF%A1hulft%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84)
[問題3. 接続エラーで通信できない](https://qiita.com/2keta/private/a045f94ce2c5ce37542b#%E5%95%8F%E9%A1%8C%EF%BC%93--%E6%8E%A5%E7%B6%9A%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7%E9%80%9A%E4%BF%A1%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84)

## 問題１ ： 設定できない
PrivateLink設定時に、宛先のエンドポイントサービスが見付からない場合等の相談が寄せられます。
このようなときに多いのは、
[ケース1.　構築順序が合っていない](https://qiita.com/2keta/private/a045f94ce2c5ce37542b#%E3%82%B1%E3%83%BC%E3%82%B9%EF%BC%91-%E6%A7%8B%E7%AF%89%E9%A0%86%E5%BA%8F%E3%81%8C%E5%90%88%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84)
[ケース2.　接続元AWSアカウントが接続先エンドポイントサービスに登録されていない](https://qiita.com/2keta/private/a045f94ce2c5ce37542b#%E3%82%B1%E3%83%BC%E3%82%B9%EF%BC%92-%E6%8E%A5%E7%B6%9A%E5%85%83aws%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%8C%E6%8E%A5%E7%B6%9A%E5%85%88%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AB%E7%99%BB%E9%8C%B2%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84)
[ケース3.　接続元／先で一致するAZが無い](https://qiita.com/2keta/items/a045f94ce2c5ce37542b#%E3%82%B1%E3%83%BC%E3%82%B9%EF%BC%93-%E6%8E%A5%E7%B6%9A%E5%85%83%E5%85%88%E3%81%A7%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8Baz%E3%81%8C%E7%84%A1%E3%81%84)
[ケース4.　プロビジョニングされていない](https://qiita.com/2keta/items/a045f94ce2c5ce37542b#%E3%82%B1%E3%83%BC%E3%82%B9%EF%BC%94-%E3%83%97%E3%83%AD%E3%83%93%E3%82%B8%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84)
という４つです。それぞれについて、簡単に説明します。

　
#### ケース１. 構築順序が合っていない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702373/43c8637c-c41f-3952-4947-192991bca26b.png)
通信先となる方から順に①→②・・・→⑤と作成する必要があります。この順序どおりに設定を作成しない場合、例えば③LoadBalancerの②Listenerを作成しようとしても①TargetGroupが作成されていなければ指定できないため、構築できません。

:::note
削除する場合は原則として作成時の逆に接続元側から定義を破棄する必要があります。
:::

　
#### ケース２. 接続元AWSアカウントが接続先エンドポイントサービスに登録されていない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702373/43c8637c-c41f-3952-4947-192991bca26b.png)
図中の***④***へ接続する***⑤***を定義するには、***⑤***のAWSアカウントを④の許可プリンシパルに設定する必要があります。
設定する内容は接続元アカウントを許可するためのものなのですが、単純にAWSのアカウントIDを記載するのではなく[IAMのARNというAWS独特の書式](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)で記述する必要があります。
この設定先は、下図の「プリンシパルを許可」(英語画面の場合は「Allow principal」)タブにあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702373/df8d7e2c-ed0e-0776-55ee-7c99c5782453.png)

:::note
***⑤***「endpoint」作成時に***④***「endpoint service」が検索できない場合、先ずこの指定内容を確認しましょう。
:::
　
#### ケース３. 接続元／先で一致するAZが無い
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702373/43c8637c-c41f-3952-4947-192991bca26b.png)
PrivateLinkの接続元（図中の⑤）と接続先（図中の⑥）のAZ（アベイラビリティゾーン）について、異なるVPC同士なのでサブネットが展開されているAZが異なっている場合があります。
例えば、接続元がxxx-1aとxxx-1cであり、接続先がxxx-1cとxxx-1dで構成されている場合はxxx-1c部分が一致するため、冗長性は確保出来ないものの接続は可能です。
ところが、接続元／先で一致するAZが存在しない場合、接続元側のエンドポイント（図中の⑤）作成時に接続先となるエンドポイントサービス（図中の⑥）が見付かりません。
こうした場合、VPCのAZを追加するなどして一致するAZを確保する必要があります。

:::note
AZはAWS側のリソース増強により新たに追加される場合があります。例えば接続先となるエンドポイントサービス生成時には存在しなかったAZが、接続元となるエンドポイント作成時に存在して割り当てられる可能性があります。
:::
　
#### ケース４. プロビジョニングされていない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702373/43c8637c-c41f-3952-4947-192991bca26b.png)
AWSの各種リソースには生成に時間を要するものがあります。
例えば、図中③のようにプロビジョニングが必要なリソースは、定義を作成してから動作できるようになるまでに時間がかかります。
こうした場合、例えば下図のように対象リソースのステータスがプロビジョニング中（provisioning）という状態に見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702373/dcb04107-13c1-31a2-1370-5976dc8620ce.png)

:::note
この準備が整う（「Active」という状態に見える）までは、利用する事ができません。
:::
　
## 問題２ ： 宛先ホスト名が長すぎて配信HULFTに設定できない
PrivateLink経由でHULFT転送を行う場合、配信側HULFTの宛先は自VPCに設けられたEndpointとなります。
これを宛先とする場合のホスト名はEndpointのDNS名となり、一般的に100文字前後となります。
つまりHULFTに登録できる宛先ホストの最大ホスト名長である68文字を大幅に超えてしまいます。
これに対処する方法は、以下の２点が考えられます。
1. ROUTE53にDNSのAレコードとして短い名前のホスト名を追加する
1. hostsファイルのIPアドレスに短いalias名を設定する

:::note alert
上記2による対応の方が手軽なのですが、宛先EndpointServiceがAZ分散を行っている場合には利用できません。
:::
　
## 問題３ ： 接続エラーで通信できない
#### ケース１. 疎通確認方法がわからない
PrivateLinkはTCP通信しか通さないため、TCPでなくICMPプロトコルを利用するpingコマンドは利用できません。
このため配信側ホストから相手先集信へ通信可能かどうかを確認するには[「utlalivecheck」というHULFTのユーティリティ（利用方法は本リンクを参照ください）](https://www.hulft.com/help/ja-jp/HULFT-V8/UX-OPE/Content/HULFT_OPE/HULFTOpeUtl/RmtHBCmd.htm)を利用します。このコマンドは、元来は集信プロセスの起動状態を確認するためのものですが、HULFTの転送と同様に実際に集信プロセスへのTCP接続を試みるため、疎通確認にも利用することができます。
　
#### ケース２. どこまで通信が到達しているか分からない
転送の通信は下図の構成で、ClientApplicationと記載されているHULFTインストール環境→⑤→④→③と流れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702373/43c8637c-c41f-3952-4947-192991bca26b.png)
それぞれまで通信が到達しているか否かの確認方法を紹介します。

:::note warn
以降の画面例で示すAWSのモニタ画面は、表示される内容にタイムラグがあります。
通信内容が見えるまでに数分かかりますので、４～５分程度は監視を続けてみてください。
:::
　
##### ケース２.1 　⑤の Endpoint のモニタ画面
AWSコンソールのVPC＞Endpointsメニューより対象を選択し「Monitoring」タブを選択します。
通信が届くと「New Commections」等のグラフに変化が現れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702373/353a8b8d-0974-8564-1295-c76ba28a5ec0.png)
　
##### ケース２.2　④の EndpointService のモニタ画面
AWSコンソールのVPC＞Endpoint servicesメニューより対象を選択し「Monitoring」タブを選択します。
通信が届くと「New Commections」等のグラフに変化が現れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702373/5c43b91f-c3ff-993f-2aa1-03e056905813.png)
　
##### ケース２.3　③の LoadBalancer のモニタ画面
AWSコンソールのEC2＞Load Balancingメニューより対象を選択し「Monitoring」タブを選択します。
通信が届くと「New flow count」や「New flow count TCP」等のグラフに変化が現れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2702373/9ca1183b-24e8-dacd-ff81-9843fcff40ef.png)

:::note
ここまで問題無く通信が通っていれば、残る問題要因は以下です。
１ TargetGroupの宛先アドレスやポートが間違っている
２ 受信（集信）サーバ環境のセキュリティグループが通信を許可していない
３ 受信（集信）サーバ環境のファイアーウォール（IPTables等）が通信を許可していない
:::

# おわりに
今回はPrivateLinkを構築してHULFT転送を試みる際に、主に発生する問題の確認方法について記載しました。
次回は、これら疎通確認が済んだ後で、さらに寄せられる一見不可解に見える現象に対する質問や確認事項について記載したいと思います。