3
0

More than 1 year has passed since last update.

AWS CDK synth or deploy時のFailed to bundle asset

Last updated at Posted at 2022-07-20

私だけかもしれませんが、大分嵌ったので、メモを残します。

環境

Windows10 WSL2 (Ubuntu18.04)
WLS2内でCDKのソースコードを保有してDockerコンテナへVolumeマウントしている状態。
WSL2のファイルはローカルユーザーがオーナー(1000:1000)
ファイル、ディレクトリのパーミッションはフルアクセスでコンテナのユーザーもRW可能な状態

aws-lambda-nodejsのNodejsFunction()を利用しbuildingオプションのforceDockerBundlingはfalseを設定済.
(コンテナでビルドせずにローカルのesbuildを利用する設定)

問題事象

WSL2環境のDockerコンテナにAWS CDKをインストールして、コンテナのrootユーザーでcdkコマンドを実行するとこうなる事象に遭遇

$cdk synth
Error: Failed to bundle asset xxxxxxxxx/Code/Stage, bundle output is located at XXXXXXX
(省略)
Error: bash -c npx --no-install esbuild --bundle /xxxxxx/hoge.ts"

意味がわからないのでソースを見てみました。(やっぱり。わかりませんw)
ここでエラーが発生する模様. asset-staging.ts#L446

もう少し辿ってみた。
bundling.ts#L252

エラーメッセージから薄っすらわかっていましたが、コードを見てもやはりesbuildを実行しようとして失敗しているらしい。
エラーになったと思われるesbuildをコンテナのshellで実行すると正しく実行できる。
CDKコマンド内ではesbuildが失敗する。

ファイルオーナー、パーミッションの問題じゃないハズ。。

摩訶不思議状態。

偶然、こんなコードがあることは確認しています。

asset-staging.ts#L446
      localBundling = options.local?.tryBundle(bundleDir, options);
      if (!localBundling) {
        let user: string;
        if (options.user) {
          user = options.user;
        } else { // Default to current user
          const userInfo = os.userInfo();
          user = userInfo.uid !== -1 // uid is -1 on Windows
            ? `${userInfo.uid}:${userInfo.gid}`
            : '1000:1000';
        }

おそらく上記はなんの関係もない

あれ?やっぱりオーナー??

ズレてるけど、結果オーライw

解決

ファイル、ディレクトリのオーナーをrootにする。

これは未検証ですがcdk.outのパーミッションだけ変更すればよかったかもしれない。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0