Fargateでnginxとspring bootを連携

Amazon ECS on Fargateでnginxとspring bootを連携した際に躓いた点を記事にします。

以前に業務外ですが、EC2上でDockerを利用しNginxとSpriing bootを連携させたことはあったので少し知識はありました。

 

以下、EC2上でDockerを利用しNginxとSpriing bootさせた手順です

rikues2012.hatenablog.com

 

構成図になります。
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」オプションは非推奨と記載されていました。。

docs.docker.com

 

今回記事にした箇所で半日ぐらい躓きました。

ECSも初めて利用したため「どの箇所が間違っているのか?」特定するのに時間がかかりました。

気になっていること

・ネットでいろいろな構成図を参照するとnginxとspring bootのコンテナを別々のServiceにした方が良さそうな気もします。