I’m seeing the output below and I don’t know what to do with it.
I’m used to building with the AWS provider NPM package without problems.
For the Mongodb Atlas provider I am using the generated typescript and this is the result from “cdktf synth”.
Using:
cdktf --version:
0.13.0
package.json
“cdktf”: “^0.13.0”,
“constructs”: “^10.1.122”
> @myCompany/myCompany-infra-platform-dev@0.1.0 synth
> env-cmd cdktf synth
⠴ Synthesizing
[2022-10-09T19:18:03.250] [ERROR] default - /Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:207
if (node.tryGetContext(EXCLUDE_STACK_ID_FROM_LOGICAL_IDS)) {
^
[2022-10-09T19:18:03.252] [ERROR] default - TypeError: node.tryGetContext is not a function
at DataEnvStack.allocateLogicalId (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:207:14)
at DataEnvStack.getLogicalId (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:190:17)
at Project.get friendlyUniqueId [as friendlyUniqueId] (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-element.ts:74:50)
at Project.interpolationForAttribute (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-resource.ts:212:45)
at Project.getStringAttribute (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-resource.ts:106:32)
at Project.get id [as id] (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/.gen/providers/mongodbatlas/project/index.ts:370:17)
at new DataEnvStack (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/src/stacks.ts:34:103)
at Object.<anonymous> (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/src/index.ts:37:1)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
ERROR: cdktf encountered an error while synthesizing
Synth command: npx ts-node src/index.ts
Error: non-zero exit code 1
Command output on stderr:
/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:207
if (node.tryGetContext(EXCLUDE_STACK_ID_FROM_LOGICAL_IDS)) {
^
TypeError: node.tryGetContext is not a function
at DataEnvStack.allocateLogicalId (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:207:14)
at DataEnvStack.getLogicalId (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/node_modules/cdktf/lib/terraform-stack.ts:190:17)
at Project.get friendlyUniqueId [as friendlyUniqueId] (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-element.ts:74:50)
at Project.interpolationForAttribute (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-resource.ts:212:45)
at Project.getStringAttribute (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/node_modules/cdktf/lib/terraform-resource.ts:106:32)
at Project.get id [as id] (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-mongo/.gen/providers/mongodbatlas/project/index.ts:370:17)
at new DataEnvStack (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/src/stacks.ts:34:103)
at Object.<anonymous> (/Users/myName/code/myCompany/myCompany-devops/packages/myCompany-infra-data-dev/src/index.ts:37:1)
at Module._compile (node:internal/modules/cjs/loader:1105:14)
at Module.m._compile (/Users/myName/code/myCompany/myCompany-devops/node_modules/ts-node/src/index.ts:1618:23)
My complete Typescript code looks like this
import { App, S3Backend, S3BackendProps, TerraformOutput, TerraformStack } from 'cdktf'
import { Construct } from 'constructs'
import { AdvancedCluster, AdvancedClusterConfig } from '../.gen/providers/mongodbatlas/advanced-cluster'
import { Project, ProjectConfig } from '../.gen/providers/mongodbatlas/project'
import {MongodbatlasProvider, MongodbatlasProviderConfig} from '../.gen/providers/mongodbatlas/provider'
import { name as packageNameWithScope } from "../package.json"
const extractedPackageName = packageNameWithScope.split("/")[1]
export interface DataEnvStackConfig {
remoteBackend: Omit<S3BackendProps, 'key'>
mongo: {
provider: MongodbatlasProviderConfig
project: ProjectConfig
cluster: Omit<AdvancedClusterConfig, 'projectId'>
},
}
export class DataEnvStack extends TerraformStack {
projectId: TerraformOutput
clusterId: TerraformOutput
constructor(scope: Construct, name: string, config: DataEnvStackConfig) {
super(scope, name)
new S3Backend(this, {...config.remoteBackend, key: `${name}.tfstate`})
new MongodbatlasProvider(this, "mongo", config.mongo.provider)
const project = new Project(this, "project", config.mongo.project)
const cluster = new AdvancedCluster(this, "cluster", {...config.mongo.cluster, projectId: project.id})
this.projectId = new TerraformOutput(this, "projectId", {
value: project.id,
})
this.clusterId = new TerraformOutput(this, "clusterId", {
value: cluster.id,
})
}
}
export interface EnvConfig {
mongo: {
orgId: string
}
}
const env: EnvConfig = {
mongo: {
publicKey: "omitted-pubkey",
privateKey: "omitted-privkey",
orgId: "omitted-orgId", //process.env.ATLAS_ORGANIZATION_ID || '',
}
}
const remoteBackend: Omit<S3BackendProps, 'key'> = {
bucket: 'omitted-name',
region: 'us-east-1',
}
const app = new App()
new DataEnvStack(app, extractedPackageName, {
// tags,
remoteBackend,
mongo: {
project: {
name: extractedPackageName,
orgId: env.mongo.orgId,
},
cluster: {
name: extractedPackageName,
clusterType: 'REPLICASET',
replicationSpecs: [{
regionConfigs: [{
electableSpecs: {
instanceSize: 'M2', // M0 is not supported by the Terraform adapter or cluster v5.0
nodeCount: 3,
},
regionName: 'US_EAST_1',
priority: 1, // 0 for read-only
providerName: 'TENANT', // because M2 is cheap
backingProviderName: 'AWS',
}]
}]
},
},
})
app.synth()