Amazon ECS on Fargateでnginxとspring bootを連携した際に躓いた点を記事にします。
以前に業務外ですが、EC2上でDockerを利用しNginxとSpriing bootを連携させたことはあったので少し知識はありました。
以下、EC2上でDockerを利用しNginxとSpriing bootさせた手順です
構成図になります。
nginxとspring bootのコンテナは同一Service内にあります。
nginxの前段にALBなどがありますが必要な箇所のみ構成図としました。
躓いた箇所
nginxのnginx.confでspring bootと連携する箇所の記載方法が不明。
連携できずにECSのタスク起動時にエラーが発生。
解決方法
nginxのnginx.confを以下のようにする
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
#root /usr/share/nginx/html; ←ここをコメント
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://localhost:8080/; ←ここがポイント
}
「localhost:8080」と記述し、
spring boot側で8080で受信できるようにして連携することができました。
別々のコンテナ間でlocalhostを認識することができました。
EC2上では以下で連携できますが、Fargateは「link」オプションを利用できないです。
① nginx.confに「proxy_pass http://app:8080/;」と記述
② 「docker run -d --link spring-container:app ・・・」のようにlinkオプションを利用
そもそも公式サイトに「link」オプションは非推奨と記載されていました。。
今回記事にした箇所で半日ぐらい躓きました。
ECSも初めて利用したため「どの箇所が間違っているのか?」特定するのに時間がかかりました。
気になっていること
・ネットでいろいろな構成図を参照するとnginxとspring bootのコンテナを別々のServiceにした方が良さそうな気もします。