#amazon-web-services #terraform #terraform-provider-aws #aws-appsync #aws-appsync-resolver
Вопрос:
Ниже приведен код, который у меня есть, где я застрял в захвате function_id
aws_appsync_function.appsync_functions
и ссылке для создания aws_appsync_resolver
#---- Create AppSync Functions -----
resource "aws_appsync_function" "appsync_functions" {
for_each = var.appsync_function
name = each.value.name
api_id = aws_appsync_graphql_api.appsync.id
data_source = each.value.data_source
request_mapping_template = file(each.value.request_template_path)
response_mapping_template = file(each.value.response_template_path)
description = each.value.description
}
#---- Create AppSync Resolvers -----
resource "aws_appsync_resolver" "appsync_pipeline_resolver" {
type = "Query"
api_id = aws_appsync_graphql_api.appsync.id
field = var.appsync_resolver.trailheadItemById.name
request_template = file(var.appsync_resolver.trailheadItemById.request_template_path)
response_template = file(var.appsync_resolver.trailheadItemById.response_template_path)
kind = "PIPELINE"
for_each = var.appsync_function
pipeline_config {
functions = aws_appsync_function.appsync_functions[each.key].name==var.appsync_resolver.trailheadItemById.name ? aws_appsync_function.appsync_functions["trailheadItemById"].function_id : ""
}
}
Приведенный выше код, содержащий все идентификаторы и условия function_id, которые я разместил в pipeline_config, не работает! Могу ли я получить помощь с синтаксисом, чтобы получить эту работу?
Спасибо.
Комментарии:
1. Где вы хотите ссылаться на function_id, т.Е. в каком из аргументов
aws_appsync_resolver
?2. «не работает! » — не является конкретным. Что именно происходит? Какие-либо сообщения об ошибках?
Ответ №1:
функции — это список, а не string
. Это должно быть:
pipeline_config {
functions = [aws_appsync_function.appsync_functions[each.key].name==var.appsync_resolver.trailheadItemById.name ? aws_appsync_function.appsync_functions["trailheadItemById"].function_id : ""]
}
Но, вероятно, придется использовать динамические блоки, чтобы сделать его необязательным:
dynamic "pipeline_config" {
for_each = aws_appsync_function.appsync_functions[each.key].name==var.appsync_resolver.trailheadItemById.name ? [1]: []
content {
functions = [aws_appsync_function.appsync_functions["trailheadItemById"].function_id]
}
}
Комментарии:
1. не сработало, он создавал распознаватели 5 раз в виде 5 функциональных объектов
Ответ №2:
Это сработало … !! Ура
Ошибка, которую я делал, это упоминание
for_each = var.appsync_function
в resource "aws_appsync_resolver"
#---- Create AppSync Functions -----
resource "aws_appsync_function" "sfdc_appsync_functions" {
for_each = var.appsync_function
name = each.value.name
api_id = aws_appsync_graphql_api.sfdc_appsync.id
data_source = each.value.data_source
request_mapping_template = file(each.value.request_template_path)
response_mapping_template = file(each.value.response_template_path)
description = each.value.description
depends_on = [aws_appsync_graphql_api.sfdc_appsync, aws_appsync_datasource.sfdc_appsync_datasource]
}
#---- Create AppSync Resolvers -----
# PIPELINE type resolver
resource "aws_appsync_resolver" "sfdc_appsync_pipeline_resolver" {
for_each = var.appsync_resolver
type = "Query"
api_id = aws_appsync_graphql_api.sfdc_appsync.id
field = each.value.name
request_template = file(var.appsync_resolver.trailheadItemById.request_template_path)
response_template = file(var.appsync_resolver.trailheadItemById.response_template_path)
kind = "PIPELINE"
pipeline_config {
functions = [aws_appsync_function.sfdc_appsync_functions["GetContentById"].function_id]
}
depends_on = [aws_appsync_graphql_api.sfdc_appsync, aws_appsync_datasource.sfdc_appsync_datasource, aws_appsync_function.sfdc_appsync_functions]
}
cc: @Marcin