Terraform 中对 CloudFormation 自定义资源的支持

Terraform 中对 CloudFormation 自定义资源的支持

我仔细查看了 AWS 提供商的 Terraform 文档,但未能找到对 terraform 中的 CloudFormation::CustomResource 的支持。

我已经创建了 Lambda 函数,现在我想将参数传递给我的 lambda 函数。在 CloudFormation 中,可以通过自定义资源来实现。

但是我似乎无法在 Terraform 中找到对此的支持。我是否遗漏了什么?谢谢。

答案1

资源aws_cloudformation_stack允许在 Terraform 中创建 CloudFormation 堆栈,从而在 Terraform 配置中公开 CloudFormation 的所有功能:

resource "aws_cloudformation_stack" "example" {
  name = "example-custom-resource"

  template_body = <<STACK
{
  "Resources" : {
    "ExampleCustomResource": {
      "Type" : "Custom::ExampleResource",
      "Properties" : {
        "ServiceToken": "...",
        (other properties specific to the resource)
      }
    }
  }
}
STACK
}

此处的属性Type可以是任何以 开头的字符串Custom::ServiceToken标识哪个自定义资源提供程序将处理此自定义资源。 自定义资源支持的任何其他属性都可以作为对象中的附加属性提供Properties

由于格式template_body只是一个标准的CloudFormation模板,文档CustomResource提供有关此功能如何运作的完整详细信息。

Terraform 没有直接地支持 CloudFormation 自定义资源作为原生 Terraform 资源,但aws_cloudformation_stack提供该资源是为了兼顾两全其美,在需要时可以访问 CloudFormation 特定的功能。

答案2

您可以尝试以下提供程序,其工作原理与 AWS CloudFormation 自定义资源相同。您可以将其与 AWS Lambda 一起使用,或者以任何语言在本地运行脚本

https://github.com/mobfox/terraform-provider-multiverse

provider "multiverse" {}

resource "multiverse_custom_resource" 
  "spotinst_targetset_and_rules" {
      executor = "python3"
      script = "spotinst_mlb_targetset.py"
      id_key = "id"
      data = <<JSON
 {
    "name": "test-terraform-test",
    "mlb_id": "lb-123",
    "mlb_deployment_id": "dp-123",
    "mlb_listener_ids": ["ls-123", "ls-456"],
    "test_group_callback_fqdn": "test.fqdn.com",
     "control_group_callback_fqdn": "control.fqdn.com"
  }
 JSON
}

相关内容