Open bikram-cloud opened 4 years ago
Privateのsubnetはネットと接続する為にNATが必要です。
必要な設定:
商用リリースする前の設定: 未確定
外部と接続すれば、ネットワークACLが使用すれば、アクセスがコントロールできる
NATの専用なinstanceで作った方がいい??? 「Source/Destination Checks」はDisableに変更することが必要??
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck
Keep active:
sudo mkdir shellscript
pwd: /home/ubuntu/shellscript
Shellscript:
sudo vi connecttest.sh
#!/bin/sh
for(int i = 0 ; i < 5; i++)
ping -o "idx.ols.aws.kddi.com" >/dev/null 2>&1
if [ "$?" = 0 ]
then
break
else
echo "Host not found"
fi
Cronjob:
sudo crontab -e
* * * * * /home/ubuntu/shellscript/connecttest.sh * * * * * (sleep 30 ; /home/ubuntu/shellscript/connecttest.sh)
NathanからSlack上でのコメント
Load Balancer: Two connections
60秒以内ターゲットはデータがおくれなかったらfrontendの接続を閉じる可能性がある
【Option 1】 ALBのtimeout設定は60秒から4000秒に更新する 「Load Balancer」→「Description」→「Edit attributes」 Idle timeout: 60 → 4000
【Option 2】 idletimeする前に1byteのデータを送ります。 (websocketのメッセージを送る?)
ALB側で、EC2にリクエストを分散しても、60秒以内にレスポンスがない場合、接続を閉じる可能性がある。 イメージとしては、Natgatewayに対してリクエストが定期的に飛んんでいないため、Natが寝ているようなもの。
Option1は、Timeoutを60秒から4000とか長い値にする、だが、これをやってしまうと、アプリケーション側でタイムアウトを設定していない場合、4000秒しないと解放されないため望ましくない。
Option2でNatGWを使って定期的に外部に通信することで、NatgWを寝させないようにするというもので、こちらを採用。
Nathanが前項で以下のようなpingシェルを書いている。
for(int i = 0 ; i < 5; i++)
なぜ最大5回なのか、成功するまでpingしないのか?については、 このshellは30秒に1回動作する。 もし、この際コネクションエラーがおていたとして、前回呼び出したping確認のprocessが残るようなことになると、どんどんping確認のprocessが並列実行してしまう可能性があるため、最大5回までと上限を設けて実行する、ということにした