1

I faced issue when trying to writs units for my CDK project.

Stack is creating, pretty simple one:

-> APIGateway (Rest)
  -> POST endpoint pointing to lambda
-> Lambda

I have very simple unit:

describe("Test WebhookProxyStack", () => {
  it("template must be defined", () => {
    const app = new cdk.App();
    const processorStack = new WebhookProxyStack(app, "dev" as never);
    const template = Template.fromStack(processorStack);
    expect(template).toBeDefined();
  });
});

Lambda code is

const lambda = new NodejsFunction(scope, name, {
    runtime: Runtime.NODEJS_14_X,
    handler: `handler`,
    entry: require.resolve(
      "@webhook-proxy/src/XXX.ts",
    ),
  });

When I deploy CDK, everything is bundling (via local esbuild) fine, no errors, but when trying to run this unit I am getting error like:

Error: Failed to bundle asset WebhookProxy-dev/lambda-name/Code/Stage, bundle output is located at /private/var/folders/g_/7s34q40s3rg40280qhrvx5fm0000gn/T/cdk.outQhujdM/bundling-temp-1309d84e2e3633714893bccef1ab36748a1c6088468eb4607da3325bcd2d7058-error: Error: bash -c yarn run esbuild --bundle "{OUTPUT_PATH}" --target=node14 --platform=node --outfile="/private/var/folders/g_/7s34q40s3rg40280qhrvx5fm0000gn/T/cdk.outQhujdM/bundling-temp-1309d84e2e3633714893bccef1ab36748a1c6088468eb4607da3325bcd2d7058/index.js" --external:aws-sdk run in directory {PROJECT_PATH} exited with status 127

at AssetStaging.bundle (/Users/XXX/Sites/XXX/webhook-proxy/node_modules/aws-cdk-lib/core/lib/asset-staging.ts:395:13)
at AssetStaging.stageByBundling (/Users/XXX/Sites/XXX/webhook-proxy/node_modules/aws-cdk-lib/core/lib/asset-staging.ts:243:10)
at stageThisAsset (/Users/XXX/Sites/XXX/webhook-proxy/node_modules/aws-cdk-lib/core/lib/asset-staging.ts:134:35)
at Cache.obtain (/Users/XXX/Sites/XXX/webhook-proxy/node_modules/aws-cdk-lib/core/lib/private/cache.ts:24:13)
at new AssetStaging (/Users/XXX/Sites/XXX/webhook-proxy/node_modules/aws-cdk-lib/core/lib/asset-staging.ts:159:44)
at new Asset (/Users/XXX/Sites/XXX/webhook-proxy/node_modules/aws-cdk-lib/aws-s3-assets/lib/asset.ts:72:21)
at AssetCode.bind (/Users/XXX/Sites/XXX/webhook-proxy/node_modules/aws-cdk-lib/aws-lambda/lib/code.ts:180:20)
at new Function (/Users/XXX/Sites/XXX/webhook-proxy/node_modules/aws-cdk-lib/aws-lambda/lib/function.ts:348:29)
at new NodejsFunction (/Users/XXX/Sites/XXX/webhook-proxy/node_modules/aws-cdk-lib/aws-lambda-nodejs/lib/function.ts:50:5)

Any hint\help what could be wrong with bundling this lambda when units and how to pass it ?

Another question is why this lambda must be build when executing units?

Info:

  • AWS CDK v2
alimek
  • 13
  • 1
  • 6

1 Answers1

2

Esbuild error in test when building Lambda

Not a fix, but a diagnostic/workaround: pass bundling: {forceDockerBundling: true } in the lambda props to use Docker instead of esbuild for local bundling.

Why is the lambda built when executing units?

Stacks need to be synth-ed to be tested. CDK generates a hash for assets as part of the synth process. The source hash is "used at construction time to determine whether the contents of an asset have changed."

fedonev
  • 20,327
  • 2
  • 25
  • 34