Here is info about our technical development environment :
- HashiCorp.Cdktf 0.16.3
- HashiCorp.Cdktf.Providers.Aws 14.0.4
- HashiCorp.Cdktf.Providers.Docker 7.0.1
- Amazon.Lambda.Core 2.1.0
- Amazon.Lambda.Serialization.SystemTextJson 2.3.1
- Amazon.Lambda.APIGatewayEvents 2.6.0
The AWS Lambda project contains the following:
- Amazon.Lambda.Core 2.1.0
- Amazon.Lambda.Serialization.SystemTextJson 2.3.1
- Amazon.Lambda.APIGatewayEvents 2.6.0
I am trying to use Terraform CDKTF tool to deploy a C#-based AWS Lambda to Amazon AWS Cloud.
In my Visual Studio 2022 Solution, I have the following projects:
- AWSSrvlessHelloWorldApp
- AWSSrvlessHelloWorldApp.Tests
- MyTerraformStack
I build the AWSSrvlessHelloWorldApp Lambda Project.
I wanted to supply argument parameters when I run cdktf deploy
Therefore, as I researched, I came across the following webpage link that describes how to use Terraform variables as input parameters:
https://developer.hashicorp.com/terraform/cdktf/concepts/variables-and-outputs
Here is an excerpt from the aforementioned webpage that shows sample declaration & instantiation of Terraform variables as input parameters in C#:
I build the AWSSrvlessHelloWorldApp Lambda Project.
I wanted to supply argument parameters when I run cdktf deploy
Therefore, as I researched, I came across the following webpage link that describes how to use Terraform variables as input parameters:
https://developer.hashicorp.com/terraform/cdktf/concepts/variables-and-outputs
Here is an excerpt from the aforementioned webpage that shows sample declaration & instantiation of Terraform variables as input parameters in C#:
TerraformVariable imageId = new TerraformVariable(this, "imageId", new TerraformVariableConfig { Type = "string", Default = "ami-abcde123", Description = "What AMI to use to create an instance", });new Instance(this, "hello", new InstanceConfig { Ami = imageId.StringValue, InstanceType = "t2.micro", });
In the MyTerraformStack ( i.e. the TerraformStack Project) I have the following files:
- Program.cs
- MainStack.cs
In Program.cs , I have the following code( Please note that I use Debugger.Launch() so that I can bring up the MyTerraformStack in Visual Studio 2022 whenever I run cdktf from Powershell commandline ) :
class Program{ public static void Main(string[] args) { Debugger.Launch(); App app = new App(); MainStack stack = new MainStack(app, "aws_instance"); app.Synth(); }}
In MainStack.cs, the code content’s are:
class MainStack : TerraformStack{ public MainStack(Construct scope, string id) : base(scope, id) { TerraformVariable imageId = new TerraformVariable(this, "imageId", new TerraformVariableConfig { Type = "string", Default = "ami-abcde123", Description = "What AMI to use to create an instance", }); new Instance(this, "hello", new InstanceConfig { Ami = imageId.StringValue, InstanceType = "t2.micro", }); ...Blah Blah configuring ITerraformAssetConfig and IS3BucketObjectConfig and IIamRoleConfig Blah Blah... ...Blah Blah instantiating S3BucketObject , IamRole , LambdaFunction Blah Blah Blah } }
In the aforementioned tutorial guide webpage, I’ve tried all the various ways of supplying argument parameters:
• Environment variable: TF_VAR_imageId=testing ( in Powershell, I execute $Env:TF_VAR_imageId = "testing" before running the cdktf commands )
--var
CLI option: cdktf deploy --var='imageId=testing'--var-file
CLI option: cdktf deploy --var-file=/path/to/variables.tfvarsIn the variables.tfvars , I placed the following as contents:
imageId=testing
- Auto-loaded configuration files: We auto-load *.auto.tfvars and terraform.tfvars files found in the current working directory.
However, when I run the Debug launcher, and I added the imageId TerraformVariable instance to the Visual Studio 2022 Watch list.
I frantically reviewed the properties of the imageId ‘s properties in the Visual Studio 2022 Watch list but None of them contain the 'testing' value.
Could someone please explain how I can properly pass input variables for cdktf commands?