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