以下是有关我们技术开发环境的信息:
AWS Lambda 项目包含以下内容:
cdktf 调试
语言:csharp
cdktf-cli:0.20.6
节点:v18.20.1
cdktf:0.20.6
构造:10.3.0
jsii:1.96.0
地形:1.5.7
架构:x64
操作系统:win32 10.0.22631
点网:8.0.202
供应商
HashiCorp.Cdktf.Providers.Aws(预建)
terraform provider version: 5.44.0 prebuilt provider version: 19.13.0 cdktf version: ^0.20.0 HashiCorp.Cdktf.Providers.Docker (PREBUILT) terraform provider version: 3.0.2 prebuilt provider version: 11.0.0 cdktf version: ^0.20.0 P
我正在尝试使用 Terraform CDKTF 工具将基于 C# 的 AWS Lambda 部署到 Amazon AWS 云。
在我的 Visual Studio 2022 解决方案中,我有以下项目:
我构建了 AWSSrvlessHelloWorldApp Lambda 项目。
我想在运行 cdktf deploy 时提供参数参数
因此,在我研究时,我发现了以下网页链接,该链接描述了如何使用 Terraform 变量作为输入参数:
https://developer.hashicorp.com/terraform/cdktf/concepts/variables-and-outputs
以下是上述网页的摘录,其中显示了 Terraform 变量作为 C# 中的输入参数的示例声明和实例化:
我构建了 AWSSrvlessHelloWorldApp Lambda 项目。
我想在运行 cdktf deploy 时提供参数参数
因此,在我研究时,我发现了以下网页链接,该链接描述了如何使用 Terraform 变量作为输入参数:
https://developer.hashicorp.com/terraform/cdktf/concepts/variables-and-outputs
以下是上述网页的摘录,其中显示了 Terraform 变量作为 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",
});
在 MyTerraformStack(即 TerraformStack 项目)中,我有以下文件:
在 Program.cs 中,我有以下代码(请注意,我使用 Debugger.Launch(),以便每当我从 Powershell 命令行运行 cdktf 时都可以在 Visual Studio 2022 中调出 MyTerraformStack ):
class Program
{
public static void Main(string[] args)
{
Debugger.Launch();
App app = new App();
MainStack stack = new MainStack(app, "aws_instance");
app.Synth();
}
}
MainStack.cs中,代码内容为:
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",
});
Console.Error.WriteLine("imageId.ToString()");
Console.Error.WriteLine(imageId.ToString());
Console.Error.WriteLine("imageId.StringValue");
Console.Error.WriteLine(imageId.StringValue);
...Blah Blah configuring ITerraformAssetConfig and
IS3BucketObjectConfig and IIamRoleConfig
Blah Blah...
...Blah Blah instantiating S3BucketObject , IamRole ,
LambdaFunction Blah Blah Blah
}
}
在 Windows Powershell 中,我运行了以下命令:
$Env:TF_VAR_imageId="测试"
cdktf 合成器
但是,当我执行 Console Writeline 代码时,我会给出以下输出:
imageId.ToString()
[2024-04-08T14:59:56.904] [错误] 默认 - ${TfToken[TOKEN.1]}
imageId.StringValue
[2024-04-08T14:59:56.904] [错误] 默认 - ${TfToken[TOKEN.2]}
在 cdktf 合成器执行期间无法应用 imageId 的值。 为什么,有人可以告诉我如何解决上述问题吗?
哈哈,你们这些 stackoverflow 的人都在偷懒。 :)
我从 reddit 上的某人那里得到了以下解决方案
在我的 C# Terraform CDKTF 应用程序中,我有以下代码片段:
TerraformVariable imageId = new TerraformVariable(this, "imageId", new TerraformVariableConfig
{
类型=“字符串”,
默认=“ami-abcde123”,
Description =“使用什么 AMI 创建实例”,
});
Console.Error.WriteLine("********************************************") ;
Console.Error.WriteLine("********************************************") ;
Console.Error.WriteLine("imageId.StringValue");
Console.Error.WriteLine(imageId.StringValue);
Console.Error.WriteLine("imageId.Value.ToString()");
Console.Error.WriteLine(imageId.Value.ToString());
Console.Error.WriteLine("********************************************") ;
Console.Error.WriteLine("********************************************") ;
TerraformOutput 输出变量 = new TerraformOutput(this, "outputVar", new TerraformOutputConfig
{
值 = imageId.StringValue,
});
Console.Error.WriteLine("********************************************") ;
Console.Error.WriteLine("********************************************") ;
Console.Error.WriteLine("outputVar.Value");
Console.Error.WriteLine(outputVar.Value);
我有一个名为 inputfile.tfvars 的文件,它将作为输入进行处理,它包含:
imageId =“测试”
按顺序运行以下命令后,它起作用了:
cdktf 合成器
cdktf部署-var-file =“inputfile.tfvars”