CDKTF synth

Synthesize configuration from your app #

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

To synthesize a CDKTF app, use the cdktf synth command. Let’s check out the template synthesized from the sample app:

The CDKTF CLI requires you to be in the same directory as your cdktf.json file. If you have changed directories in your terminal, please navigate back now.
cdktf synth

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

{
  "//": {
    "metadata": {
      "backend": "local",
      "stackName": "cdk-workshop",
      "version": "0.21.0"
    },
    "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
metadata is automatically added per resource by the toolkit to every stack to ease analysis. Terraform ignores the metadata.



We use analytics to make this content better, but only with your permission.

More information