【小ネタ】Codebuild のマネージド型イメージで使用する Node.js のバージョンを厳密に指定する

記事タイトルとURLをコピーする

はじめに

アプリケーションサービス部の宮本です。最近電動シュレッダーを買いました。暇さえあれば不要な書類をバリバリ粉砕して楽しんでいます。いつか大事な書類をバリバリしてしまわないか心配です。

さて、今回は Codebuild のマネージド型イメージで使用する Node.js のバージョンを厳密に指定する方法をご紹介します。

何がしたいのか

Codebuild では、ビルド環境として自前で用意した Docker イメージを使えますが、AWS が提供してくれる Docker イメージも利用することができます。これをマネージド型イメージと呼びます。

docs.aws.amazon.com

マネージド型イメージには、予め各言語のランタイムが用意されており、buildspec.yml で指定するだけで任意のバージョンを使用することができます。

docs.aws.amazon.com

# buildspec.yml での指定方法
version: 0.2
phases:
  install:
    runtime-versions:
      nodejs: 12.x # 使用するバージョンを指定

バージョンの指定方法は Node.js の場合、以下の様な方法があります。

  • nodejs: 12 -> 特定のバージョン(メジャーバージョンの最新)
  • nodejs: 12.x -> 特定のメジャーバージョンと最新のマイナーバージョン(実質、nodejs: 12 のエイリアスになっています)
    • nodejs: 12.10 のようにマイナーバージョンを指定することが出来ません。
  • nodejs: latest -> (使用するイメージで利用可能な)最新バージョン

参考) バージョンの指定方法 docs.aws.amazon.com

基本的には使用するメジャーバージョンの最新バージョンを使っておけば、問題がおきることは無いと思いますが、やんごとなき理由(例えば最新バージョンに不具合がある、ローカル開発環境のバージョンを変えられない)がある場合、マイナーバージョン、パッチバージョンを指定したいこともあります。これがこの記事の趣旨です。

結論

n コマンドを使いましょう。

例として、マネージド型イメージの一つである aws/codebuild/amazonlinux2-x86_64-standard:3.0 には n というググラビリティの悪いツールがインストールされています。これは Node.js のバージョンマネージャーで、指定したバージョンのインストール及びセットアップをしてくれるツールです。

n コマンドを使うと以下の様に、パッチバージョンまで指定することが出来ます。

# buildspec.yml の例
version: 0.2
phases:
  install:
    commands:
      - n 12.13.1 # パッチバージョンまで指定
  pre_build:
    commands:
      - node -v

実行してログを確認すると、指定したパッチバージョンのインストール、及びセットアップが行われていることが確認できました。

[Container] 2021/10/01 08:46:19 Entering phase INSTALL
[Container] 2021/10/01 08:46:19 Running command n 12.13.1
  installing : node-v12.13.1
       mkdir : /usr/local/n/versions/node/12.13.1
       fetch : https://nodejs.org/dist/v12.13.1/node-v12.13.1-linux-x64.tar.xz
   installed : v12.13.1 (with npm 6.12.1)

[Container] 2021/10/01 08:46:25 Phase complete: INSTALL State: SUCCEEDED
[Container] 2021/10/01 08:46:25 Phase context status code:  Message: 
[Container] 2021/10/01 08:46:25 Entering phase PRE_BUILD
[Container] 2021/10/01 08:46:25 Running command node -v
v12.13.1

(おまけ) Dockerfile の確認

マネージド型イメージにどんなツールがインストールされているかは、再掲になりますが以下ページのリンクから確認できます。

docs.aws.amazon.com

f:id:swx-miyamoto:20211001175213p:plain

リンク先の GitHub で Dockerfile が確認できます。因みに、n コマンドのインストールは ここ で行っています。

Node.js だけでなく、他の言語についてもバージョンマネージャーがインストールされているので確認してみてください。

それでは良い CodeBuild ライフを!