Amplify Consoleのデフォルトビルドイメージで動作するNode.jsのバージョンを変更する

Amplify Consoleのデフォルトビルドイメージで動作するNode.jsのバージョンを変更したいと思ったことはありませんか?私はあります。
2022.08.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

現在、自分は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のバージョンを出力します。

amplify.yml

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を利用するように指定してみます。

amplify.yml

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で直接指定のバージョンをインストールする方法などもありますが、プロジェクトの運用に合った方法でお試しいただければと思います。

どなたかの参考になれば幸いです。