// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Distributed Load Testing Regional stack test 1`] = ` Object { "Conditions": Object { "BoolExistingVPC": Object { "Fn::Not": Array [ Object { "Fn::Equals": Array [ Object { "Ref": "ExistingVPCId", }, "", ], }, ], }, "CreateFargateVPCResources": Object { "Fn::Equals": Array [ Object { "Ref": "ExistingVPCId", }, "", ], }, "SendAnonymousUsage": Object { "Fn::Equals": Array [ Object { "Fn::FindInMap": Array [ "Solution", "Config", "SendAnonymousUsage", ], }, "Yes", ], }, }, "Description": "Distributed Load Testing on AWS regional deployment.", "Mappings": Object { "Solution": Object { "Config": Object { "APIServicesLambdaRoleName": "API_SERVICES_ROLE", "CodeVersion": "testversion", "ContainerImage": "testRegistry/distributed-load-testing-on-aws-load-tester:testTag", "KeyPrefix": "distributed-load-testing-on-aws/testversion", "MainStackRegion": "MAIN_STACK_REGION", "ResultsParserRoleName": "RESULTS_PARSER_ROLE", "S3Bucket": "testbucket", "ScenariosS3Bucket": "SCENARIOS_BUCKET", "ScenariosTable": "SCENARIOS_DDB_TABLE", "SendAnonymousUsage": "Yes", "SolutionId": "testId", "TaskCancelerRoleName": "TASK_CANCELER_ROLE", "TaskRunnerRoleName": "TASK_RUNNER_ROLE", "TaskStatusCheckerRoleName": "TASK_STATUS_ROLE", "URL": "http://testurl.com", "Uuid": "STACK_UUID", "stackType": "regional", }, }, }, "Outputs": Object { "AppRegistryApplicationManagerUrl775D5C3D": Object { "Description": "Application manager url for the application created.", "Value": Object { "Fn::Join": Array [ "", Array [ "https://", Object { "Ref": "AWS::Region", }, ".console.aws.amazon.com/systems-manager/appmanager/application/AWS_AppRegistry_Application-", Object { "Fn::Join": Array [ "-", Array [ "distributed-load-testing-on-aws", Object { "Ref": "AWS::Region", }, Object { "Ref": "AWS::AccountId", }, ], ], }, ], ], }, }, "ECSCloudWatchLogGroup": Object { "Description": "The CloudWatch log group for ECS", "Value": Object { "Ref": "DLTRegionalFargateDLTCloudWatchLogsGroupAE1278C6", }, }, "SubnetA": Object { "Description": "Subnet A used by the Fargate tasks", "Value": Object { "Fn::If": Array [ "CreateFargateVPCResources", Object { "Ref": "DLTRegionalVpcDLTSubnetACEFDB0F7", }, Object { "Ref": "ExistingSubnetA", }, ], }, }, "SubnetB": Object { "Description": "Subnet B used by the Fargate tasks", "Value": Object { "Fn::If": Array [ "CreateFargateVPCResources", Object { "Ref": "DLTRegionalVpcDLTSubnetB02222C79", }, Object { "Ref": "ExistingSubnetB", }, ], }, }, "TaskCluster": Object { "Description": "Fargate task cluster", "Value": Object { "Ref": "DLTRegionalFargateDLTEcsCluster1D89D366", }, }, "TaskDefinition": Object { "Description": "The Fargate task definition", "Value": Object { "Ref": "DLTRegionalFargateDLTTaskDefinitionB27F0AFD", }, }, "TaskSecurityGroup": Object { "Description": "Security Group used by the Fargate taks", "Value": Object { "Ref": "DLTRegionalFargateDLTEcsSecurityGroup76A38D53", }, }, }, "Parameters": Object { "EgressCidr": Object { "AllowedPattern": "(?:^$|(\\\\d{1,3})\\\\.(\\\\d{1,3})\\\\.(\\\\d{1,3})\\\\.(\\\\d{1,3})/(\\\\d{1,2}))", "ConstraintDescription": "The Egress CIDR block must be a valid IP CIDR range of the form x.x.x.x/x.", "Default": "0.0.0.0/0", "Description": "CIDR Block to restrict the Fargate container outbound access", "MaxLength": 18, "MinLength": 9, "Type": "String", }, "ExistingSubnetA": Object { "AllowedPattern": "(?:^$|^subnet-[a-zA-Z0-9-]+)", "Description": "First existing subnet", "Type": "String", }, "ExistingSubnetB": Object { "AllowedPattern": "(?:^$|^subnet-[a-zA-Z0-9-]+)", "Description": "Second existing subnet", "Type": "String", }, "ExistingVPCId": Object { "AllowedPattern": "(?:^$|^vpc-[a-zA-Z0-9-]+)", "Description": "Existing VPC ID", "Type": "String", }, "SubnetACidrBlock": Object { "AllowedPattern": "(?:^$|(\\\\d{1,3})\\\\.(\\\\d{1,3})\\\\.(\\\\d{1,3})\\\\.(\\\\d{1,3})/(\\\\d{1,2}))", "ConstraintDescription": "The subnet CIDR block must be a valid IP CIDR range of the form x.x.x.x/x.", "Default": "192.168.0.0/20", "Description": "CIDR block for subnet A of the AWS Fargate VPC", "MaxLength": 18, "MinLength": 9, "Type": "String", }, "SubnetBCidrBlock": Object { "AllowedPattern": "(?:^$|(\\\\d{1,3})\\\\.(\\\\d{1,3})\\\\.(\\\\d{1,3})\\\\.(\\\\d{1,3})/(\\\\d{1,2}))", "ConstraintDescription": "The subnet CIDR block must be a valid IP CIDR range of the form x.x.x.x/x.", "Default": "192.168.16.0/20", "Description": "CIDR block for subnet B of the AWS Fargate VPC", "Type": "String", }, "VpcCidrBlock": Object { "AllowedPattern": "(?:^$|(\\\\d{1,3})\\\\.(\\\\d{1,3})\\\\.(\\\\d{1,3})\\\\.(\\\\d{1,3})/(\\\\d{1,2}))", "ConstraintDescription": "The VPC CIDR block must be a valid IP CIDR range of the form x.x.x.x/x.", "Default": "192.168.0.0/16", "Description": "CIDR block of the new VPC where AWS Fargate will be placed", "MaxLength": 18, "MinLength": 9, "Type": "String", }, }, "Resources": Object { "AppRegistry968496A3": Object { "Properties": Object { "Description": "Service Catalog application to track and manage all your resources for the solution Distributed Load Testing", "Name": Object { "Fn::Join": Array [ "-", Array [ "distributed-load-testing-on-aws", Object { "Ref": "AWS::Region", }, Object { "Ref": "AWS::AccountId", }, ], ], }, "Tags": Object { "SolutionId": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, "Solutions:ApplicationType": "AWS-Solutions", "Solutions:SolutionID": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, "Solutions:SolutionName": "Distributed Load Testing", "Solutions:SolutionVersion": Object { "Fn::FindInMap": Array [ "Solution", "Config", "CodeVersion", ], }, }, }, "Type": "AWS::ServiceCatalogAppRegistry::Application", }, "AppRegistryAssociation": Object { "Properties": Object { "Application": Object { "Fn::GetAtt": Array [ "AppRegistry968496A3", "Id", ], }, "Resource": Object { "Ref": "AWS::StackId", }, "ResourceType": "CFN_STACK", }, "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation", }, "AppRegistryAttributeGroupAssociationa7177d48be75C139509C": Object { "Properties": Object { "Application": Object { "Fn::GetAtt": Array [ "AppRegistry968496A3", "Id", ], }, "AttributeGroup": Object { "Fn::GetAtt": Array [ "DefaultApplicationAttributesFC1CC26B", "Id", ], }, }, "Type": "AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation", }, "CommonResourcesCloudWatchLogsPolicyB8257A4C": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": Array [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", ], "Effect": "Allow", "Resource": Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":logs:", Object { "Ref": "AWS::Region", }, ":", Object { "Ref": "AWS::AccountId", }, ":log-group:/aws/lambda/*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "CommonResourcesCloudWatchLogsPolicyB8257A4C", "Roles": Array [ Object { "Ref": "DLTRegionalFargateDLTTaskExecutionRole22C06EF4", }, Object { "Ref": "RegionalCustomResourceInfraCustomResourceLambdaRoleEBA8B208", }, Object { "Ref": "RealTimeDatarealTimeDataPublisherRoleA8976D01", }, ], }, "Type": "AWS::IAM::Policy", }, "DLTCustomResourcesAnonymousMetricE30E46B4": Object { "Condition": "SendAnonymousUsage", "DeletionPolicy": "Delete", "Properties": Object { "Region": Object { "Ref": "AWS::Region", }, "Resource": "AnonymousMetric", "ServiceToken": Object { "Fn::GetAtt": Array [ "RegionalCustomResourceInfraCustomResourceLambda86A7E873", "Arn", ], }, "SolutionId": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, "UUID": Object { "Fn::FindInMap": Array [ "Solution", "Config", "Uuid", ], }, "VERSION": Object { "Fn::FindInMap": Array [ "Solution", "Config", "CodeVersion", ], }, "existingVPC": Object { "Fn::If": Array [ "BoolExistingVPC", true, false, ], }, }, "Type": "AWS::CloudFormation::CustomResource", "UpdateReplacePolicy": "Delete", }, "DLTCustomResourcesGetIotEndpoint700ABCC8": Object { "DeletionPolicy": "Delete", "Properties": Object { "Resource": "GetIotEndpoint", "ServiceToken": Object { "Fn::GetAtt": Array [ "RegionalCustomResourceInfraCustomResourceLambda86A7E873", "Arn", ], }, }, "Type": "AWS::CloudFormation::CustomResource", "UpdateReplacePolicy": "Delete", }, "DLTCustomResourcesTestingResourcesConfig0BCA657F": Object { "DeletionPolicy": "Delete", "Properties": Object { "Resource": "TestingResourcesConfigFile", "ServiceToken": Object { "Fn::GetAtt": Array [ "RegionalCustomResourceInfraCustomResourceLambda86A7E873", "Arn", ], }, "TestingResourcesConfig": Object { "ecsCloudWatchLogGroup": Object { "Ref": "DLTRegionalFargateDLTCloudWatchLogsGroupAE1278C6", }, "region": Object { "Ref": "AWS::Region", }, "subnetA": Object { "Fn::If": Array [ "CreateFargateVPCResources", Object { "Ref": "DLTRegionalVpcDLTSubnetACEFDB0F7", }, Object { "Ref": "ExistingSubnetA", }, ], }, "subnetB": Object { "Fn::If": Array [ "CreateFargateVPCResources", Object { "Ref": "DLTRegionalVpcDLTSubnetB02222C79", }, Object { "Ref": "ExistingSubnetB", }, ], }, "taskCluster": Object { "Ref": "DLTRegionalFargateDLTEcsCluster1D89D366", }, "taskDefinition": Object { "Ref": "DLTRegionalFargateDLTTaskDefinitionB27F0AFD", }, "taskImage": Object { "Fn::Join": Array [ "", Array [ Object { "Ref": "AWS::StackName", }, "-load-tester", ], ], }, "taskSecurityGroup": Object { "Ref": "DLTRegionalFargateDLTEcsSecurityGroup76A38D53", }, }, "Uuid": Object { "Fn::FindInMap": Array [ "Solution", "Config", "Uuid", ], }, }, "Type": "AWS::CloudFormation::CustomResource", "UpdateReplacePolicy": "Delete", }, "DLTRegionalFargateDLTCloudWatchLogsGroupAE1278C6": Object { "DeletionPolicy": "Retain", "Metadata": Object { "cfn_nag": Object { "rules_to_suppress": Array [ Object { "id": "W84", "reason": "KMS encryption unnecessary for log group", }, ], }, }, "Properties": Object { "RetentionInDays": 365, "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::Logs::LogGroup", "UpdateReplacePolicy": "Retain", }, "DLTRegionalFargateDLTCloudWatchLogsGroupECSLogSubscriptionFilter018E070A": Object { "DependsOn": Array [ "DLTRegionalFargateDLTCloudWatchLogsGroupECSLogSubscriptionFilterCanInvokeLambda20B8ED69", ], "Properties": Object { "DestinationArn": Object { "Fn::GetAtt": Array [ "RealTimeDataRealTimeDataPublisher7E8F8F6C", "Arn", ], }, "FilterPattern": "\\"INFO: Current:\\" \\"live=true\\"", "LogGroupName": Object { "Ref": "DLTRegionalFargateDLTCloudWatchLogsGroupAE1278C6", }, }, "Type": "AWS::Logs::SubscriptionFilter", }, "DLTRegionalFargateDLTCloudWatchLogsGroupECSLogSubscriptionFilterCanInvokeLambda20B8ED69": Object { "Properties": Object { "Action": "lambda:InvokeFunction", "FunctionName": Object { "Fn::GetAtt": Array [ "RealTimeDataRealTimeDataPublisher7E8F8F6C", "Arn", ], }, "Principal": "logs.amazonaws.com", "SourceArn": Object { "Fn::GetAtt": Array [ "DLTRegionalFargateDLTCloudWatchLogsGroupAE1278C6", "Arn", ], }, }, "Type": "AWS::Lambda::Permission", }, "DLTRegionalFargateDLTEcsCluster1D89D366": Object { "Properties": Object { "ClusterName": Object { "Ref": "AWS::StackName", }, "ClusterSettings": Array [ Object { "Name": "containerInsights", "Value": "enabled", }, ], "Tags": Array [ Object { "Key": "CloudFormation Stack", "Value": Object { "Ref": "AWS::StackName", }, }, Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::ECS::Cluster", }, "DLTRegionalFargateDLTEcsSecurityGroup76A38D53": Object { "Metadata": Object { "cfn_nag": Object { "rules_to_suppress": Array [ Object { "id": "W40", "reason": "IpProtocol set to -1 (any) as ports are not known prior to running tests", }, ], }, }, "Properties": Object { "GroupDescription": "DLTS Tasks Security Group", "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], "VpcId": Object { "Fn::If": Array [ "CreateFargateVPCResources", Object { "Ref": "DLTRegionalVpcDLTFargateVpc27038C26", }, Object { "Ref": "ExistingVPCId", }, ], }, }, "Type": "AWS::EC2::SecurityGroup", }, "DLTRegionalFargateDLTSecGroupEgress64416366": Object { "Properties": Object { "CidrIp": Object { "Ref": "EgressCidr", }, "Description": "Allow tasks to call out to external resources", "GroupId": Object { "Ref": "DLTRegionalFargateDLTEcsSecurityGroup76A38D53", }, "IpProtocol": "-1", }, "Type": "AWS::EC2::SecurityGroupEgress", }, "DLTRegionalFargateDLTSecGroupIngress5C8E0E6E": Object { "Properties": Object { "Description": "Allow tasks to communicate", "FromPort": 50000, "GroupId": Object { "Ref": "DLTRegionalFargateDLTEcsSecurityGroup76A38D53", }, "IpProtocol": "tcp", "SourceSecurityGroupId": Object { "Ref": "DLTRegionalFargateDLTEcsSecurityGroup76A38D53", }, "ToPort": 50000, }, "Type": "AWS::EC2::SecurityGroupIngress", }, "DLTRegionalFargateDLTTaskDefinitionB27F0AFD": Object { "Properties": Object { "ContainerDefinitions": Array [ Object { "Essential": true, "Image": Object { "Fn::FindInMap": Array [ "Solution", "Config", "ContainerImage", ], }, "LogConfiguration": Object { "LogDriver": "awslogs", "Options": Object { "awslogs-group": Object { "Ref": "DLTRegionalFargateDLTCloudWatchLogsGroupAE1278C6", }, "awslogs-region": Object { "Ref": "AWS::Region", }, "awslogs-stream-prefix": "load-testing", }, }, "Memory": 4096, "Name": Object { "Fn::Join": Array [ "", Array [ Object { "Ref": "AWS::StackName", }, "-load-tester", ], ], }, }, ], "Cpu": "2048", "ExecutionRoleArn": Object { "Fn::GetAtt": Array [ "DLTRegionalFargateDLTTaskExecutionRole22C06EF4", "Arn", ], }, "Memory": "4096", "NetworkMode": "awsvpc", "RequiresCompatibilities": Array [ "FARGATE", ], "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], "TaskRoleArn": Object { "Fn::GetAtt": Array [ "DLTRegionalFargateDLTTaskExecutionRole22C06EF4", "Arn", ], }, }, "Type": "AWS::ECS::TaskDefinition", }, "DLTRegionalFargateDLTTaskExecutionRole22C06EF4": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { "Service": "ecs-tasks.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "ManagedPolicyArns": Array [ Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy", ], ], }, ], "Policies": Array [ Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": Array [ "s3:HeadObject", "s3:PutObject", "s3:GetObject", "s3:ListBucket", ], "Effect": "Allow", "Resource": Array [ Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":s3:::", Object { "Fn::FindInMap": Array [ "Solution", "Config", "ScenariosS3Bucket", ], }, ], ], }, Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":s3:::", Object { "Fn::FindInMap": Array [ "Solution", "Config", "ScenariosS3Bucket", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ScenariosS3Policy", }, ], "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::IAM::Role", }, "DLTRegionalVpcDLTFargateIGE3847EB3": Object { "Condition": "CreateFargateVPCResources", "Properties": Object { "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::EC2::InternetGateway", }, "DLTRegionalVpcDLTFargateRT243A2CBC": Object { "Condition": "CreateFargateVPCResources", "Properties": Object { "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], "VpcId": Object { "Ref": "DLTRegionalVpcDLTFargateVpc27038C26", }, }, "Type": "AWS::EC2::RouteTable", }, "DLTRegionalVpcDLTFargateVpc27038C26": Object { "Condition": "CreateFargateVPCResources", "Metadata": Object { "cfn_nag": Object { "rules_to_suppress": Array [ Object { "id": "W60", "reason": "This VPC is used for the test runner Fargate tasks only, it does not require VPC flow logs.", }, ], }, }, "Properties": Object { "CidrBlock": Object { "Ref": "VpcCidrBlock", }, "EnableDnsHostnames": true, "EnableDnsSupport": true, "Tags": Array [ Object { "Key": "Name", "Value": Object { "Ref": "AWS::StackName", }, }, Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::EC2::VPC", }, "DLTRegionalVpcDLTGatewayattachmentA7E0AEA0": Object { "Condition": "CreateFargateVPCResources", "Properties": Object { "InternetGatewayId": Object { "Ref": "DLTRegionalVpcDLTFargateIGE3847EB3", }, "VpcId": Object { "Ref": "DLTRegionalVpcDLTFargateVpc27038C26", }, }, "Type": "AWS::EC2::VPCGatewayAttachment", }, "DLTRegionalVpcDLTRoute2F53B3BB": Object { "Condition": "CreateFargateVPCResources", "DependsOn": Array [ "DLTRegionalVpcDLTGatewayattachmentA7E0AEA0", ], "Properties": Object { "DestinationCidrBlock": "0.0.0.0/0", "GatewayId": Object { "Ref": "DLTRegionalVpcDLTFargateIGE3847EB3", }, "RouteTableId": Object { "Ref": "DLTRegionalVpcDLTFargateRT243A2CBC", }, }, "Type": "AWS::EC2::Route", }, "DLTRegionalVpcDLTRouteTableAssociationAF1EA6E2D": Object { "Condition": "CreateFargateVPCResources", "Properties": Object { "RouteTableId": Object { "Ref": "DLTRegionalVpcDLTFargateRT243A2CBC", }, "SubnetId": Object { "Ref": "DLTRegionalVpcDLTSubnetACEFDB0F7", }, }, "Type": "AWS::EC2::SubnetRouteTableAssociation", }, "DLTRegionalVpcDLTRouteTableAssociationB661C90B5": Object { "Condition": "CreateFargateVPCResources", "Properties": Object { "RouteTableId": Object { "Ref": "DLTRegionalVpcDLTFargateRT243A2CBC", }, "SubnetId": Object { "Ref": "DLTRegionalVpcDLTSubnetB02222C79", }, }, "Type": "AWS::EC2::SubnetRouteTableAssociation", }, "DLTRegionalVpcDLTSubnetACEFDB0F7": Object { "Condition": "CreateFargateVPCResources", "Properties": Object { "AvailabilityZone": Object { "Fn::Select": Array [ 0, Object { "Fn::GetAZs": "", }, ], }, "CidrBlock": Object { "Ref": "SubnetACidrBlock", }, "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], "VpcId": Object { "Ref": "DLTRegionalVpcDLTFargateVpc27038C26", }, }, "Type": "AWS::EC2::Subnet", }, "DLTRegionalVpcDLTSubnetB02222C79": Object { "Condition": "CreateFargateVPCResources", "Properties": Object { "AvailabilityZone": Object { "Fn::Select": Array [ 1, Object { "Fn::GetAZs": "", }, ], }, "CidrBlock": Object { "Ref": "SubnetBCidrBlock", }, "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], "VpcId": Object { "Ref": "DLTRegionalVpcDLTFargateVpc27038C26", }, }, "Type": "AWS::EC2::Subnet", }, "DefaultApplicationAttributesFC1CC26B": Object { "Properties": Object { "Attributes": Object { "applicationType": "AWS-Solutions", "solutionID": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, "solutionName": "Distributed Load Testing", "version": Object { "Fn::FindInMap": Array [ "Solution", "Config", "CodeVersion", ], }, }, "Description": "Attribute group for solution information", "Name": Object { "Ref": "AWS::StackName", }, "Tags": Object { "SolutionId": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, }, "Type": "AWS::ServiceCatalogAppRegistry::AttributeGroup", }, "RealTimeDataRealTimeDataPublisher7E8F8F6C": Object { "DependsOn": Array [ "RealTimeDatarealTimeDataPublisherRoleA8976D01", ], "Metadata": Object { "cfn_nag": Object { "rules_to_suppress": Array [ Object { "id": "W58", "reason": "CloudWatchLogsPolicy covers a permission to write CloudWatch logs.", }, Object { "id": "W89", "reason": "This Lambda function does not require a VPC", }, Object { "id": "W92", "reason": "Does not run concurrent executions", }, ], }, }, "Properties": Object { "Code": Object { "S3Bucket": Object { "Fn::Join": Array [ "-", Array [ Object { "Fn::FindInMap": Array [ "Solution", "Config", "S3Bucket", ], }, Object { "Ref": "AWS::Region", }, ], ], }, "S3Key": Object { "Fn::Join": Array [ "", Array [ Object { "Fn::FindInMap": Array [ "Solution", "Config", "KeyPrefix", ], }, "/real-time-data-publisher.zip", ], ], }, }, "Description": "Real time data publisher", "Environment": Object { "Variables": Object { "IOT_ENDPOINT": Object { "Fn::GetAtt": Array [ "DLTCustomResourcesGetIotEndpoint700ABCC8", "IOT_ENDPOINT", ], }, "MAIN_REGION": Object { "Fn::FindInMap": Array [ "Solution", "Config", "MainStackRegion", ], }, "SOLUTION_ID": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, "VERSION": Object { "Fn::FindInMap": Array [ "Solution", "Config", "CodeVersion", ], }, }, }, "Handler": "index.handler", "Role": Object { "Fn::GetAtt": Array [ "RealTimeDatarealTimeDataPublisherRoleA8976D01", "Arn", ], }, "Runtime": "nodejs16.x", "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], "Timeout": 180, }, "Type": "AWS::Lambda::Function", }, "RealTimeDatarealTimeDataPublisherRoleA8976D01": Object { "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "Policies": Array [ Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": "iot:Publish", "Effect": "Allow", "Resource": Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":iot:", Object { "Fn::FindInMap": Array [ "Solution", "Config", "MainStackRegion", ], }, ":", Object { "Ref": "AWS::AccountId", }, ":topic/*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "IoTPolicy", }, ], "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::IAM::Role", }, "RegionalCustomResourceInfraCustomResourceLambda86A7E873": Object { "DependsOn": Array [ "RegionalCustomResourceInfraCustomResourceLambdaRoleEBA8B208", ], "Metadata": Object { "cfn_nag": Object { "rules_to_suppress": Array [ Object { "id": "W58", "reason": "CloudWatchLogsPolicy covers a permission to write CloudWatch logs.", }, Object { "id": "W89", "reason": "VPC not needed for lambda", }, Object { "id": "W92", "reason": "Does not run concurrent executions", }, ], }, }, "Properties": Object { "Code": Object { "S3Bucket": Object { "Fn::Join": Array [ "-", Array [ Object { "Fn::FindInMap": Array [ "Solution", "Config", "S3Bucket", ], }, Object { "Ref": "AWS::Region", }, ], ], }, "S3Key": Object { "Fn::Join": Array [ "", Array [ Object { "Fn::FindInMap": Array [ "Solution", "Config", "KeyPrefix", ], }, "/regional-custom-resource.zip", ], ], }, }, "Description": "CFN Lambda backed custom resource to deploy assets to s3", "Environment": Object { "Variables": Object { "DDB_TABLE": Object { "Fn::FindInMap": Array [ "Solution", "Config", "ScenariosTable", ], }, "MAIN_REGION": Object { "Fn::FindInMap": Array [ "Solution", "Config", "MainStackRegion", ], }, "METRIC_URL": Object { "Fn::FindInMap": Array [ "Solution", "Config", "URL", ], }, "S3_BUCKET": Object { "Fn::FindInMap": Array [ "Solution", "Config", "ScenariosS3Bucket", ], }, "SOLUTION_ID": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, "VERSION": Object { "Fn::FindInMap": Array [ "Solution", "Config", "CodeVersion", ], }, }, }, "Handler": "index.handler", "Role": Object { "Fn::GetAtt": Array [ "RegionalCustomResourceInfraCustomResourceLambdaRoleEBA8B208", "Arn", ], }, "Runtime": "nodejs16.x", "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], "Timeout": 120, }, "Type": "AWS::Lambda::Function", }, "RegionalCustomResourceInfraCustomResourceLambdaRoleEBA8B208": Object { "Metadata": Object { "cfn_nag": Object { "rules_to_suppress": Array [ Object { "id": "W11", "reason": "iot:DescribeEndpoint and iot:DetachPrincipalPolicy cannot specify the resource.", }, ], }, }, "Properties": Object { "AssumeRolePolicyDocument": Object { "Statement": Array [ Object { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": Object { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "Policies": Array [ Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": "s3:GetObject", "Effect": "Allow", "Resource": Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":s3:::", Object { "Fn::Join": Array [ "-", Array [ Object { "Fn::FindInMap": Array [ "Solution", "Config", "S3Bucket", ], }, Object { "Ref": "AWS::Region", }, ], ], }, "/*", ], ], }, }, Object { "Action": Array [ "s3:PutObject", "s3:DeleteObject", ], "Effect": "Allow", "Resource": Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":s3:::", Object { "Fn::FindInMap": Array [ "Solution", "Config", "ScenariosS3Bucket", ], }, "/*", ], ], }, }, Object { "Action": Array [ "dynamodb:PutItem", "dynamodb:DeleteItem", ], "Effect": "Allow", "Resource": Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":dynamodb:", Object { "Fn::FindInMap": Array [ "Solution", "Config", "MainStackRegion", ], }, ":", Object { "Ref": "AWS::AccountId", }, ":table/", Object { "Fn::FindInMap": Array [ "Solution", "Config", "ScenariosTable", ], }, ], ], }, }, Object { "Action": Array [ "iot:DescribeEndpoint", "iot:DetachPrincipalPolicy", ], "Effect": "Allow", "Resource": "*", }, Object { "Action": "iot:ListTargetsForPolicy", "Effect": "Allow", "Resource": Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":iot:", Object { "Ref": "AWS::Region", }, ":", Object { "Ref": "AWS::AccountId", }, ":policy/*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "CustomResourcePolicy", }, ], "Tags": Array [ Object { "Key": "SolutionId", "Value": Object { "Fn::FindInMap": Array [ "Solution", "Config", "SolutionId", ], }, }, ], }, "Type": "AWS::IAM::Role", }, "RegionalPermissionsForTaskLambdasECSCloudWatchDelMetrics67273BC1": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": "logs:DeleteMetricFilter", "Effect": "Allow", "Resource": Object { "Fn::GetAtt": Array [ "DLTRegionalFargateDLTCloudWatchLogsGroupAE1278C6", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": Object { "Fn::Join": Array [ "", Array [ "ECSCloudWatchDelMetrics-", Object { "Ref": "AWS::StackName", }, "-", Object { "Ref": "AWS::Region", }, ], ], }, "Roles": Array [ Object { "Fn::FindInMap": Array [ "Solution", "Config", "APIServicesLambdaRoleName", ], }, Object { "Fn::FindInMap": Array [ "Solution", "Config", "ResultsParserRoleName", ], }, ], }, "Type": "AWS::IAM::Policy", }, "RegionalPermissionsForTaskLambdasECSCloudWatchPutMetricsd8D7608DF": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": "logs:PutMetricFilter", "Effect": "Allow", "Resource": Object { "Fn::GetAtt": Array [ "DLTRegionalFargateDLTCloudWatchLogsGroupAE1278C6", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": Object { "Fn::Join": Array [ "", Array [ "ECSCloudWatchPutMetrics-", Object { "Ref": "AWS::StackName", }, "-", Object { "Ref": "AWS::Region", }, ], ], }, "Roles": Array [ Object { "Fn::FindInMap": Array [ "Solution", "Config", "TaskRunnerRoleName", ], }, ], }, "Type": "AWS::IAM::Policy", }, "RegionalPermissionsForTaskLambdasECSDescribePolicyAE42B7AD": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": "ecs:DescribeTasks", "Effect": "Allow", "Resource": Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":ecs:", Object { "Ref": "AWS::Region", }, ":", Object { "Ref": "AWS::AccountId", }, ":task/*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": Object { "Fn::Join": Array [ "", Array [ "ECSDescribePolicy", Object { "Ref": "AWS::Region", }, ], ], }, "Roles": Array [ Object { "Fn::FindInMap": Array [ "Solution", "Config", "TaskStatusCheckerRoleName", ], }, ], }, "Type": "AWS::IAM::Policy", }, "RegionalPermissionsForTaskLambdasECSStopPolicy32D8C7AF": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": "ecs:StopTask", "Effect": "Allow", "Resource": Array [ Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":ecs:", Object { "Ref": "AWS::Region", }, ":", Object { "Ref": "AWS::AccountId", }, ":task/*", ], ], }, Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":ecs:", Object { "Ref": "AWS::Region", }, ":", Object { "Ref": "AWS::AccountId", }, ":task-definition/*:*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": Object { "Fn::Join": Array [ "", Array [ "ECSStopPolicy-", Object { "Ref": "AWS::StackName", }, "-", Object { "Ref": "AWS::Region", }, ], ], }, "Roles": Array [ Object { "Fn::FindInMap": Array [ "Solution", "Config", "TaskCancelerRoleName", ], }, ], }, "Type": "AWS::IAM::Policy", }, "RegionalPermissionsForTaskLambdasRegionalECRPerms80299EED": Object { "Properties": Object { "PolicyDocument": Object { "Statement": Array [ Object { "Action": Array [ "ecs:RunTask", "ecs:DescribeTasks", ], "Effect": "Allow", "Resource": Array [ Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":ecs:", Object { "Ref": "AWS::Region", }, ":", Object { "Ref": "AWS::AccountId", }, ":task/*", ], ], }, Object { "Fn::Join": Array [ "", Array [ "arn:", Object { "Ref": "AWS::Partition", }, ":ecs:", Object { "Ref": "AWS::Region", }, ":", Object { "Ref": "AWS::AccountId", }, ":task-definition/*:*", ], ], }, ], }, Object { "Action": "iam:PassRole", "Effect": "Allow", "Resource": Object { "Fn::GetAtt": Array [ "DLTRegionalFargateDLTTaskExecutionRole22C06EF4", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": Object { "Fn::Join": Array [ "", Array [ "RegionalECRPerms-", Object { "Ref": "AWS::StackName", }, "-", Object { "Ref": "AWS::Region", }, ], ], }, "Roles": Array [ Object { "Fn::FindInMap": Array [ "Solution", "Config", "TaskRunnerRoleName", ], }, Object { "Fn::FindInMap": Array [ "Solution", "Config", "APIServicesLambdaRoleName", ], }, ], }, "Type": "AWS::IAM::Policy", }, }, "Rules": Object { "ExistingVPCRule": Object { "Assertions": Array [ Object { "Assert": Object { "Fn::Not": Array [ Object { "Fn::Equals": Array [ Object { "Ref": "ExistingSubnetA", }, "", ], }, ], }, "AssertDescription": "If an existing VPC Id is provided, 2 subnet ids need to be provided as well. You neglected to enter the first subnet id", }, Object { "Assert": Object { "Fn::Not": Array [ Object { "Fn::Equals": Array [ Object { "Ref": "ExistingSubnetB", }, "", ], }, ], }, "AssertDescription": "If an existing VPC Id is provided, 2 subnet ids need to be provided as well. You neglected to enter the second subnet id", }, ], "RuleCondition": Object { "Fn::Not": Array [ Object { "Fn::Equals": Array [ Object { "Ref": "ExistingVPCId", }, "", ], }, ], }, }, }, } `;