Terraform 0.11 - Совместное использование сложных значений атрибутов между ресурсами

В настоящее время я пишу несколько приложений AWS Kinesis Data Analytics с Terraform. Оба приложения используют один и тот же входной поток Kinesis и, следовательно, имеют одинаковую схему:

resource "aws_kinesis_analytics_application" "example1" {
  name = "example1"

  inputs {
    # SHARE THIS ATTRIBUTE VALUE WITH example2
    schema {
      record_columns {
        mapping  = "$.FIELD1"
        name     = "FIELD1"
        sql_type = "VARCHAR(32)"
      }

      record_columns {
        mapping  = "$.FIELD2"
        name     = "FIELD2"
        sql_type = "VARCHAR(32)"
      }

      record_format {
        mapping_parameters {
          json {
            record_row_path = "$"
          }
        }
      }

    }
  }

  outputs {
    # other attributes

    schema {
      record_format_type = "JSON"
    }
  }

  code = "SQL code ...."
}

resource "aws_kinesis_analytics_application" "example2" {
  name = "example2"

  inputs {
    # SHARE THIS ATTRIBUTE VALUE WITH example1
    schema {
      record_columns {
        mapping  = "$.FIELD1"
        name     = "FIELD1"
        sql_type = "VARCHAR(32)"
      }

      record_columns {
        mapping  = "$.FIELD2"
        name     = "FIELD2"
        sql_type = "VARCHAR(32)"
      }

      record_format {
        mapping_parameters {
          json {
            record_row_path = "$"
          }
        }
      }

    }
  }

  outputs {
    # Other attributes

    schema {
      record_format_type = "JSON"
    }
  }

  code = "SQL code...."
}

Я предполагаю, что это возможно, если для схемы доступен источник данных:

data "aws_kinesis_analytics_application_schema" "example_input" {
      record_columns {
        mapping  = "$.FIELD1"
        name     = "FIELD1"
        sql_type = "VARCHAR(32)"
      }

      record_columns {
        mapping  = "$.FIELD2"
        name     = "FIELD2"
        sql_type = "VARCHAR(32)"
      }

      record_format {
        mapping_parameters {
          json {
            record_row_path = "$"
          }
        }
      }
}

resource "aws_kinesis_analytics_application" "example1" {
  name = "example1"

  inputs {
    # Other attributes
    schema = "${data.aws_kinesis_analytics_application_schema.example_input}"
  }

  outputs {
    # other attributes

    schema {
      record_format_type = "JSON"
    }
  }

  code = "SQL code ...."
}

resource "aws_kinesis_analytics_application" "example2" {
  name = "example2"

  inputs {
    # Other attributes
    schema = "${data.aws_kinesis_analytics_application_schema.example_input}"
  }

  outputs {
    # Other attributes

    schema {
      record_format_type = "JSON"
    }
  }

  code = "SQL code...."
}

Однако для этого конкретного атрибута этого ресурса нет доступных источников данных. Можно ли разделить такой сложный атрибут между ресурсами без использования источника данных?


person markvdlaan93    schedule 08.01.2020    source источник


Ответы (1)


Для этого можно использовать переменные:

variable schema {
   record_columns = [
      {....},
      {....}
   ]
   record_format {
      mappings_parameters = [
         {....}
      ]
   }
}

resource "aws_kinesis_analytics_application" "example1" {
  name = "example1"

  inputs {
    schema = "${var.schema}"
  }

  outputs {
    # other attributes

    schema {
      record_format_type = "JSON"
    }
  }

  code = "SQL code ...."
}

resource "aws_kinesis_analytics_application" "example2" {
  name = "example2"

  inputs {
    # SHARE THIS ATTRIBUTE VALUE WITH example1
    schema = "${var.schema}"
  }

  outputs {
    # Other attributes

    schema {
      record_format_type = "JSON"
    }
  }

  code = "SQL code...."
}
person markvdlaan93    schedule 11.01.2020