2023.01.28  

【ECS】Vueのタスクがエラーになる: RpcIpcMessagePortClosedError(code

AWS,  Vue,  Docker    

node:19.5.0-alpine3.16のイメージをECRにプッシュした後、ECRのタスクにそのイメージをデプロイしたところ次のエラーが発生しました。

確認にはtracerコマンドを使用しています。

2023-01-28T12:40:45.379+09:00    /scripts/node_modules/fork-ts-checker-webpack-plugin/lib/rpc/rpc-ipc/RpcIpcMessagePort.js:19
2023-01-28T12:40:45.379+09:00    closedError = new RpcIpcMessagePortClosedError_1.RpcIpcMessagePortClosedError(code                      ^
2023-01-28T12:40:45.379+09:00    RpcIpcMessagePortClosedError: Process 37 exited [SIGKILL].
20ipts/node_modules/fork-ts-checker-webpack-plugin/lib/rpc/rpc-ipc/RpcIpcMessagePort.js:19:23

ローカル環境では問題無く動作していたのに、ECSではなぜか上手く動作しない状況でした。

結論

エラー文で調べたところ記事が出て、nodeのバージョン上げれば解決するという記載があったので、コンテナイメージを最新にしてみましたがダメでした。
https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/issues/674

次にRpcIpcMessagePort.jsで検索したところ下記記事が見つかりました。
https://stackoverflow.com/questions/72622773/how-can-be-fixed-react-scripts-build-error

どうやらメモリが足りない場合にこのエラーが出るそうです。

試しにECSのメモリを512MBから2G(2048MB)にしてみたところ上手くデプロイできるようになりました。

ECSのメモリはCPUの大きさと合わせる必要があります。
対応表はマニュアルに記載されています。

Dockerfile

今回ECSにデプロイしたDockerfileを記載しています。

# Dockerfile
# debianのコンテナ(bullseye, slim等)だとcodeデプロイでエラーになるのでalpineを使用
FROM node:19.5.0-alpine3.16
# FROM node:19-bullseye 

# 静的コンテンツを配信するシンプルな http サーバをインストールする
RUN npm install -g http-server

# カレントワーキングディレクトリとして 'app' フォルダを指定する
WORKDIR /app

# `package.json` と `package-lock.json` (あれば)を両方コピーする
COPY package*.json ./

# プロジェクトの依存ライブラリをインストールする
RUN npm install

# カレントワーキングディレクトリ(つまり 'app' フォルダ)にプロジェクトのファイルやフォルダをコピーする
COPY . .

# 本番向けに圧縮しながらアプリケーションをビルドする(ここが足りていなかった)
RUN npm run build

EXPOSE 8080
ENV HOST 0.0.0.0
CMD [ "http-server", "dist" ]

ローカルでは下記コマンドでvueのスタート画面が起動する状態でした。

docker build -t test -f ./docker/Dockerfile . 
docker run -it -p 8080:8080 test

RPCとIPC

RpcIpcMessagePort.jsRpcIpcが何者か調べてみました。

RPC

RPCとは「遠隔手続き呼出し」のこと。(remote procedure call)
プログラムから別のアドレス空間(通常、共有ネットワーク上の別のコンピュータ上)にあるサブルーチンや手続きを実行することを可能にする技術。その際に遠隔相互作用の詳細を明示的にコーディングする必要がない。(引用)

IPC

IPCとはプロセス間通信のこと(InterProcess Communication)
コンピュータ上で実行中のプログラムの間でデータをやり取りするための仕組み。あるプログラムから別のプログラムへデータやメッセージを通知したり、データの提供依頼や処理依頼を行ったり、依頼に対する結果を返したりすることができる。(引用)

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信