Назад | Перейти на главную страницу

Поддержка настраиваемого ресурса CloudFormation в Terraform

Я просмотрел документы 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
}