diff --git a/cdktf-go/.gitignore b/cdktf-go/.gitignore new file mode 100644 index 0000000..4033944 --- /dev/null +++ b/cdktf-go/.gitignore @@ -0,0 +1,21 @@ + +# cdktf and terraform ignores +.terraform +cdktf.out +cdktf.log +*terraform.*.tfstate* +generated + +# src https://github.com/github/gitignore/blob/master/Go.gitignore +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out diff --git a/cdktf-go/README.md b/cdktf-go/README.md new file mode 100644 index 0000000..423a064 --- /dev/null +++ b/cdktf-go/README.md @@ -0,0 +1,48 @@ +# Running the cdktf-go example + +## Install dependencies +1. Install an IDE like VSCode (https://code.visualstudio.com/). Then +2. Install golang, terraform, cdktf: + +On MacOS: +``` +brew install go cdktf terraform +``` + +On Windows / Mac / Linux with vagrant: +``` +git clone https://github.com/wardviaene/devops-box +cd devops-box +vagrant up +vagrant ssh +/vagrant/scripts/install_cdktf.sh # kicks of install of golang / npm / cdktf +``` + +On Windows, install a package manager (https://chocolatey.org/), then: +``` +choco install nodejs +npm install --global cdktf-cli@latest +``` + +# Download & init the provider + +``` +cdktf get +go mod tidy +``` + +Note: can take a some time to finish + +# Provision + +This provisions the infrastructure on AWS. + +``` +cdktf deploy +``` + +# Initialize new project +If you'd like to initialize your own project, you can use this command (I used the same command to initialize this project): +``` +cdktf init --template="go" --local +``` diff --git a/cdktf-go/cdktf.json b/cdktf-go/cdktf.json new file mode 100644 index 0000000..8eafb3a --- /dev/null +++ b/cdktf-go/cdktf.json @@ -0,0 +1,14 @@ +{ + "language": "go", + "app": "go run main.go", + "codeMakerOutput": "generated", + "projectId": "1f093b2f-3904-471b-984a-a6efe009927e", + "terraformProviders": [ + "hashicorp/aws@~> 3.67.0" + ], + "terraformModules": [], + "context": { + "excludeStackIdFromLogicalIds": "true", +"allowSepCharsInLogicalIds": "true" + } +} \ No newline at end of file diff --git a/cdktf-go/go.mod b/cdktf-go/go.mod new file mode 100644 index 0000000..f036105 --- /dev/null +++ b/cdktf-go/go.mod @@ -0,0 +1,10 @@ +module cdk.tf/go/stack + +go 1.16 + +require github.com/aws/constructs-go/constructs/v10 v10.0.25 + +require ( + github.com/aws/jsii-runtime-go v1.50.0 + github.com/hashicorp/terraform-cdk-go/cdktf v0.8.6 +) diff --git a/cdktf-go/go.sum b/cdktf-go/go.sum new file mode 100644 index 0000000..75c3d5c --- /dev/null +++ b/cdktf-go/go.sum @@ -0,0 +1,18 @@ +github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/aws/constructs-go/constructs/v10 v10.0.25 h1:yY4u3qgRs99+OqNXNwS6BPazHN+Tr7ttJSlpbFHoM98= +github.com/aws/constructs-go/constructs/v10 v10.0.25/go.mod h1:Tk3teOB9AAvXsgGcl3MLrOv0iTSv4UTQStQ5TQ+OIJc= +github.com/aws/jsii-runtime-go v1.50.0 h1:HT96p8bIkG4Be56pgHUeN+QydnGJTB+VBYd6ouVBWN0= +github.com/aws/jsii-runtime-go v1.50.0/go.mod h1:6tZnlstx8bAB3vnLFF9n8bbkI//LDblAek9zFyMXV3E= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/hashicorp/terraform-cdk-go/cdktf v0.8.6 h1:ClziHluDMDHjG2DEYaePZwnHAlYMiiTCgQJ2YF6Bpc4= +github.com/hashicorp/terraform-cdk-go/cdktf v0.8.6/go.mod h1:j+G48UF4TkctRpf9SQ1mMy7fIwP8nc+DYWumI249BqY= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cdktf-go/main.go b/cdktf-go/main.go new file mode 100644 index 0000000..4cf8cf9 --- /dev/null +++ b/cdktf-go/main.go @@ -0,0 +1,58 @@ +package main + +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + + "cdk.tf/go/stack/generated/hashicorp/aws" + "cdk.tf/go/stack/generated/hashicorp/aws/ec2" +) + +func NewMyStack(scope constructs.Construct, id string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &id) + + // The code that defines your stack goes here + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("eu-west-1"), + }) + + amiID := getUbuntuAMI(stack) + + instance := ec2.NewInstance(stack, jsii.String("compute"), &ec2.InstanceConfig{ + Ami: amiID.Id(), + InstanceType: jsii.String("t2.micro"), + }) + + cdktf.NewTerraformOutput(stack, jsii.String("public_ip"), &cdktf.TerraformOutputConfig{ + Value: instance.PublicIp(), + }) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + NewMyStack(app, "cdktf-go") + + app.Synth() +} + +func getUbuntuAMI(stack cdktf.TerraformStack) ec2.DataAwsAmi { + return ec2.NewDataAwsAmi(stack, jsii.String("computeAMI"), &ec2.DataAwsAmiConfig{ + Filter: &[]*ec2.DataAwsAmiFilter{ + { + Name: jsii.String("name"), + Values: jsii.Strings("ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"), + }, + { + Name: jsii.String("virtualization-type"), + Values: jsii.Strings("hvm"), + }, + }, + Owners: jsii.Strings("099720109477"), + MostRecent: true, + }) +}