Node.js Docker コンテナで AWS CDK を実行する際の環境変数設定の問題と解決策
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_REGION は CDK_DEFAULT_REGION に適用されるものの、CDK_DEFAULT_ACCOUNT は AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN から自動的に取得できず、account が undefined になり、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
まとめ
-
AWS CLI をインストールする →
awsコマンドを利用できるようにする。 -
lessをインストールする → AWS CLI のデフォルトページャーを正常に動作させる。
これにより、Node.js ベースの Docker コンテナ内で AWS CDK を正常に実行できるようになりました。
本記事では、node:22-bullseye の Docker コンテナで AWS CDK を使用する際に直面した環境変数の問題と、その解決策をまとめました。
AWS CLI を適切にインストールし、環境変数の設定を調整することで、スムーズに CDK を実行できるようになります。
Let's happy coding!
Discussion