【AWS】fargateでnginx経由でnodeを動かす

aws

※プロモーションページが含まれる場合があります

awsというかネットワーク系初心者のワイがいきなり「awsよろしく」と言われ、

fargateでnginx経由でnodeを動かすまでの備忘録。

ざっくり説明

fargateとは

aws上のdockerみたいなやつ。

イメージはecrがdockerのimageで

それをタスク定義などでどう動かすかを定めて(portは何使うかとか)

サービスのタスクとしてコンテナを起動させるようなイメージ。

大前提としてローカルで動いてること!

結論(こうやったら動いた)

nodeのDockerFile

FROM node:lts


WORKDIR /src
COPY . .
RUN npm install
EXPOSE 3000
CMD [ "node", "wss.mjs" ] // 起動させたいファイルをnodeコマンドで起動させてる

nginxのDockerFile

// そのままローカルファイルを読み込むように書いてる
FROM nginx:latest


COPY ./nginx/logs ./var/log/nginx
COPY ./nginx/conf/nginx.conf ./etc/nginx/nginx.conf
COPY ./nginx/conf/log_format.conf ./etc/nginx/conf.d/log_format.conf
COPY ./nginx/conf/default.conf ./etc/nginx/conf.d/default.conf

nginxのconf/default.conf(今回はwebsocket通信をしようとしてた)

    location / {
        proxy_pass http://websocket/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        }

upstream websocket {
    server 127.0.0.1:3000;  // localhostのip: port番号
}

ポイントとしては `127.0.0.1:3000;`

これで「localhostの3000で通信する」という事になるそう。

localhostで通信ができるようになれば

これが使える。

なお、特にセキュリティグループなどはいじることはしないで良かった。

参考記事

127.0.0.1とlocalhostと0.0.0.0の違い

AWS Fargateでコンテナ間通信させたいとき

AWS EC2でhttp://localhost:9000が通らない ←localhost通信にセキュリティグループが必要ないことが書かれていた。

【AWS Black Belt Online Seminar】AWS Fargate ← 公式がやってるfargateの説明。ここで「localhostで通信できるよ」って言ってるところがある。

うまくいかなかったこと(やり方がよくわかってない)

【AWS】docker-compose.ymlからAWS ECSのタスク定義(task definition)を作成する方法【ECS CLI】 ←ローカルでdocker-comoseしたら動くから同じことaws上でやれればうごくんじゃね?とおもって試していた

Fargateにおけるpuma+Nginxのソケット通信のやり方 ←rails + nginx をfargateで動かしてるなら同じようにやれば動くんじゃね?と思ってunix通信の事調べてたけどよくわからん。挙句の果てに上司から「このやり方はあまりよくない」と言われる始末。やり方が昔の技術らしい

コメント

タイトルとURLをコピーしました