class DynamoDBTable(Resource): resource_type = 'AWS::DynamoDB::Table' property_types = { 'AttributeDefinitions': PropertyType(True, list_of(is_type(dict))), 'GlobalSecondaryIndexes': PropertyType(False, list_of(is_type(dict))), 'KeySchema': PropertyType(False, list_of(is_type(dict))), 'LocalSecondaryIndexes': PropertyType(False, list_of(is_type(dict))), 'ProvisionedThroughput': PropertyType(False, dict_of(is_str(), one_of(is_type(int), is_type(dict)))), 'StreamSpecification': PropertyType(False, is_type(dict)), 'TableName': PropertyType(False, one_of(is_str(), is_type(dict))), 'Tags': PropertyType(False, list_of(is_type(dict))), 'SSESpecification': PropertyType(False, is_type(dict)), 'BillingMode': PropertyType(False, is_str()) } runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn"), "stream_arn": lambda self: fnGetAtt(self.logical_id, "StreamArn") }
class CognitoUserPool(Resource): resource_type = "AWS::Cognito::UserPool" property_types = { "AdminCreateUserConfig": PropertyType(False, is_type(dict)), "AliasAttributes": PropertyType(False, list_of(is_str())), "AutoVerifiedAttributes": PropertyType(False, list_of(is_str())), "DeviceConfiguration": PropertyType(False, is_type(dict)), "EmailConfiguration": PropertyType(False, is_type(dict)), "EmailVerificationMessage": PropertyType(False, is_str()), "EmailVerificationSubject": PropertyType(False, is_str()), "LambdaConfig": PropertyType(False, is_type(dict)), "MfaConfiguration": PropertyType(False, is_str()), "Policies": PropertyType(False, is_type(dict)), "Schema": PropertyType(False, list_of(dict)), "SmsAuthenticationMessage": PropertyType(False, is_str()), "SmsConfiguration": PropertyType(False, list_of(dict)), "SmsVerificationMessage": PropertyType(False, is_str()), "UsernameAttributes": PropertyType(False, list_of(is_str())), "UserPoolAddOns": PropertyType(False, list_of(dict)), "UserPoolName": PropertyType(False, is_str()), "UserPoolTags": PropertyType(False, is_type(dict)), "VerificationMessageTemplate": PropertyType(False, is_type(dict)), } runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn"), "provider_name": lambda self: fnGetAtt(self.logical_id, "ProviderName"), "provider_url": lambda self: fnGetAtt(self.logical_id, "ProviderURL"), }
class CognitoUserPool(Resource): resource_type = 'AWS::Cognito::UserPool' property_types = { 'AdminCreateUserConfig': PropertyType(False, is_type(dict)), 'AliasAttributes': PropertyType(False, list_of(is_str())), 'AutoVerifiedAttributes': PropertyType(False, list_of(is_str())), 'DeviceConfiguration': PropertyType(False, is_type(dict)), 'EmailConfiguration': PropertyType(False, is_type(dict)), 'EmailVerificationMessage': PropertyType(False, is_str()), 'EmailVerificationSubject': PropertyType(False, is_str()), 'LambdaConfig': PropertyType(False, is_type(dict)), 'MfaConfiguration': PropertyType(False, is_str()), 'Policies': PropertyType(False, is_type(dict)), 'Schema': PropertyType(False, list_of(dict)), 'SmsAuthenticationMessage': PropertyType(False, is_str()), 'SmsConfiguration': PropertyType(False, list_of(dict)), 'SmsVerificationMessage': PropertyType(False, is_str()), 'UsernameAttributes': PropertyType(False, list_of(is_str())), 'UserPoolAddOns': PropertyType(False, list_of(dict)), 'UserPoolName': PropertyType(False, is_str()), 'UserPoolTags': PropertyType(False, is_str()), 'VerificationMessageTemplate': PropertyType(False, is_type(dict)) } runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn"), "provider_name": lambda self: fnGetAtt(self.logical_id, "ProviderName"), "provider_url": lambda self: fnGetAtt(self.logical_id, "ProviderURL") }
class S3Bucket(Resource): resource_type = 'AWS::S3::Bucket' property_types = { 'AccessControl': PropertyType(False, any_type()), 'AccelerateConfiguration': PropertyType(False, any_type()), 'AnalyticsConfigurations': PropertyType(False, any_type()), 'BucketEncryption': PropertyType(False, any_type()), 'BucketName': PropertyType(False, is_str()), 'CorsConfiguration': PropertyType(False, any_type()), 'InventoryConfigurations': PropertyType(False, any_type()), 'LifecycleConfiguration': PropertyType(False, any_type()), 'LoggingConfiguration': PropertyType(False, any_type()), 'MetricsConfigurations': PropertyType(False, any_type()), 'NotificationConfiguration': PropertyType(False, is_type(dict)), 'PublicAccessBlockConfiguration': PropertyType(False, is_type(dict)), 'ReplicationConfiguration': PropertyType(False, any_type()), 'Tags': PropertyType(False, is_type(list)), 'VersioningConfiguration': PropertyType(False, any_type()), 'WebsiteConfiguration': PropertyType(False, any_type()), } runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn") }
class LambdaFunction(Resource): resource_type = "AWS::Lambda::Function" property_types = { "Code": PropertyType(True, is_type(dict)), "PackageType": PropertyType(False, is_str()), "DeadLetterConfig": PropertyType(False, is_type(dict)), "Description": PropertyType(False, is_str()), "FunctionName": PropertyType(False, is_str()), "Handler": PropertyType(False, is_str()), "MemorySize": PropertyType(False, is_type(int)), "Role": PropertyType(False, is_str()), "Runtime": PropertyType(False, is_str()), "Timeout": PropertyType(False, is_type(int)), "VpcConfig": PropertyType(False, is_type(dict)), "Environment": PropertyType(False, is_type(dict)), "Tags": PropertyType(False, list_of(is_type(dict))), "TracingConfig": PropertyType(False, is_type(dict)), "KmsKeyArn": PropertyType(False, one_of(is_type(dict), is_str())), "Layers": PropertyType(False, list_of(one_of(is_str(), is_type(dict)))), "ReservedConcurrentExecutions": PropertyType(False, any_type()), "FileSystemConfigs": PropertyType(False, list_of(is_type(dict))), "CodeSigningConfigArn": PropertyType(False, is_str()), "ImageConfig": PropertyType(False, is_type(dict)), } runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn") }
class SQSQueuePolicy(Resource): resource_type = 'AWS::SQS::QueuePolicy' property_types = { 'PolicyDocument': PropertyType(True, is_type(dict)), 'Queues': PropertyType(True, list_of(str)), } runtime_attrs = {"arn": lambda self: fnGetAtt(self.logical_id, "Arn")}
class S3Bucket(Resource): resource_type = "AWS::S3::Bucket" property_types = { "AccessControl": PropertyType(False, any_type()), "AccelerateConfiguration": PropertyType(False, any_type()), "AnalyticsConfigurations": PropertyType(False, any_type()), "BucketEncryption": PropertyType(False, any_type()), "BucketName": PropertyType(False, is_str()), "CorsConfiguration": PropertyType(False, any_type()), "InventoryConfigurations": PropertyType(False, any_type()), "LifecycleConfiguration": PropertyType(False, any_type()), "LoggingConfiguration": PropertyType(False, any_type()), "MetricsConfigurations": PropertyType(False, any_type()), "NotificationConfiguration": PropertyType(False, is_type(dict)), "PublicAccessBlockConfiguration": PropertyType(False, is_type(dict)), "ReplicationConfiguration": PropertyType(False, any_type()), "Tags": PropertyType(False, is_type(list)), "VersioningConfiguration": PropertyType(False, any_type()), "WebsiteConfiguration": PropertyType(False, any_type()), } runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn") }
class LambdaFunction(Resource): resource_type = 'AWS::Lambda::Function' property_types = { 'Code': PropertyType(True, is_type(dict)), 'DeadLetterConfig': PropertyType(False, is_type(dict)), 'Description': PropertyType(False, is_str()), 'FunctionName': PropertyType(False, is_str()), 'Handler': PropertyType(True, is_str()), 'MemorySize': PropertyType(False, is_type(int)), 'Role': PropertyType(False, is_str()), 'Runtime': PropertyType(False, is_str()), 'Timeout': PropertyType(False, is_type(int)), 'VpcConfig': PropertyType(False, is_type(dict)), 'Environment': PropertyType(False, is_type(dict)), 'Tags': PropertyType(False, list_of(is_type(dict))), 'TracingConfig': PropertyType(False, is_type(dict)), 'KmsKeyArn': PropertyType(False, one_of(is_type(dict), is_str())), 'Layers': PropertyType(False, list_of(one_of(is_str(), is_type(dict)))), 'ReservedConcurrentExecutions': PropertyType(False, any_type()) } runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn") }
def _construct_alias_target(self, domain): alias_target = {} route53 = domain.get("Route53") target_health = route53.get("EvaluateTargetHealth") if target_health is not None: alias_target["EvaluateTargetHealth"] = target_health if domain.get("EndpointConfiguration") == "REGIONAL": alias_target["HostedZoneId"] = fnGetAtt(self.domain.get("ApiDomainName"), "RegionalHostedZoneId") alias_target["DNSName"] = fnGetAtt(self.domain.get("ApiDomainName"), "RegionalDomainName") else: if route53.get("DistributionDomainName") is None: route53["DistributionDomainName"] = fnGetAtt(self.domain.get("ApiDomainName"), "DistributionDomainName") alias_target["HostedZoneId"] = "Z2FDTNDATAQYW2" alias_target["DNSName"] = route53.get("DistributionDomainName") return alias_target
def _construct_alias_target(self, domain): alias_target = {} route53 = domain.get("Route53") target_health = route53.get("EvaluateTargetHealth") if target_health is not None: alias_target["EvaluateTargetHealth"] = target_health if domain.get("EndpointConfiguration") == "REGIONAL": alias_target["HostedZoneId"] = fnGetAtt(self.domain.get("ApiDomainName"), "RegionalHostedZoneId") alias_target["DNSName"] = fnGetAtt(self.domain.get("ApiDomainName"), "RegionalDomainName") else: raise InvalidResourceException( self.logical_id, "Only REGIONAL endpoint is supported on HTTP APIs.", ) return alias_target
class SQSQueue(Resource): resource_type = 'AWS::SQS::Queue' property_types = {} runtime_attrs = { "queue_url": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn"), }
class IotTopicRule(Resource): resource_type = 'AWS::IoT::TopicRule' property_types = {'TopicRulePayload': PropertyType(False, is_type(dict))} runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn") }
class DynamoDBTable(Resource): resource_type = "AWS::DynamoDB::Table" property_types = { "AttributeDefinitions": PropertyType(True, list_of(is_type(dict))), "GlobalSecondaryIndexes": PropertyType(False, list_of(is_type(dict))), "KeySchema": PropertyType(False, list_of(is_type(dict))), "LocalSecondaryIndexes": PropertyType(False, list_of(is_type(dict))), "ProvisionedThroughput": PropertyType(False, dict_of(is_str(), one_of(is_type(int), is_type(dict)))), "StreamSpecification": PropertyType(False, is_type(dict)), "TableName": PropertyType(False, one_of(is_str(), is_type(dict))), "Tags": PropertyType(False, list_of(is_type(dict))), "SSESpecification": PropertyType(False, is_type(dict)), "BillingMode": PropertyType(False, is_str()), } runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn"), "stream_arn": lambda self: fnGetAtt(self.logical_id, "StreamArn"), }
def _construct_alias_target(self, domain): alias_target = {} route53 = domain.get('Route53') target_health = route53.get('EvaluateTargetHealth') if target_health is not None: alias_target['EvaluateTargetHealth'] = target_health if domain.get('EndpointConfiguration') == 'REGIONAL': alias_target['HostedZoneId'] = fnGetAtt( self.domain.get('ApiDomainName'), 'RegionalHostedZoneId') alias_target['DNSName'] = fnGetAtt( self.domain.get('ApiDomainName'), 'RegionalDomainName') else: if route53.get('DistributionDomainName') is None: raise InvalidResourceException( self.logical_id, "Custom Domains support for EDGE requires the name " "of a Distribution resource") alias_target['HostedZoneId'] = 'Z2FDTNDATAQYW2' alias_target['DNSName'] = route53.get('DistributionDomainName') return alias_target
class LambdaVersion(Resource): resource_type = 'AWS::Lambda::Version' property_types = { 'CodeSha256': PropertyType(False, is_str()), 'Description': PropertyType(False, is_str()), 'FunctionName': PropertyType(True, one_of(is_str(), is_type(dict))) } runtime_attrs = { "arn": lambda self: ref(self.logical_id), "version": lambda self: fnGetAtt(self.logical_id, "Version") }
class SubscriptionFilter(Resource): resource_type = "AWS::Logs::SubscriptionFilter" property_types = { "LogGroupName": PropertyType(True, is_str()), "FilterPattern": PropertyType(True, is_str()), "DestinationArn": PropertyType(True, is_str()), } runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn") }
class IAMRole(Resource): resource_type = "AWS::IAM::Role" property_types = { "AssumeRolePolicyDocument": PropertyType(True, is_type(dict)), "ManagedPolicyArns": PropertyType(False, is_type(list)), "Path": PropertyType(False, is_str()), "Policies": PropertyType(False, is_type(list)), "PermissionsBoundary": PropertyType(False, is_str()), "Tags": PropertyType(False, list_of(is_type(dict))), } runtime_attrs = {"name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn")}
class IAMRole(Resource): resource_type = 'AWS::IAM::Role' property_types = { 'AssumeRolePolicyDocument': PropertyType(True, is_type(dict)), 'ManagedPolicyArns': PropertyType(False, is_type(list)), 'Path': PropertyType(False, is_str()), 'Policies': PropertyType(False, is_type(list)) } runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn") }
class LambdaLayerVersion(Resource): """Lambda layer version resource""" resource_type = "AWS::Lambda::LayerVersion" property_types = { "Content": PropertyType(True, is_type(dict)), "Description": PropertyType(False, is_str()), "LayerName": PropertyType(False, is_str()), "CompatibleRuntimes": PropertyType(False, list_of(one_of(is_str(), is_type(dict)))), "LicenseInfo": PropertyType(False, is_str()), } runtime_attrs = {"name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn")}
class EventsRule(Resource): resource_type = 'AWS::Events::Rule' property_types = { 'Description': PropertyType(False, is_str()), 'EventPattern': PropertyType(False, is_type(dict)), 'Name': PropertyType(False, is_str()), 'RoleArn': PropertyType(False, is_str()), 'ScheduleExpression': PropertyType(False, is_str()), 'State': PropertyType(False, is_str()), 'Targets': PropertyType(False, list_of(is_type(dict))) } runtime_attrs = { "rule_id": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn") }
class EventsRule(Resource): resource_type = "AWS::Events::Rule" property_types = { "Description": PropertyType(False, is_str()), "EventBusName": PropertyType(False, is_str()), "EventPattern": PropertyType(False, is_type(dict)), "Name": PropertyType(False, is_str()), "RoleArn": PropertyType(False, is_str()), "ScheduleExpression": PropertyType(False, is_str()), "State": PropertyType(False, is_str()), "Targets": PropertyType(False, list_of(is_type(dict))), } runtime_attrs = { "rule_id": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn") }
class LambdaLayerVersion(Resource): """ Lambda layer version resource """ resource_type = 'AWS::Lambda::LayerVersion' property_types = { 'Content': PropertyType(True, is_type(dict)), 'Description': PropertyType(False, is_str()), 'LayerName': PropertyType(False, is_str()), 'CompatibleRuntimes': PropertyType(False, list_of(is_str())), 'LicenseInfo': PropertyType(False, is_str()) } runtime_attrs = { "name": lambda self: ref(self.logical_id), "arn": lambda self: fnGetAtt(self.logical_id, "Arn") }
class StepFunctionsStateMachine(Resource): resource_type = "AWS::StepFunctions::StateMachine" property_types = { "Definition": PropertyType(False, is_type(dict)), "DefinitionString": PropertyType(False, is_str()), "DefinitionS3Location": PropertyType(False, is_type(dict)), "LoggingConfiguration": PropertyType(False, is_type(dict)), "RoleArn": PropertyType(True, is_str()), "StateMachineName": PropertyType(False, is_str()), "StateMachineType": PropertyType(False, is_str()), "Tags": PropertyType(False, list_of(is_type(dict))), "DefinitionSubstitutions": PropertyType(False, is_type(dict)), } runtime_attrs = { "arn": lambda self: ref(self.logical_id), "name": lambda self: fnGetAtt(self.logical_id, "Name"), }
def to_cloudformation(self, **kwargs): function = kwargs.get("function") if not function: raise TypeError("Missing required keyword argument: function") if "userpool" not in kwargs or kwargs["userpool"] is None: raise TypeError("Missing required keyword argument: userpool") if "userpool_id" not in kwargs or kwargs["userpool_id"] is None: raise TypeError("Missing required keyword argument: userpool_id") userpool = kwargs["userpool"] userpool_id = kwargs["userpool_id"] resources = [] source_arn = fnGetAtt(userpool_id, "Arn") resources.append( self._construct_permission(function, source_arn=source_arn, prefix=function.logical_id + "Cognito") ) self._inject_lambda_config(function, userpool) resources.append(CognitoUserPool.from_dict(userpool_id, userpool)) return resources