AWS CDKで「No stack could be identified for the construct at path」ってエラーでハマるなど

AWS CDKを利用していて下記のエラーが発生してハマっていました。

No stack could be identified for the construct at path
pathのコンストラクトに対してスタックを識別できませんでした(Google翻訳) だそうです。

> cdk synth -v
(略)
No stack could be identified for the construct at path
Subprocess exited with error 1
Error: Subprocess exited with error 1
    at ChildProcess.proc.on.code (/Users/xxx/.anyenv/envs/ndenv/versions/v10.11.0/lib/node_modules/aws-cdk/lib/api/cxapp/exec.ts:110:23)
    at ChildProcess.emit (events.js:182:13)
    at ChildProcess.EventEmitter.emit (domain.js:442:20)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)

エラー再現

環境構築は以下のような感じ。AWS CDKは利用できる前提で。

> cdk --version
1.2.0 (build 6b763b7)


> mkdir cdk-error-test
> cd cdk-error-test

> cdk init app --language=typescript

実装は以下となります。Outputs の定義のみ。

lib/cdk-error-test-stack.ts

import cdk = require('@aws-cdk/core');

export class UseCdkEc2Stack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new cdk.CfnOutput(scope, 'hoge', { value: 'hoge' });
  }
}

そしてエラーとなります。

> cdk synth -v
(略)
No stack could be identified for the construct at path
Subprocess exited with error 1
Error: Subprocess exited with error 1
    at ChildProcess.proc.on.code (/Users/xxx/.anyenv/envs/ndenv/versions/v10.11.0/lib/node_modules/aws-cdk/lib/api/cxapp/exec.ts:110:23)
    at ChildProcess.emit (events.js:182:13)
    at ChildProcess.EventEmitter.emit (domain.js:442:20)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)

原因

new cdk.CfnOutput(scope, 'hoge', { value: 'hoge' });と第一パラメータをscopeとしてたのですが、thisじゃないとだめでした・・・圧倒的・・・ケアレスミス・・・

lib/cdk-error-test-stack.ts

import cdk = require('@aws-cdk/core');

export class UseCdkEc2Stack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new cdk.CfnOutput(this, 'hoge', { value: 'hoge' });
  }
}

tsファイルを修正後npm run buildコマンドを実行しないとさらにハマりますのでご注意ください。

> npm run build


> cdk synth -v
(略)
Outputs:
  hoge:
    Value: hoge
Resources:
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: aws-cdk=1.2.0,@aws-cdk/core=1.2.0,@aws-cdk/cx-api=1.2.0,jsii-runtime=node.js/v10.11.0

constructorsuperのパラメータ指定に引きづられて気がつくのに相当時間がかかりました。
エラーメッセージからだとさっぱりみえてこなかったので、皆さまお気をつけください。

参考

AWS CDK – неопределенная ошибка при создании службы AWS ECS – amazon-web-services | Qaru
http://qaru.site/questions/17927695/aws-cdk-vague-error-while-creating-an-aws-ecs-service

元記事はこちら

AWS CDKで「No stack could be identified for the construct at path」ってエラーでハマるなど