- nginx + expressをfargateに詰め込む
- unix socket を使って繋ぐ
- expressは4プロセス立ち上げる
- node clusterは使わないパターン、socketが競合してしまったので。
- 共通ボリュームにapi1.sock - api4.sockを設定して、nginxからupstreamする
api
共通ボリュームをVolumeにしておく
VOLUME /usr/src/tmp
sockのパスを環境変数で指定させる
main.js
constsock=process.env.SOCK_PATH;app.listen(sock,()=>{fs.chmodSync(sock,'666');console.log(`Server running on ${sock} with pid `+process.pid);});
nginx
api1.sock - api4.sockへupstreamする
nginx.conf
upstreamapi{serverunix:///usr/src/tmp/api_1.sock;serverunix:///usr/src/tmp/api_2.sock;serverunix:///usr/src/tmp/api_3.sock;serverunix:///usr/src/tmp/api_4.sock;}server{listen80default;listen[::]:80;location/{proxy_passhttp://api;break;}}
タスク定義
ECSタスク定義で、繋ぐ
task-define.json
{"containerDefinitions":[{"name":"nginx","portMappings":[{"hostPort":80,"protocol":"tcp","containerPort":80}],"mountPoints":[{"readOnly":true,"containerPath":"/usr/src/tmp","sourceVolume":"etc"}]},{"name":"api1","mountPoints":[{"containerPath":"/usr/src/tmp","sourceVolume":"etc"}],"environment":[{"name":"SOCK_PATH","value":"/usr/src/tmp/api_1.sock"}]},{"name":"api2","mountPoints":[{"containerPath":"/usr/src/tmp","sourceVolume":"etc"}],"environment":[{"name":"SOCK_PATH","value":"/usr/src/tmp/api_2.sock"}]},{"name":"api3","mountPoints":[{"containerPath":"/usr/src/tmp","sourceVolume":"etc"}],"environment":[{"name":"SOCK_PATH","value":"/usr/src/tmp/api_3.sock"}]},{"name":"api4","mountPoints":[{"containerPath":"/usr/src/tmp","sourceVolume":"etc"}],"environment":[{"name":"SOCK_PATH","value":"/usr/src/tmp/api_4.sock"}]}],"volumes":[{"name":"etc"}],}