タイトル

Need for Answer

2018年6月29日金曜日

AWS EC2のタグからホスト名を変更したい(AmazonLinux2/CentOS7)

EC2のNameタグについてる名前をHostnameにするコマンドです。
CentOS7及びAmazonLinux2でのコマンドになります
AWSコンソールで名前をつけたあと、実行するといいんじゃないでしょうか

INSTANCEID=`curl -s http://169.254.169.254/latest/meta-data/instance-id/`
Name=`aws ec2 describe-instances --region ap-northeast-1 \
             --instance-ids ${INSTANCEID} \
             --output text \
             --query 'Reservations[].Instances[].Tags[?Key==\`Name\`].[Value]'`
sudo hostnamectl set-hostname ${Name}
hostname

2018年6月28日木曜日

Elastic Load BalancingのCLBとALBは何がちがうのか(TCP的に)

ALB使ってますか!
正直CLBで良いんじゃない…って人、多いと思います!

CLBはL4でALBはL7…とか色々あると思いますが、あまり注目されてないポイントとして「TCP Keepaliveされるか?」というのがあります

[ユーザー]-[ELB]-[APサーバー]

という構成があるとします。

[ELB=CLB]
ユーザーアクセスが終了したあと、ELB-APサーバー間で数秒間TCP Keepaliveされます。正確に言うと「ESTABLISHED」のままになります。これはHTTP/TCPどちらで死活監視しても一緒です。

[ELB=ALB]
ユーザーアクセスが終了したあと、即時に「TIME_WAIT」に移行します。

これによって何が違うのか?というおはなしなのですが、APサーバーがdjangoやrailsのようなアプリケーション・サーバーの場合に非常に困ることになります。

ユーザー通信が終了しているにもかかわらず、そのプロセスがCLBのKeepaliveによって開放されないため、次の通信に即時に使えない状態になります。それが積み重なった結果、APサーバーのプロセスがCLBによって使い潰されます。

要は『ECSのバランサーにCLBを使わないほうがいい』というおはなしです