Я просмотрел документы Terraform в поисках поставщика AWS и не нашел поддержки CloudFormation :: CustomResource в terraform.
Я создал свои лямбда-функции, и теперь я хотел бы передать свои аргументы своей лямбда-функции. В CloudFormation это делается с помощью настраиваемого ресурса.
Однако я не могу найти поддержки этого в Terraform. Я что-то упускаю? Спасибо.
В aws_cloudformation_stack
ресурс позволяет создавать стеки CloudFormation в Terraform, тем самым раскрывая все функции CloudFormation в конфигурации Terraform:
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.
Вы можете попробовать следующего провайдера, он работает так же, как пользовательские ресурсы 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
}