We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Add Lambda Environment variable name validation
Lambda Env variables names are limited to `[a-zA-Z][a-zA-Z0-9_]+`. There is also a set of variable names that are reserved. Currently tropo does not validate the names. 

I can provide a PR for that soon.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `troposphere/awslambda.py`
Content:
```
1 from . import AWSObject, AWSProperty, Join, Tags
2 from .validators import positive_integer
3 
4 MEMORY_VALUES = [x for x in range(128, 3009, 64)]
5 
6 
7 def validate_memory_size(memory_value):
8     """ Validate memory size for Lambda Function
9     :param memory_value: The memory size specified in the Function
10     :return: The provided memory size if it is valid
11     """
12     memory_value = int(positive_integer(memory_value))
13     if memory_value not in MEMORY_VALUES:
14         raise ValueError("Lambda Function memory size must be one of:\n %s" %
15                          ", ".join(str(mb) for mb in MEMORY_VALUES))
16     return memory_value
17 
18 
19 class Code(AWSProperty):
20     props = {
21         'S3Bucket': (basestring, False),
22         'S3Key': (basestring, False),
23         'S3ObjectVersion': (basestring, False),
24         'ZipFile': (basestring, False)
25     }
26 
27     @staticmethod
28     def check_zip_file(zip_file):
29         maxlength = 4096
30         toolong = (
31             "ZipFile length cannot exceed %d characters. For larger "
32             "source use S3Bucket/S3Key properties instead. "
33             "Current length: %d"
34         )
35 
36         if zip_file is None:
37             return
38 
39         if isinstance(zip_file, basestring):
40             z_length = len(zip_file)
41             if z_length > maxlength:
42                 raise ValueError(toolong % (maxlength, z_length))
43             return
44 
45         if isinstance(zip_file, Join):
46             # This code tries to combine the length of all the strings in a
47             # join. If a part is not a string, we do not count it (length 0).
48             delimiter, values = zip_file.data['Fn::Join']
49 
50             # Return if there are no values to join
51             if not values or len(values) <= 0:
52                 return
53 
54             # Get the length of the delimiter
55             if isinstance(delimiter, basestring):
56                 d_length = len(delimiter)
57             else:
58                 d_length = 0
59 
60             # Get the length of each value that will be joined
61             v_lengths = [len(v) for v in values if isinstance(v, basestring)]
62 
63             # Add all the lengths together
64             z_length = sum(v_lengths)
65             z_length += (len(values)-1) * d_length
66 
67             if z_length > maxlength:
68                 raise ValueError(toolong % (maxlength, z_length))
69             return
70 
71     def validate(self):
72         zip_file = self.properties.get('ZipFile')
73         s3_bucket = self.properties.get('S3Bucket')
74         s3_key = self.properties.get('S3Key')
75         s3_object_version = self.properties.get('S3ObjectVersion')
76 
77         if zip_file and s3_bucket:
78             raise ValueError("You can't specify both 'S3Bucket' and 'ZipFile'")
79         if zip_file and s3_key:
80             raise ValueError("You can't specify both 'S3Key' and 'ZipFile'")
81         if zip_file and s3_object_version:
82             raise ValueError(
83                 "You can't specify both 'S3ObjectVersion' and 'ZipFile'"
84             )
85         Code.check_zip_file(zip_file)
86         if not zip_file and not (s3_bucket and s3_key):
87             raise ValueError(
88                 "You must specify a bucket location (both the 'S3Bucket' and "
89                 "'S3Key' properties) or the 'ZipFile' property"
90             )
91 
92 
93 class VPCConfig(AWSProperty):
94 
95     props = {
96         'SecurityGroupIds': (list, True),
97         'SubnetIds': (list, True),
98     }
99 
100 
101 class EventSourceMapping(AWSObject):
102     resource_type = "AWS::Lambda::EventSourceMapping"
103 
104     props = {
105         'BatchSize': (positive_integer, False),
106         'Enabled': (bool, False),
107         'EventSourceArn': (basestring, True),
108         'FunctionName': (basestring, True),
109         'StartingPosition': (basestring, False),
110     }
111 
112 
113 class DeadLetterConfig(AWSProperty):
114 
115     props = {
116         'TargetArn': (basestring, False),
117     }
118 
119 
120 class Environment(AWSProperty):
121 
122     props = {
123         'Variables': (dict, True),
124     }
125 
126 
127 class TracingConfig(AWSProperty):
128 
129     props = {
130         'Mode': (basestring, False),
131     }
132 
133 
134 class Function(AWSObject):
135     resource_type = "AWS::Lambda::Function"
136 
137     props = {
138         'Code': (Code, True),
139         'Description': (basestring, False),
140         'DeadLetterConfig': (DeadLetterConfig, False),
141         'Environment': (Environment, False),
142         'FunctionName': (basestring, False),
143         'Handler': (basestring, True),
144         'KmsKeyArn': (basestring, False),
145         'MemorySize': (validate_memory_size, False),
146         'ReservedConcurrentExecutions': (positive_integer, False),
147         'Role': (basestring, True),
148         'Runtime': (basestring, True),
149         'Tags': (Tags, False),
150         'Timeout': (positive_integer, False),
151         'TracingConfig': (TracingConfig, False),
152         'VpcConfig': (VPCConfig, False),
153     }
154 
155 
156 class Permission(AWSObject):
157     resource_type = "AWS::Lambda::Permission"
158 
159     props = {
160         'Action': (basestring, True),
161         'EventSourceToken': (basestring, False),
162         'FunctionName': (basestring, True),
163         'Principal': (basestring, True),
164         'SourceAccount': (basestring, False),
165         'SourceArn': (basestring, False),
166     }
167 
168 
169 class VersionWeight(AWSProperty):
170 
171     props = {
172         'FunctionVersion': (basestring, True),
173         'FunctionWeight': (float, True),
174     }
175 
176 
177 class AliasRoutingConfiguration(AWSProperty):
178 
179     props = {
180         'AdditionalVersionWeights': ([VersionWeight], True),
181     }
182 
183 
184 class Alias(AWSObject):
185     resource_type = "AWS::Lambda::Alias"
186 
187     props = {
188         'Description': (basestring, False),
189         'FunctionName': (basestring, True),
190         'FunctionVersion': (basestring, True),
191         'Name': (basestring, True),
192         'RoutingConfig': (AliasRoutingConfiguration, False),
193     }
194 
195 
196 class Version(AWSObject):
197     resource_type = "AWS::Lambda::Version"
198 
199     props = {
200         'CodeSha256': (basestring, False),
201         'Description': (basestring, False),
202         'FunctionName': (basestring, True),
203     }
204
```
--- 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/troposphere/awslambda.py b/troposphere/awslambda.py
--- a/troposphere/awslambda.py
+++ b/troposphere/awslambda.py
@@ -1,7 +1,33 @@
+import re
 from . import AWSObject, AWSProperty, Join, Tags
 from .validators import positive_integer
 
 MEMORY_VALUES = [x for x in range(128, 3009, 64)]
+RESERVED_ENVIRONMENT_VARIABLES = [
+    'AWS_ACCESS_KEY',
+    'AWS_ACCESS_KEY_ID',
+    'AWS_DEFAULT_REGION',
+    'AWS_EXECUTION_ENV',
+    'AWS_LAMBDA_FUNCTION_MEMORY_SIZE',
+    'AWS_LAMBDA_FUNCTION_NAME',
+    'AWS_LAMBDA_FUNCTION_VERSION',
+    'AWS_LAMBDA_LOG_GROUP_NAME',
+    'AWS_LAMBDA_LOG_STREAM_NAME',
+    'AWS_REGION',
+    'AWS_SECRET_ACCESS_KEY',
+    'AWS_SECRET_KEY',
+    'AWS_SECURITY_TOKEN',
+    'AWS_SESSION_TOKEN',
+    'LAMBDA_RUNTIME_DIR',
+    'LAMBDA_TASK_ROOT',
+    'LANG',
+    'LD_LIBRARY_PATH',
+    'NODE_PATH',
+    'PATH',
+    'PYTHONPATH',
+    'TZ'
+]
+ENVIRONMENT_VARIABLES_NAME_PATTERN = r'[a-zA-Z][a-zA-Z0-9_]+'
 
 
 def validate_memory_size(memory_value):
@@ -16,6 +42,18 @@
     return memory_value
 
 
+def validate_variables_name(variables):
+    for name in variables:
+        if name in RESERVED_ENVIRONMENT_VARIABLES:
+            raise ValueError("Lambda Function environment variables names"
+                             " can't be none of:\n %s" %
+                             ", ".join(RESERVED_ENVIRONMENT_VARIABLES))
+        elif not re.match(ENVIRONMENT_VARIABLES_NAME_PATTERN, name):
+            raise ValueError("Invalid environment variable name: %s" % name)
+
+    return variables
+
+
 class Code(AWSProperty):
     props = {
         'S3Bucket': (basestring, False),
@@ -120,7 +158,7 @@
 class Environment(AWSProperty):
 
     props = {
-        'Variables': (dict, True),
+        'Variables': (validate_variables_name, True),
     }

{"golden_diff": "diff --git a/troposphere/awslambda.py b/troposphere/awslambda.py\n--- a/troposphere/awslambda.py\n+++ b/troposphere/awslambda.py\n@@ -1,7 +1,33 @@\n+import re\n from . import AWSObject, AWSProperty, Join, Tags\n from .validators import positive_integer\n \n MEMORY_VALUES = [x for x in range(128, 3009, 64)]\n+RESERVED_ENVIRONMENT_VARIABLES = [\n+    'AWS_ACCESS_KEY',\n+    'AWS_ACCESS_KEY_ID',\n+    'AWS_DEFAULT_REGION',\n+    'AWS_EXECUTION_ENV',\n+    'AWS_LAMBDA_FUNCTION_MEMORY_SIZE',\n+    'AWS_LAMBDA_FUNCTION_NAME',\n+    'AWS_LAMBDA_FUNCTION_VERSION',\n+    'AWS_LAMBDA_LOG_GROUP_NAME',\n+    'AWS_LAMBDA_LOG_STREAM_NAME',\n+    'AWS_REGION',\n+    'AWS_SECRET_ACCESS_KEY',\n+    'AWS_SECRET_KEY',\n+    'AWS_SECURITY_TOKEN',\n+    'AWS_SESSION_TOKEN',\n+    'LAMBDA_RUNTIME_DIR',\n+    'LAMBDA_TASK_ROOT',\n+    'LANG',\n+    'LD_LIBRARY_PATH',\n+    'NODE_PATH',\n+    'PATH',\n+    'PYTHONPATH',\n+    'TZ'\n+]\n+ENVIRONMENT_VARIABLES_NAME_PATTERN = r'[a-zA-Z][a-zA-Z0-9_]+'\n \n \n def validate_memory_size(memory_value):\n@@ -16,6 +42,18 @@\n     return memory_value\n \n \n+def validate_variables_name(variables):\n+    for name in variables:\n+        if name in RESERVED_ENVIRONMENT_VARIABLES:\n+            raise ValueError(\"Lambda Function environment variables names\"\n+                             \" can't be none of:\\n %s\" %\n+                             \", \".join(RESERVED_ENVIRONMENT_VARIABLES))\n+        elif not re.match(ENVIRONMENT_VARIABLES_NAME_PATTERN, name):\n+            raise ValueError(\"Invalid environment variable name: %s\" % name)\n+\n+    return variables\n+\n+\n class Code(AWSProperty):\n     props = {\n         'S3Bucket': (basestring, False),\n@@ -120,7 +158,7 @@\n class Environment(AWSProperty):\n \n     props = {\n-        'Variables': (dict, True),\n+        'Variables': (validate_variables_name, True),\n     }\n", "issue": "Add Lambda Environment variable name validation\nLambda Env variables names are limited to `[a-zA-Z][a-zA-Z0-9_]+`. There is also a set of variable names that are reserved. Currently tropo does not validate the names. \r\n\r\nI can provide a PR for that soon.\n", "before_files": [{"content": "from . import AWSObject, AWSProperty, Join, Tags\nfrom .validators import positive_integer\n\nMEMORY_VALUES = [x for x in range(128, 3009, 64)]\n\n\ndef validate_memory_size(memory_value):\n    \"\"\" Validate memory size for Lambda Function\n    :param memory_value: The memory size specified in the Function\n    :return: The provided memory size if it is valid\n    \"\"\"\n    memory_value = int(positive_integer(memory_value))\n    if memory_value not in MEMORY_VALUES:\n        raise ValueError(\"Lambda Function memory size must be one of:\\n %s\" %\n                         \", \".join(str(mb) for mb in MEMORY_VALUES))\n    return memory_value\n\n\nclass Code(AWSProperty):\n    props = {\n        'S3Bucket': (basestring, False),\n        'S3Key': (basestring, False),\n        'S3ObjectVersion': (basestring, False),\n        'ZipFile': (basestring, False)\n    }\n\n    @staticmethod\n    def check_zip_file(zip_file):\n        maxlength = 4096\n        toolong = (\n            \"ZipFile length cannot exceed %d characters. For larger \"\n            \"source use S3Bucket/S3Key properties instead. \"\n            \"Current length: %d\"\n        )\n\n        if zip_file is None:\n            return\n\n        if isinstance(zip_file, basestring):\n            z_length = len(zip_file)\n            if z_length > maxlength:\n                raise ValueError(toolong % (maxlength, z_length))\n            return\n\n        if isinstance(zip_file, Join):\n            # This code tries to combine the length of all the strings in a\n            # join. If a part is not a string, we do not count it (length 0).\n            delimiter, values = zip_file.data['Fn::Join']\n\n            # Return if there are no values to join\n            if not values or len(values) <= 0:\n                return\n\n            # Get the length of the delimiter\n            if isinstance(delimiter, basestring):\n                d_length = len(delimiter)\n            else:\n                d_length = 0\n\n            # Get the length of each value that will be joined\n            v_lengths = [len(v) for v in values if isinstance(v, basestring)]\n\n            # Add all the lengths together\n            z_length = sum(v_lengths)\n            z_length += (len(values)-1) * d_length\n\n            if z_length > maxlength:\n                raise ValueError(toolong % (maxlength, z_length))\n            return\n\n    def validate(self):\n        zip_file = self.properties.get('ZipFile')\n        s3_bucket = self.properties.get('S3Bucket')\n        s3_key = self.properties.get('S3Key')\n        s3_object_version = self.properties.get('S3ObjectVersion')\n\n        if zip_file and s3_bucket:\n            raise ValueError(\"You can't specify both 'S3Bucket' and 'ZipFile'\")\n        if zip_file and s3_key:\n            raise ValueError(\"You can't specify both 'S3Key' and 'ZipFile'\")\n        if zip_file and s3_object_version:\n            raise ValueError(\n                \"You can't specify both 'S3ObjectVersion' and 'ZipFile'\"\n            )\n        Code.check_zip_file(zip_file)\n        if not zip_file and not (s3_bucket and s3_key):\n            raise ValueError(\n                \"You must specify a bucket location (both the 'S3Bucket' and \"\n                \"'S3Key' properties) or the 'ZipFile' property\"\n            )\n\n\nclass VPCConfig(AWSProperty):\n\n    props = {\n        'SecurityGroupIds': (list, True),\n        'SubnetIds': (list, True),\n    }\n\n\nclass EventSourceMapping(AWSObject):\n    resource_type = \"AWS::Lambda::EventSourceMapping\"\n\n    props = {\n        'BatchSize': (positive_integer, False),\n        'Enabled': (bool, False),\n        'EventSourceArn': (basestring, True),\n        'FunctionName': (basestring, True),\n        'StartingPosition': (basestring, False),\n    }\n\n\nclass DeadLetterConfig(AWSProperty):\n\n    props = {\n        'TargetArn': (basestring, False),\n    }\n\n\nclass Environment(AWSProperty):\n\n    props = {\n        'Variables': (dict, True),\n    }\n\n\nclass TracingConfig(AWSProperty):\n\n    props = {\n        'Mode': (basestring, False),\n    }\n\n\nclass Function(AWSObject):\n    resource_type = \"AWS::Lambda::Function\"\n\n    props = {\n        'Code': (Code, True),\n        'Description': (basestring, False),\n        'DeadLetterConfig': (DeadLetterConfig, False),\n        'Environment': (Environment, False),\n        'FunctionName': (basestring, False),\n        'Handler': (basestring, True),\n        'KmsKeyArn': (basestring, False),\n        'MemorySize': (validate_memory_size, False),\n        'ReservedConcurrentExecutions': (positive_integer, False),\n        'Role': (basestring, True),\n        'Runtime': (basestring, True),\n        'Tags': (Tags, False),\n        'Timeout': (positive_integer, False),\n        'TracingConfig': (TracingConfig, False),\n        'VpcConfig': (VPCConfig, False),\n    }\n\n\nclass Permission(AWSObject):\n    resource_type = \"AWS::Lambda::Permission\"\n\n    props = {\n        'Action': (basestring, True),\n        'EventSourceToken': (basestring, False),\n        'FunctionName': (basestring, True),\n        'Principal': (basestring, True),\n        'SourceAccount': (basestring, False),\n        'SourceArn': (basestring, False),\n    }\n\n\nclass VersionWeight(AWSProperty):\n\n    props = {\n        'FunctionVersion': (basestring, True),\n        'FunctionWeight': (float, True),\n    }\n\n\nclass AliasRoutingConfiguration(AWSProperty):\n\n    props = {\n        'AdditionalVersionWeights': ([VersionWeight], True),\n    }\n\n\nclass Alias(AWSObject):\n    resource_type = \"AWS::Lambda::Alias\"\n\n    props = {\n        'Description': (basestring, False),\n        'FunctionName': (basestring, True),\n        'FunctionVersion': (basestring, True),\n        'Name': (basestring, True),\n        'RoutingConfig': (AliasRoutingConfiguration, False),\n    }\n\n\nclass Version(AWSObject):\n    resource_type = \"AWS::Lambda::Version\"\n\n    props = {\n        'CodeSha256': (basestring, False),\n        'Description': (basestring, False),\n        'FunctionName': (basestring, True),\n    }\n", "path": "troposphere/awslambda.py"}], "after_files": [{"content": "import re\nfrom . import AWSObject, AWSProperty, Join, Tags\nfrom .validators import positive_integer\n\nMEMORY_VALUES = [x for x in range(128, 3009, 64)]\nRESERVED_ENVIRONMENT_VARIABLES = [\n    'AWS_ACCESS_KEY',\n    'AWS_ACCESS_KEY_ID',\n    'AWS_DEFAULT_REGION',\n    'AWS_EXECUTION_ENV',\n    'AWS_LAMBDA_FUNCTION_MEMORY_SIZE',\n    'AWS_LAMBDA_FUNCTION_NAME',\n    'AWS_LAMBDA_FUNCTION_VERSION',\n    'AWS_LAMBDA_LOG_GROUP_NAME',\n    'AWS_LAMBDA_LOG_STREAM_NAME',\n    'AWS_REGION',\n    'AWS_SECRET_ACCESS_KEY',\n    'AWS_SECRET_KEY',\n    'AWS_SECURITY_TOKEN',\n    'AWS_SESSION_TOKEN',\n    'LAMBDA_RUNTIME_DIR',\n    'LAMBDA_TASK_ROOT',\n    'LANG',\n    'LD_LIBRARY_PATH',\n    'NODE_PATH',\n    'PATH',\n    'PYTHONPATH',\n    'TZ'\n]\nENVIRONMENT_VARIABLES_NAME_PATTERN = r'[a-zA-Z][a-zA-Z0-9_]+'\n\n\ndef validate_memory_size(memory_value):\n    \"\"\" Validate memory size for Lambda Function\n    :param memory_value: The memory size specified in the Function\n    :return: The provided memory size if it is valid\n    \"\"\"\n    memory_value = int(positive_integer(memory_value))\n    if memory_value not in MEMORY_VALUES:\n        raise ValueError(\"Lambda Function memory size must be one of:\\n %s\" %\n                         \", \".join(str(mb) for mb in MEMORY_VALUES))\n    return memory_value\n\n\ndef validate_variables_name(variables):\n    for name in variables:\n        if name in RESERVED_ENVIRONMENT_VARIABLES:\n            raise ValueError(\"Lambda Function environment variables names\"\n                             \" can't be none of:\\n %s\" %\n                             \", \".join(RESERVED_ENVIRONMENT_VARIABLES))\n        elif not re.match(ENVIRONMENT_VARIABLES_NAME_PATTERN, name):\n            raise ValueError(\"Invalid environment variable name: %s\" % name)\n\n    return variables\n\n\nclass Code(AWSProperty):\n    props = {\n        'S3Bucket': (basestring, False),\n        'S3Key': (basestring, False),\n        'S3ObjectVersion': (basestring, False),\n        'ZipFile': (basestring, False)\n    }\n\n    @staticmethod\n    def check_zip_file(zip_file):\n        maxlength = 4096\n        toolong = (\n            \"ZipFile length cannot exceed %d characters. For larger \"\n            \"source use S3Bucket/S3Key properties instead. \"\n            \"Current length: %d\"\n        )\n\n        if zip_file is None:\n            return\n\n        if isinstance(zip_file, basestring):\n            z_length = len(zip_file)\n            if z_length > maxlength:\n                raise ValueError(toolong % (maxlength, z_length))\n            return\n\n        if isinstance(zip_file, Join):\n            # This code tries to combine the length of all the strings in a\n            # join. If a part is not a string, we do not count it (length 0).\n            delimiter, values = zip_file.data['Fn::Join']\n\n            # Return if there are no values to join\n            if not values or len(values) <= 0:\n                return\n\n            # Get the length of the delimiter\n            if isinstance(delimiter, basestring):\n                d_length = len(delimiter)\n            else:\n                d_length = 0\n\n            # Get the length of each value that will be joined\n            v_lengths = [len(v) for v in values if isinstance(v, basestring)]\n\n            # Add all the lengths together\n            z_length = sum(v_lengths)\n            z_length += (len(values)-1) * d_length\n\n            if z_length > maxlength:\n                raise ValueError(toolong % (maxlength, z_length))\n            return\n\n    def validate(self):\n        zip_file = self.properties.get('ZipFile')\n        s3_bucket = self.properties.get('S3Bucket')\n        s3_key = self.properties.get('S3Key')\n        s3_object_version = self.properties.get('S3ObjectVersion')\n\n        if zip_file and s3_bucket:\n            raise ValueError(\"You can't specify both 'S3Bucket' and 'ZipFile'\")\n        if zip_file and s3_key:\n            raise ValueError(\"You can't specify both 'S3Key' and 'ZipFile'\")\n        if zip_file and s3_object_version:\n            raise ValueError(\n                \"You can't specify both 'S3ObjectVersion' and 'ZipFile'\"\n            )\n        Code.check_zip_file(zip_file)\n        if not zip_file and not (s3_bucket and s3_key):\n            raise ValueError(\n                \"You must specify a bucket location (both the 'S3Bucket' and \"\n                \"'S3Key' properties) or the 'ZipFile' property\"\n            )\n\n\nclass VPCConfig(AWSProperty):\n\n    props = {\n        'SecurityGroupIds': (list, True),\n        'SubnetIds': (list, True),\n    }\n\n\nclass EventSourceMapping(AWSObject):\n    resource_type = \"AWS::Lambda::EventSourceMapping\"\n\n    props = {\n        'BatchSize': (positive_integer, False),\n        'Enabled': (bool, False),\n        'EventSourceArn': (basestring, True),\n        'FunctionName': (basestring, True),\n        'StartingPosition': (basestring, False),\n    }\n\n\nclass DeadLetterConfig(AWSProperty):\n\n    props = {\n        'TargetArn': (basestring, False),\n    }\n\n\nclass Environment(AWSProperty):\n\n    props = {\n        'Variables': (validate_variables_name, True),\n    }\n\n\nclass TracingConfig(AWSProperty):\n\n    props = {\n        'Mode': (basestring, False),\n    }\n\n\nclass Function(AWSObject):\n    resource_type = \"AWS::Lambda::Function\"\n\n    props = {\n        'Code': (Code, True),\n        'Description': (basestring, False),\n        'DeadLetterConfig': (DeadLetterConfig, False),\n        'Environment': (Environment, False),\n        'FunctionName': (basestring, False),\n        'Handler': (basestring, True),\n        'KmsKeyArn': (basestring, False),\n        'MemorySize': (validate_memory_size, False),\n        'ReservedConcurrentExecutions': (positive_integer, False),\n        'Role': (basestring, True),\n        'Runtime': (basestring, True),\n        'Tags': (Tags, False),\n        'Timeout': (positive_integer, False),\n        'TracingConfig': (TracingConfig, False),\n        'VpcConfig': (VPCConfig, False),\n    }\n\n\nclass Permission(AWSObject):\n    resource_type = \"AWS::Lambda::Permission\"\n\n    props = {\n        'Action': (basestring, True),\n        'EventSourceToken': (basestring, False),\n        'FunctionName': (basestring, True),\n        'Principal': (basestring, True),\n        'SourceAccount': (basestring, False),\n        'SourceArn': (basestring, False),\n    }\n\n\nclass VersionWeight(AWSProperty):\n\n    props = {\n        'FunctionVersion': (basestring, True),\n        'FunctionWeight': (float, True),\n    }\n\n\nclass AliasRoutingConfiguration(AWSProperty):\n\n    props = {\n        'AdditionalVersionWeights': ([VersionWeight], True),\n    }\n\n\nclass Alias(AWSObject):\n    resource_type = \"AWS::Lambda::Alias\"\n\n    props = {\n        'Description': (basestring, False),\n        'FunctionName': (basestring, True),\n        'FunctionVersion': (basestring, True),\n        'Name': (basestring, True),\n        'RoutingConfig': (AliasRoutingConfiguration, False),\n    }\n\n\nclass Version(AWSObject):\n    resource_type = \"AWS::Lambda::Version\"\n\n    props = {\n        'CodeSha256': (basestring, False),\n        'Description': (basestring, False),\n        'FunctionName': (basestring, True),\n    }\n", "path": "troposphere/awslambda.py"}]}