Skip to content
CDKTN synth

CDKTN synth

Synthesize configuration from your app

CDKTN apps are effectively only a definition of your infrastructure using code. When CDKTN apps are executed, they produce (or "synthesize", in CDK parlance) a Terraform configuration for each stack defined in your application.

To synthesize a CDKTN app, use the cdktn synth command. Let's check out the template synthesized from the sample app:

cdktn synth

Will output the following Terraform configuration (under cdktf.out/stacks/cdk-workshop):

{
  "//": {
    "metadata": {
      "backend": "local",
      "stackName": "cdk-workshop",
      "version": "0.23.3"
    },
    "outputs": {
    }
  },
  "data": {
    "aws_caller_identity": {
      "CallerIdentity": {
        "//": {
          "metadata": {
            "path": "cdk-workshop/CallerIdentity",
            "uniqueId": "CallerIdentity"
          }
        },
        "provider": "aws"
      }
    },
    "aws_iam_policy_document": {
      "CdkWorkshopQueue_Policy_E8C1B641": {
        "//": {
          "metadata": {
            "path": "cdk-workshop/CdkWorkshopQueue/Policy/Policy/Resource",
            "uniqueId": "CdkWorkshopQueue_Policy_E8C1B641"
          }
        },
        "statement": [
          {
            "actions": [
              "sqs:SendMessage"
            ],
            "condition": [
              {
                "test": "ArnEquals",
                "values": [
                  "${aws_sns_topic.CdkWorkshopTopic_D368A42F.arn}"
                ],
                "variable": "aws:SourceArn"
              }
            ],
            "effect": "Allow",
            "principals": [
              {
                "identifiers": [
                  "${data.aws_service_principal.aws_svcp_default_region_sns.name}"
                ],
                "type": "Service"
              }
            ],
            "resources": [
              "${aws_sqs_queue.CdkWorkshopQueue_50D9D426.arn}"
            ]
          }
        ]
      }
    },
    "aws_partition": {
      "Partitition": {
        "//": {
          "metadata": {
            "path": "cdk-workshop/Partitition",
            "uniqueId": "Partitition"
          }
        },
        "provider": "aws"
      }
    },
    "aws_service_principal": {
      "aws_svcp_default_region_sns": {
        "//": {
          "metadata": {
            "path": "cdk-workshop/aws_svcp_default_region_sns}",
            "uniqueId": "aws_svcp_default_region_sns"
          }
        },
        "service_name": "sns"
      }
    }
  },
  "provider": {
    "aws": [
      {
        "region": "us-east-1"
      }
    ]
  },
  "resource": {
    "aws_sns_topic": {
      "CdkWorkshopTopic_D368A42F": {
        "//": {
          "metadata": {
            "path": "cdk-workshop/CdkWorkshopTopic/Resource",
            "uniqueId": "CdkWorkshopTopic_D368A42F"
          }
        },
        "tags": {
          "Name": "dev-CdkWorkshopTopic",
          "grid:EnvironmentName": "dev",
          "grid:UUID": "cdk-workshop-dev"
        }
      }
    },
    "aws_sns_topic_subscription": {
      "CdkWorkshopQueue_cdk-workshopCdkWorkshopTopicA7BCA841_F6BFFB7B": {
        "//": {
          "metadata": {
            "path": "cdk-workshop/CdkWorkshopQueue/cdk-workshopCdkWorkshopTopicA7BCA841/Resource",
            "uniqueId": "CdkWorkshopQueue_cdk-workshopCdkWorkshopTopicA7BCA841_F6BFFB7B"
          }
        },
        "depends_on": [
          "data.aws_iam_policy_document.CdkWorkshopQueue_Policy_E8C1B641",
          "aws_sqs_queue_policy.CdkWorkshopQueue_Policy_AF2494A5"
        ],
        "endpoint": "${aws_sqs_queue.CdkWorkshopQueue_50D9D426.arn}",
        "protocol": "sqs",
        "topic_arn": "${aws_sns_topic.CdkWorkshopTopic_D368A42F.arn}"
      }
    },
    "aws_sqs_queue": {
      "CdkWorkshopQueue_50D9D426": {
        "//": {
          "metadata": {
            "path": "cdk-workshop/CdkWorkshopQueue/Resource",
            "uniqueId": "CdkWorkshopQueue_50D9D426"
          }
        },
        "name_prefix": "cdk-workshop-dev-cdk-workshopCdkWorkshopQueue",
        "tags": {
          "Name": "dev-CdkWorkshopQueue",
          "grid:EnvironmentName": "dev",
          "grid:UUID": "cdk-workshop-dev"
        },
        "visibility_timeout_seconds": 300
      }
    },
    "aws_sqs_queue_policy": {
      "CdkWorkshopQueue_Policy_AF2494A5": {
        "//": {
          "metadata": {
            "path": "cdk-workshop/CdkWorkshopQueue/Policy/Resource",
            "uniqueId": "CdkWorkshopQueue_Policy_AF2494A5"
          }
        },
        "policy": "${data.aws_iam_policy_document.CdkWorkshopQueue_Policy_E8C1B641.json}",
        "queue_url": "${aws_sqs_queue.CdkWorkshopQueue_50D9D426.url}"
      }
    }
  },
  "terraform": {
    "backend": {
      "local": {
        "path": "<path-to-folder>/cdk-workshop/terraform.cdk-workshop.tfstate"
      }
    },
    "required_providers": {
      "aws": {
        "source": "aws",
        "version": "5.100.0"
      }
    }
  }
}

As you can see, this template includes four resources:

  • aws_sqs_queue - our queue
  • aws_sns_topic - our topic
  • aws_sns_topic_subscriptionn - the subscription between the queue and the topic
  • aws_sqs_queue_policy - the IAM policy which allows this topic to send messages to the queue
Edit this page