<!-- Love localstack? Please consider supporting our collective:
👉  https://opencollective.com/localstack/donate -->

# Type of request: This is a ...

[x] bug report
[ ] feature request

# Detailed description
when you create a cloudformation stack with apigateway / s3 integration the cloudformation code is fine, but in the resulting method integration the request parameters are missing. this works in the aws cloud
...

## Expected behavior
the request parameters are not created.
...

## Actual behavior
the request parameters should be created.
...

# Steps to reproduce
```yaml
Resources:
  DevOfferApi161BA234:
    Type: AWS::ApiGateway::RestApi
    Properties:
      EndpointConfiguration:
        Types:
          - REGIONAL
      Name: DevOfferApi
    Metadata:
      aws:cdk:path: OfferApiStack/DevOfferApi/Resource
  DevOfferApiCloudWatchRole18727FB4:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: sts:AssumeRole
            Effect: Allow
            Principal:
              Service: apigateway.amazonaws.com
        Version: "2012-10-17"
      ManagedPolicyArns:
        - Fn::Join:
            - ""
            - - "arn:"
              - Ref: AWS::Partition
              - :iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs
    Metadata:
      aws:cdk:path: OfferApiStack/DevOfferApi/CloudWatchRole/Resource
  DevOfferApiAccount61030BB1:
    Type: AWS::ApiGateway::Account
    Properties:
      CloudWatchRoleArn:
        Fn::GetAtt:
          - DevOfferApiCloudWatchRole18727FB4
          - Arn
    DependsOn:
      - DevOfferApi161BA234
    Metadata:
      aws:cdk:path: OfferApiStack/DevOfferApi/Account
  DevOfferApiDeployment67942EBFb7bddcff9bebe189def1e5b267a6cc3f:
    Type: AWS::ApiGateway::Deployment
    Properties:
      RestApiId:
        Ref: DevOfferApi161BA234
      Description: Automatically created by the RestApi construct
    DependsOn:
      - DevOfferApiidDELETE322BCA4A
      - DevOfferApiidGET0A920ED1
      - DevOfferApiidPUTF9263322
      - DevOfferApiidC396C3C1
      - DevOfferApiPOST14096B08
      - DevOfferApiDefaultValidator74076375
      - newoffer4C59669F
    Metadata:
      aws:cdk:path: OfferApiStack/DevOfferApi/Deployment/Resource
  DevOfferApiDeploymentStageprod61EB7D20:
    Type: AWS::ApiGateway::Stage
    Properties:
      RestApiId:
        Ref: DevOfferApi161BA234
      DeploymentId:
        Ref: DevOfferApiDeployment67942EBFb7bddcff9bebe189def1e5b267a6cc3f
      StageName: prod
    Metadata:
      aws:cdk:path: OfferApiStack/DevOfferApi/DeploymentStage.prod/Resource
  DevOfferApiidC396C3C1:
    Type: AWS::ApiGateway::Resource
    Properties:
      ParentId:
        Fn::GetAtt:
          - DevOfferApi161BA234
          - RootResourceId
      PathPart: "{id}"
      RestApiId:
        Ref: DevOfferApi161BA234
    Metadata:
      aws:cdk:path: OfferApiStack/DevOfferApi/Default/{id}/Resource
  DevOfferApiidGET0A920ED1:
    Type: AWS::ApiGateway::Method
    Properties:
      HttpMethod: GET
      ResourceId:
        Ref: DevOfferApiidC396C3C1
      RestApiId:
        Ref: DevOfferApi161BA234
      AuthorizationType: NONE
      Integration:
        Credentials:
          Fn::GetAtt:
            - OfferIntegrationsroleA20FBA4E
            - Arn
        IntegrationHttpMethod: GET
        IntegrationResponses:
          - StatusCode: "200"
        RequestParameters:
          integration.request.path.object: method.request.path.id
        Type: AWS
        Uri:
          Fn::Join:
            - ""
            - - "arn:"
              - Ref: AWS::Partition
              - ":apigateway:"
              - Ref: AWS::Region
              - :s3:path/
              - Ref: OfferIntegrationsofferbucketB94C26F7
              - /{object}.json
      MethodResponses:
        - StatusCode: "200"
      RequestParameters:
        method.request.path.id: false
    Metadata:
      aws:cdk:path: OfferApiStack/DevOfferApi/Default/{id}/GET/Resource
  DevOfferApiidDELETE322BCA4A:
    Type: AWS::ApiGateway::Method
    Properties:
      HttpMethod: DELETE
      ResourceId:
        Ref: DevOfferApiidC396C3C1
      RestApiId:
        Ref: DevOfferApi161BA234
      AuthorizationType: NONE
      Integration:
        Credentials:
          Fn::GetAtt:
            - OfferIntegrationsroleA20FBA4E
            - Arn
        IntegrationHttpMethod: DELETE
        IntegrationResponses:
          - StatusCode: "200"
        RequestParameters:
          integration.request.path.object: method.request.path.id
        Type: AWS
        Uri:
          Fn::Join:
            - ""
            - - "arn:"
              - Ref: AWS::Partition
              - ":apigateway:"
              - Ref: AWS::Region
              - :s3:path/
              - Ref: OfferIntegrationsofferbucketB94C26F7
              - /{object}.json
      MethodResponses:
        - StatusCode: "200"
      RequestParameters:
        method.request.path.id: false
    Metadata:
      aws:cdk:path: OfferApiStack/DevOfferApi/Default/{id}/DELETE/Resource
  DevOfferApiidPUTF9263322:
    Type: AWS::ApiGateway::Method
    Properties:
      HttpMethod: PUT
      ResourceId:
        Ref: DevOfferApiidC396C3C1
      RestApiId:
        Ref: DevOfferApi161BA234
      AuthorizationType: NONE
      Integration:
        Credentials:
          Fn::GetAtt:
            - OfferIntegrationsroleA20FBA4E
            - Arn
        IntegrationHttpMethod: PUT
        IntegrationResponses:
          - StatusCode: "200"
        RequestParameters:
          integration.request.path.object: method.request.path.id
          integration.request.header.Content-Type: method.request.header.Content-Type
        Type: AWS
        Uri:
          Fn::Join:
            - ""
            - - "arn:"
              - Ref: AWS::Partition
              - ":apigateway:"
              - Ref: AWS::Region
              - :s3:path/
              - Ref: OfferIntegrationsofferbucketB94C26F7
              - /{object}.json
      MethodResponses:
        - StatusCode: "200"
      RequestModels:
        application/json:
          Ref: newoffer4C59669F
      RequestParameters:
        method.request.path.id: false
        method.request.header.Content-Type: false
      RequestValidatorId:
        Ref: DevOfferApiDefaultValidator74076375
    Metadata:
      aws:cdk:path: OfferApiStack/DevOfferApi/Default/{id}/PUT/Resource
  DevOfferApiPOST14096B08:
    Type: AWS::ApiGateway::Method
    Properties:
      HttpMethod: POST
      ResourceId:
        Fn::GetAtt:
          - DevOfferApi161BA234
          - RootResourceId
      RestApiId:
        Ref: DevOfferApi161BA234
      AuthorizationType: NONE
      Integration:
        Credentials:
          Fn::GetAtt:
            - OfferIntegrationsroleA20FBA4E
            - Arn
        IntegrationHttpMethod: PUT
        IntegrationResponses:
          - ResponseTemplates:
              application/json: $context.requestId
            StatusCode: "200"
        RequestParameters:
          integration.request.path.object: context.requestId
          integration.request.header.Content-Type: method.request.header.Content-Type
        Type: AWS
        Uri:
          Fn::Join:
            - ""
            - - "arn:"
              - Ref: AWS::Partition
              - ":apigateway:"
              - Ref: AWS::Region
              - :s3:path/
              - Ref: OfferIntegrationsofferbucketB94C26F7
              - /{object}.json
      MethodResponses:
        - StatusCode: "200"
      RequestModels:
        application/json:
          Ref: newoffer4C59669F
      RequestParameters:
        method.request.header.Content-Type: false
      RequestValidatorId:
        Ref: DevOfferApiDefaultValidator74076375
    Metadata:
      aws:cdk:path: OfferApiStack/DevOfferApi/Default/POST/Resource
  DevOfferApiDefaultValidator74076375:
    Type: AWS::ApiGateway::RequestValidator
    Properties:
      RestApiId:
        Ref: DevOfferApi161BA234
      ValidateRequestBody: true
      ValidateRequestParameters: true
    Metadata:
      aws:cdk:path: OfferApiStack/DevOfferApi/DefaultValidator/Resource
  newoffer4C59669F:
    Type: AWS::ApiGateway::Model
    Properties:
      RestApiId:
        Ref: DevOfferApi161BA234
      ContentType: application/json
      Name: NewOffer
      Schema:
        type: object
        required:
          - productId
          - totalPremium
          - totalNetPremium
        properties:
          productId:
            type: string
            description: ID des Produkts
          totalPremium:
            type: number
            description: Gesamtbeitrag
          totalNetPremium:
            type: number
            description: Gesamtnettobeitrag
          components:
            type: array
            items:
              type: object
              required:
                - startOfInsurance
                - paymentMode
                - typeOfDefault
                - targetAmount
                - typeOfRuntime
                - runningTime
                - appropriationOfProfits
                - entryAge
                - durationOfInsurance
                - occupationalGroup
                - sumInsured
                - premium
                - netPremium
                - totalPayoutAmount
              properties:
                productName:
                  type: string
                  description: name of product
                smoker:
                  type: boolean
                homeowner:
                  type: boolean
                jobPosition:
                  type: string
                graduation:
                  type: string
                jobDetails:
                  properties:
                    personnelResponsibility:
                      properties:
                        hasResponsibility:
                          type: boolean
                        numberOfEmployees:
                          type: number
                    homeOfficePercentage:
                      type: number
                    officePercentage:
                      type: number
                    travelPercentage:
                      type: number
                    physicalWorkPercentage:
                      type: number
                smokingBehaviour:
                  type: number
                  description: Rauch-Verhalten
                productConditions:
                  type: string
                  description: Konditionen
                startOfInsurance:
                  type: string
                  format: date
                  description: Beginn
                paymentMode:
                  type: string
                  enum:
                    - monthly
                    - quarterly
                    - semiAnnually
                    - annually
                  description: Inkasso-Zahlweise
                typeOfDefault:
                  type: string
                  enum:
                    - premium
                    - sumInsured
                    - totalPayoutAmount
                  description: Art der Vorgabe
                targetAmount:
                  type: number
                  description: Vorgabesumme
                typeOfRuntime:
                  type: string
                  enum:
                    - runningTime
                    - endingAge
                  description: Art der Laufzeit
                runningTime:
                  type: number
                  description: Laufzeit
                appropriationOfProfits:
                  type: string
                  enum:
                    - instantDiscount
                    - deathBenefit
                  description: Gewinnverwendung
                entryAge:
                  type: number
                  description: Eintrittsalter
                durationOfInsurance:
                  type: number
                  description: Versicherungsdauer
                jobTitle:
                  type: string
                occupationalGroup:
                  type: string
                  enum:
                    - A
                    - B
                  description: Berufsgruppe
                sumInsured:
                  type: number
                  description: Versicherungssumme
                premium:
                  type: number
                  description: Beitrag
                netPremium:
                  type: number
                  description: Nettobeitrag
                totalPayoutAmount:
                  type: number
                  description: Gesamtauszahlungssumme
                riskCalculation:
                  properties:
                    riskResult:
                      type: string
                      enum:
                        - normal
                        - extra-charge
                        - riskClause
                        - expert-decision
                    riskExtraCharge:
                      type: number
        $schema: http://json-schema.org/draft-04/schema#
    Metadata:
      aws:cdk:path: OfferApiStack/new-offer/Resource
  OfferIntegrationsofferbucketB94C26F7:
    Type: AWS::S3::Bucket
    UpdateReplacePolicy: Retain
    DeletionPolicy: Retain
    Metadata:
      aws:cdk:path: OfferApiStack/OfferIntegrations/offer-bucket/Resource
  OfferIntegrationsroleA20FBA4E:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Action: sts:AssumeRole
            Effect: Allow
            Principal:
              Service: apigateway.amazonaws.com
        Version: "2012-10-17"
      Path: /service-role/
    Metadata:
      aws:cdk:path: OfferApiStack/OfferIntegrations/role/Resource
  OfferIntegrationsroleDefaultPolicyB9943AE2:
    Type: AWS::IAM::Policy
    Properties:
      PolicyDocument:
        Statement:
          - Action:
              - s3:GetObject*
              - s3:GetBucket*
              - s3:List*
              - s3:DeleteObject*
              - s3:PutObject
              - s3:Abort*
            Effect: Allow
            Resource:
              - Fn::GetAtt:
                  - OfferIntegrationsofferbucketB94C26F7
                  - Arn
              - Fn::Join:
                  - ""
                  - - Fn::GetAtt:
                        - OfferIntegrationsofferbucketB94C26F7
                        - Arn
                    - /*
        Version: "2012-10-17"
      PolicyName: OfferIntegrationsroleDefaultPolicyB9943AE2
      Roles:
        - Ref: OfferIntegrationsroleA20FBA4E
    Metadata:
      aws:cdk:path: OfferApiStack/OfferIntegrations/role/DefaultPolicy/Resource
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Analytics: v2:deflate64:H4sIAAAAAAAAE12QTW/DIAyGf8vulDbapF3XdteqUybtjsDr3BCcgVkVIf77ILTax8mPX+zXNp3sNo9yc/ekLmGlzbBOmjzI9MpKD2L/7o6Rp8hiTy6wj5qr1kOg6DVULg8GGcllUS2SmvCkGC5qlqnU8XbCa8sNt1pTdCyeYbI0j+AWz19ZmX1avBvcpu1U+En+rHEA/iBTpSv18BnLwDdl0Sgm36r/aQcyYJemClmgGsvKZJt3jS9kUc81bZRFuJdpF/UAy86Ncs7CFQt5Duuv7kF29T/PAXHly5k4guxb/Ab5F452bAEAAA==
    Metadata:
      aws:cdk:path: OfferApiStack/CDKMetadata/Default
    Condition: CDKMetadataAvailable
Outputs:
  DevOfferApiEndpoint5E4AE11B:
    Value:
      Fn::Join:
        - ""
        - - https://
          - Ref: DevOfferApi161BA234
          - .execute-api.
          - Ref: AWS::Region
          - "."
          - Ref: AWS::URLSuffix
          - /
          - Ref: DevOfferApiDeploymentStageprod61EB7D20
          - /
Conditions:
  CDKMetadataAvailable:
    Fn::Or:
      - Fn::Or:
          - Fn::Equals:
              - Ref: AWS::Region
              - af-south-1
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-east-1
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-northeast-1
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-northeast-2
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-south-1
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-southeast-1
          - Fn::Equals:
              - Ref: AWS::Region
              - ap-southeast-2
          - Fn::Equals:
              - Ref: AWS::Region
              - ca-central-1
          - Fn::Equals:
              - Ref: AWS::Region
              - cn-north-1
          - Fn::Equals:
              - Ref: AWS::Region
              - cn-northwest-1
      - Fn::Or:
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-central-1
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-north-1
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-south-1
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-west-1
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-west-2
          - Fn::Equals:
              - Ref: AWS::Region
              - eu-west-3
          - Fn::Equals:
              - Ref: AWS::Region
              - me-south-1
          - Fn::Equals:
              - Ref: AWS::Region
              - sa-east-1
          - Fn::Equals:
              - Ref: AWS::Region
              - us-east-1
          - Fn::Equals:
              - Ref: AWS::Region
              - us-east-2
      - Fn::Or:
          - Fn::Equals:
              - Ref: AWS::Region
              - us-west-1
          - Fn::Equals:
              - Ref: AWS::Region
              - us-west-2
```

the created api-gateway, see the request paramters are empty:
```json
{
    "items": [
        {
            "id": "7sw7q6lreq",
            "path": "/",
            "resourceMethods": {
                "POST": {
                    "httpMethod": "POST",
                    "authorizationType": "NONE",
                    "apiKeyRequired": false,
                    "requestParameters": {
                        "method.request.header.Content-Type": false
                    },
                    "methodIntegration": {
                        "type": "AWS",
                        "httpMethod": "PUT",
                        "uri": "arn:aws:apigateway:us-east-1:s3:path/offerapistack-offerintegrationsofferbucketb94c26f7-43d1b30b/{object}.json",
                        "requestParameters": {},
                        "passthroughBehavior": "WHEN_NO_MATCH",
                        "cacheNamespace": "4d2918ca",
                        "cacheKeyParameters": [],
                        "integrationResponses": {}
                    }
                }
            }
        },
        {
            "id": "6wov03mq4d",
            "parentId": "7sw7q6lreq",
            "pathPart": "{id}",
            "path": "/{id}",
            "resourceMethods": {
                "GET": {
                    "httpMethod": "GET",
                    "authorizationType": "NONE",
                    "apiKeyRequired": false,
                    "requestParameters": {
                        "method.request.path.id": false
                    },
                    "methodIntegration": {
                        "type": "AWS",
                        "httpMethod": "GET",
                        "uri": "arn:aws:apigateway:us-east-1:s3:path/offerapistack-offerintegrationsofferbucketb94c26f7-43d1b30b/{object}.json",
                        "requestParameters": {},
                        "passthroughBehavior": "WHEN_NO_MATCH",
                        "cacheNamespace": "0a506b54",
                        "cacheKeyParameters": [],
                        "integrationResponses": {}
                    }
                },
                "DELETE": {
                    "httpMethod": "DELETE",
                    "authorizationType": "NONE",
                    "apiKeyRequired": false,
                    "requestParameters": {
                        "method.request.path.id": false
                    },
                    "methodIntegration": {
                        "type": "AWS",
                        "httpMethod": "DELETE",
                        "uri": "arn:aws:apigateway:us-east-1:s3:path/offerapistack-offerintegrationsofferbucketb94c26f7-43d1b30b/{object}.json",
                        "requestParameters": {},
                        "passthroughBehavior": "WHEN_NO_MATCH",
                        "cacheNamespace": "f7f7182e",
                        "cacheKeyParameters": [],
                        "integrationResponses": {}
                    }
                },
                "PUT": {
                    "httpMethod": "PUT",
                    "authorizationType": "NONE",
                    "apiKeyRequired": false,
                    "requestParameters": {
                        "method.request.path.id": false,
                        "method.request.header.Content-Type": false
                    },
                    "methodIntegration": {
                        "type": "AWS",
                        "httpMethod": "PUT",
                        "uri": "arn:aws:apigateway:us-east-1:s3:path/offerapistack-offerintegrationsofferbucketb94c26f7-43d1b30b/{object}.json",
                        "requestParameters": {},
                        "passthroughBehavior": "WHEN_NO_MATCH",
                        "cacheNamespace": "27674016",
                        "cacheKeyParameters": [],
                        "integrationResponses": {}
                    }
                }
            }
        }
    ]
}
```

## Command used to start LocalStack
docker-compose:
```yaml
version: '3'
services:
  localstack:
    image: localstack/localstack
    container_name: localstack
    network_mode: bridge
    ports:
      - "4566:4566"
      - "4571:4571"
      - '8055:8080'
    environment:
      - SERVICES=s3,apigateway,cloudformation,iam
      - DATA_DIR=/tmp/localstack/data
    volumes:
      - './.localstack:/tmp/localstack'
      - '/var/run/docker.sock:/var/run/docker.sock'
```
...

## Client code (AWS SDK code snippet, or sequence of "awslocal" commands)
cdk-code:
```typescript
const defaultRequestParameters = {
            'integration.request.path.object': 'method.request.path.id'
        };
        this.postIntegration = new apigateway.AwsIntegration(this.createIntegrationProps('PUT',
            this.bucket.bucketName, {
                'integration.request.path.object': 'context.requestId',
                'integration.request.header.Content-Type': 'method.request.header.Content-Type'
            }, this.executeRole, {'application/json': '$context.requestId'}));
        this.getIntegration = new apigateway.AwsIntegration(this.createIntegrationProps('GET',
            this.bucket.bucketName, {...defaultRequestParameters}, this.executeRole));
        this.putIntegration = new apigateway.AwsIntegration(this.createIntegrationProps('PUT',
            this.bucket.bucketName, {
                ...defaultRequestParameters,
                'integration.request.header.Content-Type': 'method.request.header.Content-Type'
            }, this.executeRole));
        this.deleteIntegration = new apigateway.AwsIntegration(this.createIntegrationProps('DELETE',
            this.bucket.bucketName, {...defaultRequestParameters}, this.executeRole));
```
...

import base64
import copy
import json
import logging
import re
import traceback
from typing import Optional
from urllib.parse import urlparse
import botocore
from moto.cloudformation import parsing
from moto.core import CloudFormationModel as MotoCloudFormationModel
from moto.ec2.utils import generate_route_id
from six import iteritems
from localstack.constants import FALSE_STRINGS, S3_STATIC_WEBSITE_HOSTNAME, TEST_AWS_ACCOUNT_ID
from localstack.services.cloudformation.deployment_utils import (
    PLACEHOLDER_AWS_NO_VALUE,
    PLACEHOLDER_RESOURCE_NAME,
    dump_json_params,
    param_defaults,
    remove_none_values,
    select_parameters,
)
from localstack.services.cloudformation.service_models import (
    KEY_RESOURCE_STATE,
    DependencyNotYetSatisfied,
    GenericBaseModel,
)
from localstack.services.s3 import s3_listener
from localstack.utils import common
from localstack.utils.aws import aws_stack