我仔细查看了 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
}