es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

agregar plantilla de mapeo para la API en Terraform

Quiero agregar un encabezado (Content-Type) y una plantilla de mapeo dentro de la solicitud de integración de mi AWS API Gateway. Siguiendo este tutorial, pude agregar fácilmente esos parámetros a través de la consola. https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-kinesis.html

Sin embargo, no puedo descifrar la sintaxis para agregarlos usando Terraform. Esta es mi solicitud de integración hasta ahora:

recurso "aws_api_gateway_integration" "kinesis_integration" {
rest_api_id = aws_api_gateway_rest_api.shippeo_api_kinesis.id
resource_id = aws_api_gateway_resource.shippeo_api_resource_kinesis.id
http_method = aws_api_gateway_method.post_json_files_kinesis.http_method
credentials = aws_iam_role.shippeo_integration_role.arn
type = "AWS"
uri = "arn:aws:apigateway:eu-central-1:kinesis:action/PutRecord"
integration_http_method = "POST"
depends_on = [
aws_api_gateway_resource.shippeo_api_resource_kinesis
]
}

¿Cómo puedo especificar el encabezado (Content-Type)+Mapeado De y las plantillas de mapeo como se muestra a continuación usando Terraform?

enter image description here
Plantilla de Mapeo:

{
"StreamName": "$input.params('stream-name')",
"Data": "$util.base64Encode($input.json('$.Data'))",
"PartitionKey": "$input.path('$.PartitionKey')"
}

En la documentación, se menciona patrón de selección y plantillas de respuesta, pero no estoy seguro de cómo usarlo en mi caso.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para agregar el encabezado (Content-Type) y las plantillas de mapeo dentro de la solicitud de integración de tu AWS API Gateway utilizando Terraform, puedes usar el siguiente código:

    resource "aws_api_gateway_integration" "kinesis_integration" {
      rest_api_id = aws_api_gateway_rest_api.shippeo_api_kinesis.id
      resource_id = aws_api_gateway_resource.shippeo_api_resource_kinesis.id
      http_method = aws_api_gateway_method.post_json_files_kinesis.http_method
      credentials = aws_iam_role.shippeo_integration_role.arn
      type        = "AWS"
      uri         = "arn:aws:apigateway:eu-central-1:kinesis:action/PutRecord"
    
      request_parameters = {
        "integration.request.header.Content-Type" = "'application/json'"
      }
    
      request_templates = {
        "application/json" = <<template
    {
      "streamname": "$input.params('stream-name')",
      "data": "$util.base64encode($input.json('$.data'))",
      "partitionkey": "$input.path('$.partitionkey')"
    }
    template
      }
    
      integration_http_method = "post"
    
      depends_on = [
        aws_api_gateway_resource.shippeo_api_resource_kinesis
      ]
    }
    

    aquí, el bloque request_parameters se utiliza para especificar el encabezado content-type. el bloque request_templates se utiliza para especificar la plantilla de mapeo. en este caso, la plantilla de mapeo se especifica para el tipo de medio application/json. si necesitas admitir otros tipos de medios, puedes agregar entradas adicionales al bloque request_templates. por último, el parámetro integration_http_method se utiliza para especificar el método http utilizado por la solicitud de integración.

    ¡espero que esto te ayude! avísame si tienes alguna otra pregunta. {=”” “streamname”:=”” “$input.params(‘stream-name’)”,=”” “data”:=”” “$util.base64encode($input.json(‘$.data’))”,=”” “partitionkey”:=”” “$input.path(‘$.partitionkey’)”=”” }=”” template=”” }=”” integration_http_method=”POST” depends_on=”[” aws_api_gateway_resource.shippeo_api_resource_kinesis=”” ]=”” }=”” “`=”” aquí,=”” el=”” bloque=”” request_parameters=”” se=”” utiliza=”” para=”” especificar=”” el=”” encabezado=”” content-type.=”” el=”” bloque=”” request_templates=”” se=”” utiliza=”” para=”” especificar=”” la=”” plantilla=”” de=”” mapeo.=”” en=”” este=”” caso,=”” la=”” plantilla=”” de=”” mapeo=”” se=”” especifica=”” para=”” el=”” tipo=”” de=”” medio=”” application/json.=”” si=”” necesitas=”” admitir=”” otros=”” tipos=”” de=”” medios,=”” puedes=”” agregar=”” entradas=”” adicionales=”” al=”” bloque=”” request_templates.=”” por=”” último,=”” el=”” parámetro=”” integration_http_method=”” se=”” utiliza=”” para=”” especificar=”” el=”” método=”” http=”” utilizado=”” por=”” la=”” solicitud=”” de=”” integración.=”” ¡espero=”” que=”” esto=”” te=”” ayude!=”” avísame=”” si=”” tienes=”” alguna=”” otra=””></template
    {
    “streamname”: “$input.params(‘stream-name’)”,
    “data”: “$util.base64encode($input.json(‘$.data’))”,
    “partitionkey”: “$input.path(‘$.partitionkey’)”
    }
    template
    }

    integration_http_method = “post”

    depends_on = [
    aws_api_gateway_resource.shippeo_api_resource_kinesis
    ]
    }
    “`

    aquí, el bloque request_parameters se utiliza para especificar el encabezado content-type. el bloque request_templates se utiliza para especificar la plantilla de mapeo. en este caso, la plantilla de mapeo se especifica para el tipo de medio application/json. si necesitas admitir otros tipos de medios, puedes agregar entradas adicionales al bloque request_templates. por último, el parámetro integration_http_method se utiliza para especificar el método http utilizado por la solicitud de integración.

    ¡espero que esto te ayude! avísame si tienes alguna otra pregunta.>

Comments are closed.