How do I disable AWS CDK Metadata for path and assets automatically?

Viewed 669

There are 3 types of metadata CDK is writing to CFN. Version, Path, and Assets. There's documentation on how to disable version metatadata and it works fine, but i'm struggling with the rest. CLI options --path-metadata false --asset-metadata false work fine, but are kind of annoying.

I've been through CDK Source code trying to figure out key words to plug into cdk.json, but they are ignored. The following is verbose cdk output where it reads my settings and seems to ignore the 2 i care about.

cdk.json: {
  "app": "python app.py",
  "versionReporting": false,              <-- custom, works as intended
  "assetMetadata": false,                 <-- custom, doesn't seem to do anything
  "pathMetadata": false,                  <-- custom, doesn't seem to do anything
  "context": {
    "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,
    "@aws-cdk/core:stackRelativeExports": "true",
    "@aws-cdk/aws-rds:lowercaseDbIdentifier": true,
    "@aws-cdk/aws-lambda:recognizeVersionProps": true,
    "@aws-cdk/core:bootstrapQualifier": "myQualifier",
    "aws:cdk:enable-path-metadata": false, <-- custom, produces namespace warnings
    "aws:cdk:enable-asset-metadata": false, <-- custom, produces namespace warnings

  }
}
merged settings: {                        <------------results of combined settings
  versionReporting: false,                <-- worked
  pathMetadata: true,                     <--didn't work
  output: 'cdk.out',
  app: 'python app.py',
  assetMetadata: true,                    <--didn't work
  context: {
    '@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId': true,
    '@aws-cdk/core:stackRelativeExports': 'true',
    '@aws-cdk/aws-rds:lowercaseDbIdentifier': true,
    '@aws-cdk/aws-lambda:recognizeVersionProps': true,
    '@aws-cdk/core:bootstrapQualifier': 'myQualifier',
    'aws:cdk:enable-path-metadata': false, <-- seems like a dud
    'aws:cdk:enable-asset-metadata': false,<-- seems like a dud
  },
  debug: false,
  profile: 'mycdkIAMUser',
  toolkitBucket: {},
  staging: true,
  bundlingStacks: [ 'my-cdk-policies' ],
  lookups: true
}
1 Answers

Looking at the CDK source code, it seems as if the CLI options are currently the only viable option.

Have a look at execProgram() lines 23 to 31:

const pathMetadata: boolean = config.settings.get(['pathMetadata']) ?? true;
if (pathMetadata) {
  context[cxapi.PATH_METADATA_ENABLE_CONTEXT] = true;
}

const assetMetadata: boolean = config.settings.get(['assetMetadata']) ?? true;
if (assetMetadata) {
  context[cxapi.ASSET_RESOURCE_METADATA_ENABLED_CONTEXT] = true;
}

The CLI options both default to true, which then override their respective context variables. Might warrant a bug report.

Related