Amplify Consoleのデフォルトビルドイメージで動作するNode.jsのバージョンを変更する
現在、自分はProfllyというプロフィールビュアーサービスの開発を行っています。
Profllyでは、ホスティングおよびCI/CDにAmplify Consoleを採用しており、フロントエンドにNuxt.jsで実装されたアプリケーションをホストしています。
なお、Profllyで採用している技術スタックなどの詳細については、以下のエントリも参照いただけると幸いです。
Amplify Consoleでホスティングされたアプリケーションを日々運用する中で、Amplifyのデフォルトビルドイメージで用意されているNode.jsのバージョンを変更したいケースがあります(ありました)。
今回、Amplify ConsoleでNode.jsのバージョンを変更する方法をいくつか試してみたので紹介してみます。
Amplify Consoleで動作するNode.jsのバージョン確認
まずは、現行のAmplify Consoleで動作するNode.jsのデフォルトバージョンを確認してみましょう。
amplify.yml
を以下のように設定して、Node.jsのバージョンを出力します。
version: 1 frontend: phases: preBuild: commands: - node -v - npm ci build: commands: [] artifacts: baseDirectory: / files: - '**/*' cache: paths: - node_modules/**/*
Amplify Consoleで確認すると下記のようになりました。
2022/08/05現在、Amplify Consoleでは v14.19.0
が動作しているようです。
Node.jsのバージョン変更を試す
Amplify Consoleのデフォルトビルドイメージ(Amazon Linux2)ではNode.js 14
が動作しているようですが、できれば2022/08/05現在のActive LTSであるNode.js 16
を利用したいところです。
Node.js 16
が動作するように、Amplify Console上で設定を変更してみます。
今回は以下の2つの方法で試してみました。
1. Live package updatesを利用してパッケージのバージョンを指定する
1つ目のやり方は、Amplify ConsoleのLive package updatesを利用する方法です。
AWS Amplify - Custom build images and live package updates
Live package updatesを利用することで、デフォルトのビルドイメージで使用するパッケージやdependenciesを指定できます。
2022/08/05現在では、以下のパッケージのバージョンを指定できるようです。
- Amplify CLI
- Jekyll
- Hugo
- Yarn
- Bundler
- Cypress
- VuePress
- Gatsby CLI
- Next.js version
- Node.js version
それでは、Live package updatesでNode.jsのバージョンを指定してみます。
Amplify Consoleの[ビルドの設定] - [Build image settings] の Edit
を選択します。
ダイアログ一番下の パッケージバージョンの上書きを追加
を選択し Node.js version
を選択。
今回はバージョンに 16.13.2
を指定して保存します。
Node.jsのバージョンが指定できたので、適当に再ビルドしてNode.jsのバージョンを確認してみましょう。
Amplify Console上で Node.js v16.13.2
が動作するようになりました!
マネジメントコンソールで設定変更するだけなので、お手軽ですね。
2. preBuildコマンドでNode.jsのバージョンを指定する
2つ目のやり方は、amplify.yml
のpreBuildコマンド上でNode.jsのバージョンを指定する方法です。
Amplifyで動作するデフォルトイメージのDockerfileを見ると、そもそもNode.jsも17系までデフォルトでインストールされているようです(2022/08/05現在)。
GitHub - aws-amplify/amplify-hosting/images/latest/Dockerfile
ただし、デフォルトで動作するバージョンはNode.js 14が指定されているようですね。
ENV VERSION_NODE_DEFAULT=$VERSION_NODE_14
amplify.yml
を以下のように変更し、preBuildでNode.js 16を利用するように指定してみます。
version: 1 frontend: phases: preBuild: commands: - nvm use $VERSION_NODE_16 - node -v - npm ci build: commands: [] artifacts: baseDirectory: / files: - '**/*' cache: paths: - node_modules/**/*
Amplify Consoleで上記変更を適用し、再ビルドしてみます。
こちらのやり方でも、無事 Node.js 16
が動作するようになりました!
既にインストールされているバージョンを利用するので、preBuildコマンドで新たにインストールを実行するよりはビルド時間を短縮できそうです。
おわりに
Amplify Consoleのデフォルトビルドイメージで動作するNode.jsのバージョンを変更するやり方を紹介しました。
今回紹介した方法以外にも、カスタムビルドイメージを用いるやり方や、nvm install
で直接指定のバージョンをインストールする方法などもありますが、プロジェクトの運用に合った方法でお試しいただければと思います。
どなたかの参考になれば幸いです。