diff --git a/aws/resource_aws_apigatewayv2_integration.go b/aws/resource_aws_apigatewayv2_integration.go index be5ed63328e..5c7a517bd65 100644 --- a/aws/resource_aws_apigatewayv2_integration.go +++ b/aws/resource_aws_apigatewayv2_integration.go @@ -119,6 +119,25 @@ func resourceAwsApiGatewayV2Integration() *schema.Resource { // Length between [0-32768]. Elem: &schema.Schema{Type: schema.TypeString}, }, + "response_parameters": { + Type: schema.TypeSet, + Optional: true, + MinItems: 0, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "mappings": { + Type: schema.TypeMap, + Required: true, + // Length between [1-512]. + Elem: &schema.Schema{Type: schema.TypeString}, + }, + "status_code": { + Type: schema.TypeString, + Required: true, + }, + }, + }, + }, "template_selection_expression": { Type: schema.TypeString, Optional: true, @@ -189,6 +208,9 @@ func resourceAwsApiGatewayV2IntegrationCreate(d *schema.ResourceData, meta inter if v, ok := d.GetOk("request_templates"); ok { req.RequestTemplates = stringMapToPointers(v.(map[string]interface{})) } + if v, ok := d.GetOk("response_parameters"); ok && v.(*schema.Set).Len() > 0 { + req.ResponseParameters = expandApiGateway2IntegrationResponseParameters(v.(*schema.Set).List()) + } if v, ok := d.GetOk("template_selection_expression"); ok { req.TemplateSelectionExpression = aws.String(v.(string)) } @@ -246,6 +268,10 @@ func resourceAwsApiGatewayV2IntegrationRead(d *schema.ResourceData, meta interfa if err != nil { return fmt.Errorf("error setting request_templates: %s", err) } + err = d.Set("response_parameters", flattenApiGateway2IntegrationResponseParameters(resp.ResponseParameters)) + if err != nil { + return fmt.Errorf("error setting response_parameters: %s", err) + } d.Set("template_selection_expression", resp.TemplateSelectionExpression) d.Set("timeout_milliseconds", resp.TimeoutInMillis) if err := d.Set("tls_config", flattenApiGateway2TlsConfig(resp.TlsConfig)); err != nil { @@ -298,6 +324,7 @@ func resourceAwsApiGatewayV2IntegrationUpdate(d *schema.ResourceData, meta inter if d.HasChange("request_parameters") { o, n := d.GetChange("request_parameters") add, del, nop := diffStringMaps(o.(map[string]interface{}), n.(map[string]interface{})) + // Parameters are removed by setting the associated value to "". for k := range del { del[k] = aws.String("") @@ -311,11 +338,36 @@ func resourceAwsApiGatewayV2IntegrationUpdate(d *schema.ResourceData, meta inter for k, v := range nop { variables[k] = v } + req.RequestParameters = variables } if d.HasChange("request_templates") { req.RequestTemplates = stringMapToPointers(d.Get("request_templates").(map[string]interface{})) } + if d.HasChange("response_parameters") { + o, n := d.GetChange("response_parameters") + os := o.(*schema.Set) + ns := n.(*schema.Set) + del := os.Difference(ns).List() + + req.ResponseParameters = expandApiGateway2IntegrationResponseParameters(ns.List()) + + // Parameters are removed by setting the associated value to {}. + for _, tfMapRaw := range del { + tfMap, ok := tfMapRaw.(map[string]interface{}) + + if !ok { + continue + } + + if v, ok := tfMap["status_code"].(string); ok && v != "" { + if req.ResponseParameters == nil { + req.ResponseParameters = map[string]map[string]*string{} + } + req.ResponseParameters[v] = map[string]*string{} + } + } + } if d.HasChange("template_selection_expression") { req.TemplateSelectionExpression = aws.String(d.Get("template_selection_expression").(string)) } @@ -406,3 +458,50 @@ func flattenApiGateway2TlsConfig(config *apigatewayv2.TlsConfig) []interface{} { "server_name_to_verify": aws.StringValue(config.ServerNameToVerify), }} } + +func expandApiGateway2IntegrationResponseParameters(tfList []interface{}) map[string]map[string]*string { + if len(tfList) == 0 { + return nil + } + + responseParameters := map[string]map[string]*string{} + + for _, tfMapRaw := range tfList { + tfMap, ok := tfMapRaw.(map[string]interface{}) + + if !ok { + continue + } + + if vStatusCode, ok := tfMap["status_code"].(string); ok && vStatusCode != "" { + if v, ok := tfMap["mappings"].(map[string]interface{}); ok && len(v) > 0 { + responseParameters[vStatusCode] = stringMapToPointers(v) + } + } + } + + return responseParameters +} + +func flattenApiGateway2IntegrationResponseParameters(responseParameters map[string]map[string]*string) []interface{} { + if len(responseParameters) == 0 { + return nil + } + + var tfList []interface{} + + for statusCode, mappings := range responseParameters { + if len(mappings) == 0 { + continue + } + + tfMap := map[string]interface{}{} + + tfMap["status_code"] = statusCode + tfMap["mappings"] = aws.StringValueMap(mappings) + + tfList = append(tfList, tfMap) + } + + return tfList +} diff --git a/aws/resource_aws_apigatewayv2_integration_test.go b/aws/resource_aws_apigatewayv2_integration_test.go index b70a53689c4..2b0248cc96d 100644 --- a/aws/resource_aws_apigatewayv2_integration_test.go +++ b/aws/resource_aws_apigatewayv2_integration_test.go @@ -40,6 +40,7 @@ func TestAccAWSAPIGatewayV2Integration_basicWebSocket(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "payload_format_version", "1.0"), resource.TestCheckResourceAttr(resourceName, "request_parameters.%", "0"), resource.TestCheckResourceAttr(resourceName, "request_templates.%", "0"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "0"), resource.TestCheckResourceAttr(resourceName, "template_selection_expression", ""), resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "29000"), resource.TestCheckResourceAttr(resourceName, "tls_config.#", "0"), @@ -82,9 +83,12 @@ func TestAccAWSAPIGatewayV2Integration_basicHttp(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "integration_uri", "https://example.com"), resource.TestCheckResourceAttr(resourceName, "passthrough_behavior", ""), resource.TestCheckResourceAttr(resourceName, "payload_format_version", "1.0"), + resource.TestCheckResourceAttr(resourceName, "request_parameters.%", "0"), resource.TestCheckResourceAttr(resourceName, "request_templates.%", "0"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "0"), resource.TestCheckResourceAttr(resourceName, "template_selection_expression", ""), resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "30000"), + resource.TestCheckResourceAttr(resourceName, "tls_config.#", "0"), ), }, { @@ -120,6 +124,96 @@ func TestAccAWSAPIGatewayV2Integration_disappears(t *testing.T) { }) } +func TestAccAWSAPIGatewayV2Integration_DataMappingHttp(t *testing.T) { + var apiId string + var v apigatewayv2.GetIntegrationOutput + resourceName := "aws_apigatewayv2_integration.test" + rName := acctest.RandomWithPrefix("tf-acc-test") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSAPIGatewayV2IntegrationDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSAPIGatewayV2IntegrationConfig_dataMappingHttp(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSAPIGatewayV2IntegrationExists(resourceName, &apiId, &v), + resource.TestCheckResourceAttr(resourceName, "connection_id", ""), + resource.TestCheckResourceAttr(resourceName, "connection_type", "INTERNET"), + resource.TestCheckResourceAttr(resourceName, "content_handling_strategy", ""), + resource.TestCheckResourceAttr(resourceName, "credentials_arn", ""), + resource.TestCheckResourceAttr(resourceName, "description", ""), + resource.TestCheckResourceAttr(resourceName, "integration_method", "ANY"), + resource.TestCheckResourceAttr(resourceName, "integration_response_selection_expression", ""), + resource.TestCheckResourceAttr(resourceName, "integration_subtype", ""), + resource.TestCheckResourceAttr(resourceName, "integration_type", "HTTP_PROXY"), + resource.TestCheckResourceAttr(resourceName, "integration_uri", "http://www.example.com"), + resource.TestCheckResourceAttr(resourceName, "passthrough_behavior", ""), + resource.TestCheckResourceAttr(resourceName, "payload_format_version", "1.0"), + resource.TestCheckResourceAttr(resourceName, "request_parameters.%", "2"), + resource.TestCheckResourceAttr(resourceName, "request_parameters.append:header.header1", "$context.requestId"), + resource.TestCheckResourceAttr(resourceName, "request_parameters.remove:querystring.qs1", "''"), + resource.TestCheckResourceAttr(resourceName, "request_templates.%", "0"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "2"), + resource.TestCheckTypeSetElemNestedAttrs(resourceName, "response_parameters.*", map[string]string{ + "status_code": "500", + "mappings.%": "2", + "mappings.append:header.header1": "$context.requestId", + "mappings.overwrite:statuscode": "403", + }), + resource.TestCheckTypeSetElemNestedAttrs(resourceName, "response_parameters.*", map[string]string{ + "status_code": "404", + "mappings.%": "1", + "mappings.append:header.error": "$stageVariables.environmentId", + }), + resource.TestCheckResourceAttr(resourceName, "template_selection_expression", ""), + resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "30000"), + resource.TestCheckResourceAttr(resourceName, "tls_config.#", "0"), + ), + }, + { + Config: testAccAWSAPIGatewayV2IntegrationConfig_dataMappingHttpUpdated(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSAPIGatewayV2IntegrationExists(resourceName, &apiId, &v), + resource.TestCheckResourceAttr(resourceName, "connection_id", ""), + resource.TestCheckResourceAttr(resourceName, "connection_type", "INTERNET"), + resource.TestCheckResourceAttr(resourceName, "content_handling_strategy", ""), + resource.TestCheckResourceAttr(resourceName, "credentials_arn", ""), + resource.TestCheckResourceAttr(resourceName, "description", ""), + resource.TestCheckResourceAttr(resourceName, "integration_method", "ANY"), + resource.TestCheckResourceAttr(resourceName, "integration_response_selection_expression", ""), + resource.TestCheckResourceAttr(resourceName, "integration_subtype", ""), + resource.TestCheckResourceAttr(resourceName, "integration_type", "HTTP_PROXY"), + resource.TestCheckResourceAttr(resourceName, "integration_uri", "http://www.example.com"), + resource.TestCheckResourceAttr(resourceName, "passthrough_behavior", ""), + resource.TestCheckResourceAttr(resourceName, "payload_format_version", "1.0"), + resource.TestCheckResourceAttr(resourceName, "request_parameters.%", "2"), + resource.TestCheckResourceAttr(resourceName, "request_parameters.append:header.header1", "$context.accountId"), + resource.TestCheckResourceAttr(resourceName, "request_parameters.overwrite:header.header2", "$stageVariables.environmentId"), + resource.TestCheckResourceAttr(resourceName, "request_templates.%", "0"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "1"), + resource.TestCheckTypeSetElemNestedAttrs(resourceName, "response_parameters.*", map[string]string{ + "status_code": "500", + "mappings.%": "2", + "mappings.append:header.header1": "$context.requestId", + "mappings.overwrite:statuscode": "403", + }), + resource.TestCheckResourceAttr(resourceName, "template_selection_expression", ""), + resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "30000"), + resource.TestCheckResourceAttr(resourceName, "tls_config.#", "0"), + ), + }, + { + ResourceName: resourceName, + ImportStateIdFunc: testAccAWSAPIGatewayV2IntegrationImportStateIdFunc(resourceName), + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + func TestAccAWSAPIGatewayV2Integration_IntegrationTypeHttp(t *testing.T) { var apiId string var v apigatewayv2.GetIntegrationOutput @@ -151,6 +245,7 @@ func TestAccAWSAPIGatewayV2Integration_IntegrationTypeHttp(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "request_parameters.integration.request.querystring.stage", "'value1'"), resource.TestCheckResourceAttr(resourceName, "request_templates.%", "1"), resource.TestCheckResourceAttr(resourceName, "request_templates.application/json", ""), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "0"), resource.TestCheckResourceAttr(resourceName, "template_selection_expression", "$request.body.name"), resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "28999"), resource.TestCheckResourceAttr(resourceName, "tls_config.#", "0"), @@ -178,6 +273,7 @@ func TestAccAWSAPIGatewayV2Integration_IntegrationTypeHttp(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "request_templates.%", "2"), resource.TestCheckResourceAttr(resourceName, "request_templates.application/json", "#set($number=42)"), resource.TestCheckResourceAttr(resourceName, "request_templates.application/xml", "#set($percent=$number/100)"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "0"), resource.TestCheckResourceAttr(resourceName, "template_selection_expression", "$request.body.id"), resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "51"), resource.TestCheckResourceAttr(resourceName, "tls_config.#", "0"), @@ -222,6 +318,7 @@ func TestAccAWSAPIGatewayV2Integration_LambdaWebSocket(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "payload_format_version", "1.0"), resource.TestCheckResourceAttr(resourceName, "request_parameters.%", "0"), resource.TestCheckResourceAttr(resourceName, "request_templates.%", "0"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "0"), resource.TestCheckResourceAttr(resourceName, "template_selection_expression", ""), resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "29000"), resource.TestCheckResourceAttr(resourceName, "tls_config.#", "0"), @@ -266,6 +363,7 @@ func TestAccAWSAPIGatewayV2Integration_LambdaHttp(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "payload_format_version", "2.0"), resource.TestCheckResourceAttr(resourceName, "request_parameters.%", "0"), resource.TestCheckResourceAttr(resourceName, "request_templates.%", "0"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "0"), resource.TestCheckResourceAttr(resourceName, "template_selection_expression", ""), resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "30000"), resource.TestCheckResourceAttr(resourceName, "tls_config.#", "0"), @@ -311,6 +409,7 @@ func TestAccAWSAPIGatewayV2Integration_VpcLinkWebSocket(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "payload_format_version", "1.0"), resource.TestCheckResourceAttr(resourceName, "request_parameters.%", "0"), resource.TestCheckResourceAttr(resourceName, "request_templates.%", "0"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "0"), resource.TestCheckResourceAttr(resourceName, "template_selection_expression", ""), resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "12345"), resource.TestCheckResourceAttr(resourceName, "tls_config.#", "0"), @@ -355,7 +454,9 @@ func TestAccAWSAPIGatewayV2Integration_VpcLinkHttp(t *testing.T) { resource.TestCheckResourceAttrPair(resourceName, "integration_uri", lbListenerResourceName, "arn"), resource.TestCheckResourceAttr(resourceName, "passthrough_behavior", ""), resource.TestCheckResourceAttr(resourceName, "payload_format_version", "1.0"), + resource.TestCheckResourceAttr(resourceName, "request_parameters.%", "0"), resource.TestCheckResourceAttr(resourceName, "request_templates.%", "0"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "0"), resource.TestCheckResourceAttr(resourceName, "template_selection_expression", ""), resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "29001"), resource.TestCheckResourceAttr(resourceName, "tls_config.#", "1"), @@ -384,7 +485,9 @@ func TestAccAWSAPIGatewayV2Integration_VpcLinkHttp(t *testing.T) { resource.TestCheckResourceAttrPair(resourceName, "integration_uri", lbListenerResourceName, "arn"), resource.TestCheckResourceAttr(resourceName, "passthrough_behavior", ""), resource.TestCheckResourceAttr(resourceName, "payload_format_version", "1.0"), + resource.TestCheckResourceAttr(resourceName, "request_parameters.%", "0"), resource.TestCheckResourceAttr(resourceName, "request_templates.%", "0"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "0"), resource.TestCheckResourceAttr(resourceName, "template_selection_expression", ""), resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "29001"), resource.TestCheckResourceAttr(resourceName, "tls_config.#", "1"), @@ -435,6 +538,7 @@ func TestAccAWSAPIGatewayV2Integration_AwsServiceIntegration(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "request_parameters.MessageGroupId", "$request.body.authentication_key"), resource.TestCheckResourceAttrPair(resourceName, "request_parameters.QueueUrl", sqsQueue1ResourceName, "id"), resource.TestCheckResourceAttr(resourceName, "request_templates.%", "0"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "0"), resource.TestCheckResourceAttr(resourceName, "template_selection_expression", ""), resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "30000"), resource.TestCheckResourceAttr(resourceName, "tls_config.#", "0"), @@ -460,6 +564,7 @@ func TestAccAWSAPIGatewayV2Integration_AwsServiceIntegration(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "request_parameters.MessageGroupId", "$request.body.authentication_key"), resource.TestCheckResourceAttrPair(resourceName, "request_parameters.QueueUrl", sqsQueue2ResourceName, "id"), resource.TestCheckResourceAttr(resourceName, "request_templates.%", "0"), + resource.TestCheckResourceAttr(resourceName, "response_parameters.#", "0"), resource.TestCheckResourceAttr(resourceName, "template_selection_expression", ""), resource.TestCheckResourceAttr(resourceName, "timeout_milliseconds", "30000"), resource.TestCheckResourceAttr(resourceName, "tls_config.#", "0"), @@ -681,6 +786,66 @@ resource "aws_apigatewayv2_integration" "test" { ` } +func testAccAWSAPIGatewayV2IntegrationConfig_dataMappingHttp(rName string) string { + return testAccAWSAPIGatewayV2IntegrationConfig_apiHttp(rName) + ` +resource "aws_apigatewayv2_integration" "test" { + api_id = aws_apigatewayv2_api.test.id + + integration_type = "HTTP_PROXY" + integration_method = "ANY" + integration_uri = "http://www.example.com" + + request_parameters = { + "append:header.header1" = "$context.requestId" + "remove:querystring.qs1" = "''" + } + + response_parameters { + status_code = "500" + + mappings = { + "append:header.header1" = "$context.requestId" + "overwrite:statuscode" = "403" + } + } + + response_parameters { + status_code = "404" + + mappings = { + "append:header.error" = "$stageVariables.environmentId" + } + } +} +` +} + +func testAccAWSAPIGatewayV2IntegrationConfig_dataMappingHttpUpdated(rName string) string { + return testAccAWSAPIGatewayV2IntegrationConfig_apiHttp(rName) + ` +resource "aws_apigatewayv2_integration" "test" { + api_id = aws_apigatewayv2_api.test.id + + integration_type = "HTTP_PROXY" + integration_method = "ANY" + integration_uri = "http://www.example.com" + + request_parameters = { + "append:header.header1" = "$context.accountId" + "overwrite:header.header2" = "$stageVariables.environmentId" + } + + response_parameters { + status_code = "500" + + mappings = { + "append:header.header1" = "$context.requestId" + "overwrite:statuscode" = "403" + } + } +} +` +} + func testAccAWSAPIGatewayV2IntegrationConfig_integrationTypeHttp(rName string) string { return testAccAWSAPIGatewayV2IntegrationConfig_apiWebSocket(rName) + ` resource "aws_apigatewayv2_integration" "test" { diff --git a/website/docs/r/apigatewayv2_integration.html.markdown b/website/docs/r/apigatewayv2_integration.html.markdown index 2801f6e7d20..5cd30429334 100644 --- a/website/docs/r/apigatewayv2_integration.html.markdown +++ b/website/docs/r/apigatewayv2_integration.html.markdown @@ -82,15 +82,24 @@ For an `HTTP` integration, specify a fully-qualified URL. For an HTTP API privat * `passthrough_behavior` - (Optional) The pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the `request_templates` attribute. Valid values: `WHEN_NO_MATCH`, `WHEN_NO_TEMPLATES`, `NEVER`. Default is `WHEN_NO_MATCH`. Supported only for WebSocket APIs. * `payload_format_version` - (Optional) The [format of the payload](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html#http-api-develop-integrations-lambda.proxy-format) sent to an integration. Valid values: `1.0`, `2.0`. Default is `1.0`. -* `request_parameters` - (Optional) A key-value map specifying request parameters that are passed from the method request to the backend. -Supported only for WebSocket APIs. -* `request_templates` - (Optional) A map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. Supported only for WebSocket APIs. +* `request_parameters` - (Optional) For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. +For HTTP APIs with a specified `integration_subtype`, a key-value map specifying parameters that are passed to `AWS_PROXY` integrations. +For HTTP APIs without a specified `integration_subtype`, a key-value map specifying how to transform HTTP requests before sending them to the backend. +See the [Amazon API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html) for details. +* `request_templates` - (Optional) A map of [Velocity](https://velocity.apache.org/) templates that are applied on the request payload based on the value of the Content-Type header sent by the client. Supported only for WebSocket APIs. +* `response_parameters` - (Optional) Mappings to transform the HTTP response from a backend integration before returning the response to clients. Supported only for HTTP APIs. * `template_selection_expression` - (Optional) The [template selection expression](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-template-selection-expressions) for the integration. * `timeout_milliseconds` - (Optional) Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs. Terraform will only perform drift detection of its value when present in a configuration. * `tls_config` - (Optional) The TLS configuration for a private integration. Supported only for HTTP APIs. +The `response_parameters` object supports the following: + +* `status_code` - (Required) The HTTP status code in the range 200-599. +* `mappings` - (Required) A key-value map. The key of ths map identifies the location of the request parameter to change, and how to change it. The corresponding value specifies the new data for the parameter. +See the [Amazon API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-parameter-mapping.html) for details. + The `tls_config` object supports the following: * `server_name_to_verify` - (Optional) If you specify a server name, API Gateway uses it to verify the hostname on the integration's certificate. The server name is also included in the TLS handshake to support Server Name Indication (SNI) or virtual hosting.