在 cdktf 合成器执行期间无法应用输入变量

问题描述 投票:0回答:1

以下是有关我们技术开发环境的信息:

  • HashiCorp.Cdktf 0.16.3
  • HashiCorp.Cdktf.Providers.Aws 14.0.4
  • HashiCorp.Cdktf.Providers.Docker 7.0.1
  • 亚马逊.Lambda.Core 2.1.0
  • Amazon.Lambda.Serialization.SystemTextJson 2.3.1
  • Amazon.Lambda.APIGatewayEvents 2.6.0

AWS Lambda 项目包含以下内容:

  • 亚马逊.Lambda.Core 2.1.0
  • Amazon.Lambda.Serialization.SystemTextJson 2.3.1
  • Amazon.Lambda.APIGatewayEvents 2.6.0

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
  • AWSSrvlessHelloWorldApp.Tests
  • MyTerraformStack

我构建了 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 项目)中,我有以下文件:

  • 程序.cs
  • MainStack.cs

在 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 的值。 为什么,有人可以告诉我如何解决上述问题吗?

amazon-web-services terraform synthesis terraform-cdk
1个回答
0
投票

哈哈,你们这些 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”

© www.soinside.com 2019 - 2024. All rights reserved.