We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
AutoPublishAlias property in Globals section throws E0001
*cfn-lint version: (`cfn-lint --version`)*
`cfn-lint 0.34.0`

*Description of issue.*
`AutoPublishAlias` in `Globals` section, referencing template parameter throws [`E0001`](https://github.com/aws-cloudformation/cfn-python-lint/blob/master/docs/rules.md#E0001)
Having the same parameter in Function resource passes ok.

```
Transform: AWS::Serverless-2016-10-31
Parameters:
  Stage:
    Type: String
Globals:
  Function:
    Runtime: python3.8
    AutoPublishAlias: !Ref Stage
Resources:
  TestFunction:
    Type: AWS::Serverless::Function
    Properties:
      # AutoPublishAlias: !Ref Stage
      CodeUri: ..
      Handler: src.test.lambda_handler
```
`[cfn-lint] E0001: Error transforming template: Resource with id [TestFunction] is invalid. 'AutoPublishAlias' must be a string or a Ref to a template parameter`

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/cfnlint/transform.py`
Content:
```
1 """
2 Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 SPDX-License-Identifier: MIT-0
4 """
5 import os
6 import logging
7 import six
8 import samtranslator
9 from samtranslator.parser import parser
10 from samtranslator.translator.translator import Translator
11 from samtranslator.public.exceptions import InvalidDocumentException
12 
13 from cfnlint.helpers import load_resource, convert_dict, format_json_string
14 from cfnlint.data import Serverless
15 from cfnlint.rules import Match, TransformError
16 LOGGER = logging.getLogger('cfnlint')
17 
18 
19 class Transform(object):
20     """
21     Application Serverless Module tranform Wrapper.
22     Based on code from AWS SAM CLI:
23     https://github.com/awslabs/aws-sam-cli/blob/develop/samcli/commands/validate/lib/sam_template_validator.py
24     """
25 
26     def __init__(self, filename, template, region):
27         """
28         Initialize Transform class
29         """
30         self._filename = filename
31         self._template = template
32         self._region = region
33         self._parameters = {}
34 
35         self._managed_policy_map = self.load_managed_policies()
36         self._sam_parser = parser.Parser()
37 
38     def template(self):
39         """Get the template"""
40         return self._template
41 
42     def load_managed_policies(self):
43         """
44         Load the ManagedPolicies locally, based on the AWS-CLI:
45         https://github.com/awslabs/aws-sam-cli/blob/develop/samcli/lib/samlib/default_managed_policies.json
46         """
47         return load_resource(Serverless, 'ManagedPolicies.json')
48 
49     def _replace_local_codeuri(self):
50         """
51         Replaces the CodeUri in AWS::Serverless::Function and DefinitionUri in
52         AWS::Serverless::Api to a fake S3 Uri. This is to support running the
53         SAM Translator with valid values for these fields. If this is not done,
54         the template is invalid in the eyes of SAM Translator (the translator
55         does not support local paths)
56         """
57 
58         all_resources = self._template.get('Resources', {})
59 
60         for _, resource in all_resources.items():
61 
62             resource_type = resource.get('Type')
63             resource_dict = resource.get('Properties')
64 
65             if resource_type == 'AWS::Serverless::Function':
66 
67                 Transform._update_to_s3_uri('CodeUri', resource_dict)
68                 auto_publish_alias = resource_dict.get('AutoPublishAlias')
69                 if isinstance(auto_publish_alias, dict):
70                     if len(auto_publish_alias) == 1:
71                         for k, v in auto_publish_alias.items():
72                             if k == 'Ref':
73                                 if v in self._template.get('Parameters'):
74                                     self._parameters[v] = 'Alias'
75             if resource_type in ['AWS::Serverless::LayerVersion']:
76                 if resource_dict.get('ContentUri'):
77                     Transform._update_to_s3_uri('ContentUri', resource_dict)
78             if resource_type == 'AWS::Serverless::Application':
79                 if resource_dict.get('Location'):
80                     resource_dict['Location'] = ''
81                     Transform._update_to_s3_uri('Location', resource_dict)
82             if resource_type == 'AWS::Serverless::Api':
83                 if ('DefinitionBody' not in resource_dict and
84                         'Auth' not in resource_dict and 'Cors' not in resource_dict):
85                     Transform._update_to_s3_uri('DefinitionUri', resource_dict)
86                 else:
87                     resource_dict['DefinitionBody'] = ''
88             if resource_type == 'AWS::Serverless::StateMachine' and resource_dict.get('DefinitionUri'):
89                 Transform._update_to_s3_uri('DefinitionUri', resource_dict)
90 
91     def transform_template(self):
92         """
93         Transform the Template using the Serverless Application Model.
94         """
95         matches = []
96 
97         try:
98             # Output the SAM Translator version in debug mode
99             LOGGER.info('SAM Translator: %s', samtranslator.__version__)
100 
101             sam_translator = Translator(
102                 managed_policy_map=self._managed_policy_map,
103                 sam_parser=self._sam_parser)
104 
105             self._replace_local_codeuri()
106 
107             # Tell SAM to use the region we're linting in, this has to be
108             # controlled using the default AWS mechanisms, see also:
109             # https://github.com/awslabs/serverless-application-model/blob/master/samtranslator/translator/arn_generator.py
110             LOGGER.info('Setting AWS_DEFAULT_REGION to %s', self._region)
111             os.environ['AWS_DEFAULT_REGION'] = self._region
112 
113             self._template = convert_dict(
114                 sam_translator.translate(sam_template=self._template,
115                                          parameter_values=self._parameters))
116 
117             LOGGER.info('Transformed template: \n%s',
118                         format_json_string(self._template))
119         except InvalidDocumentException as e:
120             message = 'Error transforming template: {0}'
121             for cause in e.causes:
122                 matches.append(Match(
123                     1, 1,
124                     1, 1,
125                     self._filename,
126                     TransformError(), message.format(cause.message)))
127         except Exception as e:  # pylint: disable=W0703
128             LOGGER.debug('Error transforming template: %s', str(e))
129             LOGGER.debug('Stack trace: %s', e, exc_info=True)
130             message = 'Error transforming template: {0}'
131             matches.append(Match(
132                 1, 1,
133                 1, 1,
134                 self._filename,
135                 TransformError(), message.format(str(e))))
136 
137         return matches
138 
139     @staticmethod
140     def is_s3_uri(uri):
141         """
142         Checks the uri and determines if it is a valid S3 Uri
143         Parameters
144         ----------
145         uri str, required
146             Uri to check
147         Returns
148         -------
149         bool
150             Returns True if the uri given is an S3 uri, otherwise False
151         """
152         return isinstance(uri, six.string_types) and uri.startswith('s3://')
153 
154     @staticmethod
155     def _update_to_s3_uri(
156             property_key, resource_property_dict,
157             s3_uri_value='s3://bucket/value'):
158         """
159         Updates the 'property_key' in the 'resource_property_dict' to the
160         value of 's3_uri_value'
161         Note: The function will mutate the resource_property_dict that is pass
162         in Parameters
163         ----------
164         property_key str, required
165             Key in the resource_property_dict
166         resource_property_dict dict, required
167             Property dictionary of a Resource in the template to replace
168         s3_uri_value str, optional
169             Value to update the value of the property_key to
170         """
171         uri_property = resource_property_dict.get(property_key, '.')
172 
173         # ignore if dict or already an S3 Uri
174         if isinstance(uri_property, dict) or Transform.is_s3_uri(uri_property):
175             return
176 
177         resource_property_dict[property_key] = s3_uri_value
178
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/src/cfnlint/transform.py b/src/cfnlint/transform.py
--- a/src/cfnlint/transform.py
+++ b/src/cfnlint/transform.py
@@ -57,6 +57,16 @@
 
         all_resources = self._template.get('Resources', {})
 
+        template_globals = self._template.get('Globals', {})
+        auto_publish_alias = template_globals.get('Function', {}).get('AutoPublishAlias')
+        if isinstance(auto_publish_alias, dict):
+            if len(auto_publish_alias) == 1:
+                for k, v in auto_publish_alias.items():
+                    if k == 'Ref':
+                        if v in self._template.get('Parameters'):
+                            self._parameters[v] = 'Alias'
+
+
         for _, resource in all_resources.items():
 
             resource_type = resource.get('Type')

{"golden_diff": "diff --git a/src/cfnlint/transform.py b/src/cfnlint/transform.py\n--- a/src/cfnlint/transform.py\n+++ b/src/cfnlint/transform.py\n@@ -57,6 +57,16 @@\n \n         all_resources = self._template.get('Resources', {})\n \n+        template_globals = self._template.get('Globals', {})\n+        auto_publish_alias = template_globals.get('Function', {}).get('AutoPublishAlias')\n+        if isinstance(auto_publish_alias, dict):\n+            if len(auto_publish_alias) == 1:\n+                for k, v in auto_publish_alias.items():\n+                    if k == 'Ref':\n+                        if v in self._template.get('Parameters'):\n+                            self._parameters[v] = 'Alias'\n+\n+\n         for _, resource in all_resources.items():\n \n             resource_type = resource.get('Type')\n", "issue": "AutoPublishAlias property in Globals section throws E0001\n*cfn-lint version: (`cfn-lint --version`)*\r\n`cfn-lint 0.34.0`\r\n\r\n*Description of issue.*\r\n`AutoPublishAlias` in `Globals` section, referencing template parameter throws [`E0001`](https://github.com/aws-cloudformation/cfn-python-lint/blob/master/docs/rules.md#E0001)\r\nHaving the same parameter in Function resource passes ok.\r\n\r\n```\r\nTransform: AWS::Serverless-2016-10-31\r\nParameters:\r\n  Stage:\r\n    Type: String\r\nGlobals:\r\n  Function:\r\n    Runtime: python3.8\r\n    AutoPublishAlias: !Ref Stage\r\nResources:\r\n  TestFunction:\r\n    Type: AWS::Serverless::Function\r\n    Properties:\r\n      # AutoPublishAlias: !Ref Stage\r\n      CodeUri: ..\r\n      Handler: src.test.lambda_handler\r\n```\r\n`[cfn-lint] E0001: Error transforming template: Resource with id [TestFunction] is invalid. 'AutoPublishAlias' must be a string or a Ref to a template parameter`\n", "before_files": [{"content": "\"\"\"\nCopyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\nSPDX-License-Identifier: MIT-0\n\"\"\"\nimport os\nimport logging\nimport six\nimport samtranslator\nfrom samtranslator.parser import parser\nfrom samtranslator.translator.translator import Translator\nfrom samtranslator.public.exceptions import InvalidDocumentException\n\nfrom cfnlint.helpers import load_resource, convert_dict, format_json_string\nfrom cfnlint.data import Serverless\nfrom cfnlint.rules import Match, TransformError\nLOGGER = logging.getLogger('cfnlint')\n\n\nclass Transform(object):\n    \"\"\"\n    Application Serverless Module tranform Wrapper.\n    Based on code from AWS SAM CLI:\n    https://github.com/awslabs/aws-sam-cli/blob/develop/samcli/commands/validate/lib/sam_template_validator.py\n    \"\"\"\n\n    def __init__(self, filename, template, region):\n        \"\"\"\n        Initialize Transform class\n        \"\"\"\n        self._filename = filename\n        self._template = template\n        self._region = region\n        self._parameters = {}\n\n        self._managed_policy_map = self.load_managed_policies()\n        self._sam_parser = parser.Parser()\n\n    def template(self):\n        \"\"\"Get the template\"\"\"\n        return self._template\n\n    def load_managed_policies(self):\n        \"\"\"\n        Load the ManagedPolicies locally, based on the AWS-CLI:\n        https://github.com/awslabs/aws-sam-cli/blob/develop/samcli/lib/samlib/default_managed_policies.json\n        \"\"\"\n        return load_resource(Serverless, 'ManagedPolicies.json')\n\n    def _replace_local_codeuri(self):\n        \"\"\"\n        Replaces the CodeUri in AWS::Serverless::Function and DefinitionUri in\n        AWS::Serverless::Api to a fake S3 Uri. This is to support running the\n        SAM Translator with valid values for these fields. If this is not done,\n        the template is invalid in the eyes of SAM Translator (the translator\n        does not support local paths)\n        \"\"\"\n\n        all_resources = self._template.get('Resources', {})\n\n        for _, resource in all_resources.items():\n\n            resource_type = resource.get('Type')\n            resource_dict = resource.get('Properties')\n\n            if resource_type == 'AWS::Serverless::Function':\n\n                Transform._update_to_s3_uri('CodeUri', resource_dict)\n                auto_publish_alias = resource_dict.get('AutoPublishAlias')\n                if isinstance(auto_publish_alias, dict):\n                    if len(auto_publish_alias) == 1:\n                        for k, v in auto_publish_alias.items():\n                            if k == 'Ref':\n                                if v in self._template.get('Parameters'):\n                                    self._parameters[v] = 'Alias'\n            if resource_type in ['AWS::Serverless::LayerVersion']:\n                if resource_dict.get('ContentUri'):\n                    Transform._update_to_s3_uri('ContentUri', resource_dict)\n            if resource_type == 'AWS::Serverless::Application':\n                if resource_dict.get('Location'):\n                    resource_dict['Location'] = ''\n                    Transform._update_to_s3_uri('Location', resource_dict)\n            if resource_type == 'AWS::Serverless::Api':\n                if ('DefinitionBody' not in resource_dict and\n                        'Auth' not in resource_dict and 'Cors' not in resource_dict):\n                    Transform._update_to_s3_uri('DefinitionUri', resource_dict)\n                else:\n                    resource_dict['DefinitionBody'] = ''\n            if resource_type == 'AWS::Serverless::StateMachine' and resource_dict.get('DefinitionUri'):\n                Transform._update_to_s3_uri('DefinitionUri', resource_dict)\n\n    def transform_template(self):\n        \"\"\"\n        Transform the Template using the Serverless Application Model.\n        \"\"\"\n        matches = []\n\n        try:\n            # Output the SAM Translator version in debug mode\n            LOGGER.info('SAM Translator: %s', samtranslator.__version__)\n\n            sam_translator = Translator(\n                managed_policy_map=self._managed_policy_map,\n                sam_parser=self._sam_parser)\n\n            self._replace_local_codeuri()\n\n            # Tell SAM to use the region we're linting in, this has to be\n            # controlled using the default AWS mechanisms, see also:\n            # https://github.com/awslabs/serverless-application-model/blob/master/samtranslator/translator/arn_generator.py\n            LOGGER.info('Setting AWS_DEFAULT_REGION to %s', self._region)\n            os.environ['AWS_DEFAULT_REGION'] = self._region\n\n            self._template = convert_dict(\n                sam_translator.translate(sam_template=self._template,\n                                         parameter_values=self._parameters))\n\n            LOGGER.info('Transformed template: \\n%s',\n                        format_json_string(self._template))\n        except InvalidDocumentException as e:\n            message = 'Error transforming template: {0}'\n            for cause in e.causes:\n                matches.append(Match(\n                    1, 1,\n                    1, 1,\n                    self._filename,\n                    TransformError(), message.format(cause.message)))\n        except Exception as e:  # pylint: disable=W0703\n            LOGGER.debug('Error transforming template: %s', str(e))\n            LOGGER.debug('Stack trace: %s', e, exc_info=True)\n            message = 'Error transforming template: {0}'\n            matches.append(Match(\n                1, 1,\n                1, 1,\n                self._filename,\n                TransformError(), message.format(str(e))))\n\n        return matches\n\n    @staticmethod\n    def is_s3_uri(uri):\n        \"\"\"\n        Checks the uri and determines if it is a valid S3 Uri\n        Parameters\n        ----------\n        uri str, required\n            Uri to check\n        Returns\n        -------\n        bool\n            Returns True if the uri given is an S3 uri, otherwise False\n        \"\"\"\n        return isinstance(uri, six.string_types) and uri.startswith('s3://')\n\n    @staticmethod\n    def _update_to_s3_uri(\n            property_key, resource_property_dict,\n            s3_uri_value='s3://bucket/value'):\n        \"\"\"\n        Updates the 'property_key' in the 'resource_property_dict' to the\n        value of 's3_uri_value'\n        Note: The function will mutate the resource_property_dict that is pass\n        in Parameters\n        ----------\n        property_key str, required\n            Key in the resource_property_dict\n        resource_property_dict dict, required\n            Property dictionary of a Resource in the template to replace\n        s3_uri_value str, optional\n            Value to update the value of the property_key to\n        \"\"\"\n        uri_property = resource_property_dict.get(property_key, '.')\n\n        # ignore if dict or already an S3 Uri\n        if isinstance(uri_property, dict) or Transform.is_s3_uri(uri_property):\n            return\n\n        resource_property_dict[property_key] = s3_uri_value\n", "path": "src/cfnlint/transform.py"}], "after_files": [{"content": "\"\"\"\nCopyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\nSPDX-License-Identifier: MIT-0\n\"\"\"\nimport os\nimport logging\nimport six\nimport samtranslator\nfrom samtranslator.parser import parser\nfrom samtranslator.translator.translator import Translator\nfrom samtranslator.public.exceptions import InvalidDocumentException\n\nfrom cfnlint.helpers import load_resource, convert_dict, format_json_string\nfrom cfnlint.data import Serverless\nfrom cfnlint.rules import Match, TransformError\nLOGGER = logging.getLogger('cfnlint')\n\n\nclass Transform(object):\n    \"\"\"\n    Application Serverless Module tranform Wrapper.\n    Based on code from AWS SAM CLI:\n    https://github.com/awslabs/aws-sam-cli/blob/develop/samcli/commands/validate/lib/sam_template_validator.py\n    \"\"\"\n\n    def __init__(self, filename, template, region):\n        \"\"\"\n        Initialize Transform class\n        \"\"\"\n        self._filename = filename\n        self._template = template\n        self._region = region\n        self._parameters = {}\n\n        self._managed_policy_map = self.load_managed_policies()\n        self._sam_parser = parser.Parser()\n\n    def template(self):\n        \"\"\"Get the template\"\"\"\n        return self._template\n\n    def load_managed_policies(self):\n        \"\"\"\n        Load the ManagedPolicies locally, based on the AWS-CLI:\n        https://github.com/awslabs/aws-sam-cli/blob/develop/samcli/lib/samlib/default_managed_policies.json\n        \"\"\"\n        return load_resource(Serverless, 'ManagedPolicies.json')\n\n    def _replace_local_codeuri(self):\n        \"\"\"\n        Replaces the CodeUri in AWS::Serverless::Function and DefinitionUri in\n        AWS::Serverless::Api to a fake S3 Uri. This is to support running the\n        SAM Translator with valid values for these fields. If this is not done,\n        the template is invalid in the eyes of SAM Translator (the translator\n        does not support local paths)\n        \"\"\"\n\n        all_resources = self._template.get('Resources', {})\n\n        template_globals = self._template.get('Globals', {})\n        auto_publish_alias = template_globals.get('Function', {}).get('AutoPublishAlias')\n        if isinstance(auto_publish_alias, dict):\n            if len(auto_publish_alias) == 1:\n                for k, v in auto_publish_alias.items():\n                    if k == 'Ref':\n                        if v in self._template.get('Parameters'):\n                            self._parameters[v] = 'Alias'\n\n\n        for _, resource in all_resources.items():\n\n            resource_type = resource.get('Type')\n            resource_dict = resource.get('Properties')\n\n            if resource_type == 'AWS::Serverless::Function':\n\n                Transform._update_to_s3_uri('CodeUri', resource_dict)\n                auto_publish_alias = resource_dict.get('AutoPublishAlias')\n                if isinstance(auto_publish_alias, dict):\n                    if len(auto_publish_alias) == 1:\n                        for k, v in auto_publish_alias.items():\n                            if k == 'Ref':\n                                if v in self._template.get('Parameters'):\n                                    self._parameters[v] = 'Alias'\n            if resource_type in ['AWS::Serverless::LayerVersion']:\n                if resource_dict.get('ContentUri'):\n                    Transform._update_to_s3_uri('ContentUri', resource_dict)\n            if resource_type == 'AWS::Serverless::Application':\n                if resource_dict.get('Location'):\n                    resource_dict['Location'] = ''\n                    Transform._update_to_s3_uri('Location', resource_dict)\n            if resource_type == 'AWS::Serverless::Api':\n                if ('DefinitionBody' not in resource_dict and\n                        'Auth' not in resource_dict and 'Cors' not in resource_dict):\n                    Transform._update_to_s3_uri('DefinitionUri', resource_dict)\n                else:\n                    resource_dict['DefinitionBody'] = ''\n            if resource_type == 'AWS::Serverless::StateMachine' and resource_dict.get('DefinitionUri'):\n                Transform._update_to_s3_uri('DefinitionUri', resource_dict)\n\n    def transform_template(self):\n        \"\"\"\n        Transform the Template using the Serverless Application Model.\n        \"\"\"\n        matches = []\n\n        try:\n            # Output the SAM Translator version in debug mode\n            LOGGER.info('SAM Translator: %s', samtranslator.__version__)\n\n            sam_translator = Translator(\n                managed_policy_map=self._managed_policy_map,\n                sam_parser=self._sam_parser)\n\n            self._replace_local_codeuri()\n\n            # Tell SAM to use the region we're linting in, this has to be\n            # controlled using the default AWS mechanisms, see also:\n            # https://github.com/awslabs/serverless-application-model/blob/master/samtranslator/translator/arn_generator.py\n            LOGGER.info('Setting AWS_DEFAULT_REGION to %s', self._region)\n            os.environ['AWS_DEFAULT_REGION'] = self._region\n\n            self._template = convert_dict(\n                sam_translator.translate(sam_template=self._template,\n                                         parameter_values=self._parameters))\n\n            LOGGER.info('Transformed template: \\n%s',\n                        format_json_string(self._template))\n        except InvalidDocumentException as e:\n            message = 'Error transforming template: {0}'\n            for cause in e.causes:\n                matches.append(Match(\n                    1, 1,\n                    1, 1,\n                    self._filename,\n                    TransformError(), message.format(cause.message)))\n        except Exception as e:  # pylint: disable=W0703\n            LOGGER.debug('Error transforming template: %s', str(e))\n            LOGGER.debug('Stack trace: %s', e, exc_info=True)\n            message = 'Error transforming template: {0}'\n            matches.append(Match(\n                1, 1,\n                1, 1,\n                self._filename,\n                TransformError(), message.format(str(e))))\n\n        return matches\n\n    @staticmethod\n    def is_s3_uri(uri):\n        \"\"\"\n        Checks the uri and determines if it is a valid S3 Uri\n        Parameters\n        ----------\n        uri str, required\n            Uri to check\n        Returns\n        -------\n        bool\n            Returns True if the uri given is an S3 uri, otherwise False\n        \"\"\"\n        return isinstance(uri, six.string_types) and uri.startswith('s3://')\n\n    @staticmethod\n    def _update_to_s3_uri(\n            property_key, resource_property_dict,\n            s3_uri_value='s3://bucket/value'):\n        \"\"\"\n        Updates the 'property_key' in the 'resource_property_dict' to the\n        value of 's3_uri_value'\n        Note: The function will mutate the resource_property_dict that is pass\n        in Parameters\n        ----------\n        property_key str, required\n            Key in the resource_property_dict\n        resource_property_dict dict, required\n            Property dictionary of a Resource in the template to replace\n        s3_uri_value str, optional\n            Value to update the value of the property_key to\n        \"\"\"\n        uri_property = resource_property_dict.get(property_key, '.')\n\n        # ignore if dict or already an S3 Uri\n        if isinstance(uri_property, dict) or Transform.is_s3_uri(uri_property):\n            return\n\n        resource_property_dict[property_key] = s3_uri_value\n", "path": "src/cfnlint/transform.py"}]}