💬

Node.js Docker コンテナで AWS CDK を実行する際の環境変数設定の問題と解決策

2025/03/08に公開

Node.js Docker コンテナで AWS CDK を実行する際の環境変数設定の問題と解決策

背景

Node.js 22 をベースとした Docker コンテナ (node:22-bullseye) で npx cdk を実行しようとした際に、環境変数から AWS のアカウント情報を取得できずにエラーが発生しました。

CDK の env 設定を以下のように指定しました。

env: {
  account: process.env.CDK_DEFAULT_ACCOUNT,
  region: process.env.CDK_DEFAULT_REGION
},

環境変数 AWS_DEFAULT_REGIONCDK_DEFAULT_REGION に適用されるものの、CDK_DEFAULT_ACCOUNTAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN から自動的に取得できず、accountundefined になり、CDK のデプロイが失敗しました。

問題の原因

CDK は CDK_DEFAULT_ACCOUNT の値を AWS CLI 経由で取得しようとするため、aws コマンドがインストールされていないと CDK_DEFAULT_ACCOUNT が設定されません。
また、AWS CLI はデフォルトで less コマンドを使用するため、less がインストールされていない環境では aws コマンドの実行時にエラーが発生します。

Docker コンテナ内で aws sts get-caller-identity を実行した際に、以下のようなエラーが発生しました。

Unable to redirect output to pager. Received the following error when opening pager:
[Errno 2] No such file or directory: 'less'

このため、AWS CLI が sts コマンドの出力をページャー (less) に渡そうとする際にエラーとなり、結果として CDK_DEFAULT_ACCOUNT が取得できませんでした。

解決策

1. AWS CLI をインストールする

Docker コンテナ内に AWS CLI v2 をインストールします。

Dockerfile に以下の記述を追加します。

RUN apt-get update && apt-get install -y \
    curl \
    unzip \
    less \
    && rm -rf /var/lib/apt/lists/*

RUN curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
    && unzip awscliv2.zip \
    && ./aws/install \
    && rm -rf aws awscliv2.zip

まとめ

  1. AWS CLI をインストールするaws コマンドを利用できるようにする。
  2. less をインストールする → AWS CLI のデフォルトページャーを正常に動作させる。

これにより、Node.js ベースの Docker コンテナ内で AWS CDK を正常に実行できるようになりました。


本記事では、node:22-bullseye の Docker コンテナで AWS CDK を使用する際に直面した環境変数の問題と、その解決策をまとめました。
AWS CLI を適切にインストールし、環境変数の設定を調整することで、スムーズに CDK を実行できるようになります。

Let's happy coding!

Discussion