use request parameter resolvers
diff --git a/localstack/services/apigateway/helpers.py b/localstack/services/apigateway/helpers.py
index d29b4fc1264ee..5233a9c586b6c 100644
--- a/localstack/services/apigateway/helpers.py
+++ b/localstack/services/apigateway/helpers.py
@@ -401,8 +401,7 @@ def resolve(self, context: ApiInvocationContext) -> IntegrationParameters:
         # }
         request_params = context.integration.get("requestParameters", {})
 
-        # resolve all integration request parameters with the already resolved method
-        # request parameters
+        # resolve all integration request parameters with the already resolved method request parameters
         integrations_parameters = {}
         for k, v in request_params.items():
             if v.lower() in method_request_params:
@@ -591,7 +590,7 @@ def get_stage_variables(context: ApiInvocationContext) -> Optional[Dict[str, str
     ).apigateway
     try:
         response = api_gateway_client.get_stage(restApiId=context.api_id, stageName=context.stage)
-        return response.get("variables")
+        return response.get("variables", {})
     except Exception:
         LOG.info("Failed to get stage %s for API id %s", context.stage, context.api_id)
         return {}
@@ -1505,22 +1504,6 @@ def extract_api_id_from_hostname_in_url(hostname: str) -> str:
     return match.group(1)
 
 
-# This need to be extended to handle mappings and not just literal values.
-def create_invocation_headers(invocation_context: ApiInvocationContext) -> Dict[str, Any]:
-    headers = invocation_context.headers
-    integration = invocation_context.integration
-
-    if request_parameters := integration.get("requestParameters"):
-        for req_parameter_key, req_parameter_value in request_parameters.items():
-            if (
-                header_name := req_parameter_key.lstrip("integration.request.header.")
-                if "integration.request.header." in req_parameter_key
-                else None
-            ):
-                headers.update({header_name: req_parameter_value})
-    return headers
-
-
 def is_greedy_path(path_part: str) -> bool:
     return path_part.startswith("{") and path_part.endswith("+}")
 
diff --git a/localstack/services/apigateway/integration.py b/localstack/services/apigateway/integration.py
index 3c36706b03a1e..aae94b80575d9 100644
--- a/localstack/services/apigateway/integration.py
+++ b/localstack/services/apigateway/integration.py
@@ -402,9 +402,14 @@ def invoke(self, invocation_context: ApiInvocationContext):
 
 class LambdaIntegration(BackendIntegration):
     def invoke(self, invocation_context: ApiInvocationContext):
-        headers = helpers.create_invocation_headers(invocation_context)
         invocation_context.context = helpers.get_event_request_context(invocation_context)
         invocation_context.stage_variables = helpers.get_stage_variables(invocation_context)
+        headers = invocation_context.headers
+
+        # resolve integration parameters
+        integration_parameters = self.request_params_resolver.resolve(context=invocation_context)
+        headers.update(integration_parameters.get("headers", {}))
+
         if invocation_context.authorizer_type:
             invocation_context.context["authorizer"] = invocation_context.authorizer_result
 
@@ -622,10 +627,15 @@ def invoke(self, invocation_context: ApiInvocationContext):
         integration = invocation_context.integration
         path_params = invocation_context.path_params
         method = invocation_context.method
-        headers = helpers.create_invocation_headers(invocation_context)
+        headers = invocation_context.headers
+
         relative_path, query_string_params = extract_query_string_params(path=invocation_path)
         uri = integration.get("uri") or integration.get("integrationUri") or ""
 
+        # resolve integration parameters
+        integration_parameters = self.request_params_resolver.resolve(context=invocation_context)
+        headers.update(integration_parameters.get("headers", {}))
+
         if ":servicediscovery:" in uri:
             # check if this is a servicediscovery integration URI
             client = connect_to().servicediscovery
diff --git a/tests/unit/test_apigateway.py b/tests/unit/test_apigateway.py
index b51912b003e7b..1218f112a0e7e 100644
--- a/tests/unit/test_apigateway.py
+++ b/tests/unit/test_apigateway.py
@@ -19,7 +19,6 @@
     OpenAPISpecificationResolver,
     RequestParametersResolver,
     apply_json_patch_safe,
-    create_invocation_headers,
     extract_path_params,
     extract_query_string_params,
     get_resource_for_path,
@@ -677,14 +676,24 @@ def test_create_invocation_headers():
     invocation_context.integration = {
         "requestParameters": {"integration.request.header.X-Custom": "'Event'"}
     }
-    headers = create_invocation_headers(invocation_context)
-    assert headers == {"X-Header": "foobar", "X-Custom": "'Event'"}
+    headers = invocation_context.headers
+
+    req_params_resolver = RequestParametersResolver()
+    req_params = req_params_resolver.resolve(invocation_context)
+
+    headers.update(req_params.get("headers", {}))
+    assert headers == {"X-Header": "foobar", "X-Custom": "Event"}
 
     invocation_context.integration = {
         "requestParameters": {"integration.request.path.foobar": "'CustomValue'"}
     }
-    headers = create_invocation_headers(invocation_context)
-    assert headers == {"X-Header": "foobar", "X-Custom": "'Event'"}
+
+    req_params = req_params_resolver.resolve(invocation_context)
+    headers.update(req_params.get("headers", {}))
+    assert headers == {"X-Header": "foobar", "X-Custom": "Event"}
+
+    path = req_params.get("path", {})
+    assert path == {"foobar": "CustomValue"}
 
 
 class TestApigatewayEvents:


## Motivation

Improves community PR by using the `RequestParametersResolver` that can handle, headers, path and query strings and also static values.

Fixes the previous test - static values are configured using single quotes, "'Fixed-Header-Value'", but transformed into normal header values when passed to the integration.