📝

EC2 で amplify publish したらビルドエラーになったので解決してみた

2022/03/06に公開

ちょっとした検証のために、EC2 で amplify publish コマンドを実行したら、以下のエラーが発生したので、解決方法を紹介します。

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

結論

メモリ不足が原因のようなので、インスタンスタイプをメモリ最適化インスタンスに変更することで解決しました。

環境

・OS: Windows Server 2019
・インスタンスタイプ: t2.nano

使用したツールなど

EC2 内に、以下のツールをインストールしました。
インストール方法は各公式ドキュメントをご覧ください。
Google Chrome
Node.js
Vue CLI
AWS CLI
Amplify CLI

前提

AWS CLI および、Amplify CLI で使用する IAM ユーザー認証情報は、事前に作成済みです。
権限は、AdministratorAccess を付与しています。

再現手順

1. Vue プロジェクトを作成

vue create <project name> で Vue プロジェクトを作成しました。
今回は、hello-world というプロジェクト名にしました。
その他の設定はデフォルトのままです。

vue create hello-world

2. Amplify プロジェクトを作成

1 で作成した Vue プロジェクトのフォルダに移動し、amplify init コマンドで Amplify プロジェクトを作成しました。

amplify init

基本的な設定はすべてデフォルトのままです。
使用する AWS プロファイルは、作成済みの AdministratorAccess のプロファイルを選択しました。

3. Amplify でホスティングを設定

2 で作成した Amplify プロジェクト内で、amplify add hosting コマンドを実行し、ホスティングの設定を行いました。

amplify add hosting

こちらも、すべてデフォルト設定のままです。

4. amplify publish を実行

最後に、amplify publish コマンドを実行しました。

amplify publish

ビルドエラー発生

Vue プロジェクトをビルドする段階で、以下のエラーが発生しました。

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

heap out of memory なので、メモリ領域が不足している旨のエラーのようです。
調べてみると、node --max-old-space-size=3000 <file name> というコマンドで、メモリの最大値設定を変更すればうまくいくという記事もありましたが、今回の環境では上記コマンドを実行しても、エラーは解消されませんでした。

解決方法

解決方法として、EC2 のメモリを増やす方法があります。
なので、今回はインスタンスタイプを t2.nano から、メモリ最適化の r5.large に変更しました。
※今回は検証で一時的に作成するだけなので、大きな課金はありませんが、長時間使用する場合は、t2.nano と r5.large では課金額が変わるので、注意して下さい。

r5.large で amplify publish を実行してみる

インスタンスを停止してから、インスタンスタイプを変更します。
変更後、再度インスタンスを起動し、amplify publish コマンドを実行したところ、今度はビルドに成功し、amplify publich コマンドも成功しました。

補足

AWS 公式の、Amplify のハンズオン の中でも、Cloud9 のインスタンスタイプを少し大きめに設定することで、エラーを回避するよう説明されています。

まとめ

今回は、EC2 で amplify publish したらビルドエラーになったので、解決方法を紹介しました。
ローカルの PC では発生しませんでしたが、小さいサイズのインスタンスを選択すると発生する可能性があります。
EC2 で Amplify を使用して、同様のエラーになった際に、参考にして頂ければ幸いです。

Discussion