В настоящее время я пишу несколько приложений 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...."
}
Однако нет источника данных, доступного для этого указанного c атрибута этого ресурса. Можно ли разделить такой сложный атрибут между ресурсами без использования источника данных?