{
  "Description": "(SO0310) - DeepRacer on AWS. Version v1.1.1",
  "Parameters": {
    "AdminEmail": {
      "Type": "String",
      "AllowedPattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$",
      "ConstraintDescription": "Must be a valid email address",
      "Description": "Email address for the initial admin user. This user will be automatically added to the admin group."
    },
    "Namespace": {
      "Type": "String",
      "Default": "default",
      "AllowedPattern": "^[a-z0-9]{3,12}$",
      "Description": "The namespace for this deployment of DeepRacer. Lowercase alphanumeric characters of length between 3 and 12"
    },
    "CustomDomain": {
      "Type": "String",
      "Default": "",
      "AllowedPattern": "^(https?://([a-zA-Z0-9.-]+)(\\.([a-zA-Z0-9.-]{2,6}))?(:[0-9]+)?)?$",
      "Description": "Custom domain URL for CORS allowlist (only if you have or plan to map a custom domain to CloudFront)"
    },
    "EmailDeliveryMethod": {
      "Type": "String",
      "Default": "COGNITO",
      "AllowedValues": [
        "COGNITO",
        "SES"
      ],
      "Description": "Method for delivering authentication emails. If choosing SES, you will need to have production access approved for your account in order to send emails. If choosing Cognito, you will need to consider the daily email limit. See the implementation guide for more information."
    },
    "SesVerifiedEmail": {
      "Type": "String",
      "Default": "",
      "Description": "Verified SES email address. Required when EmailDeliveryMethod is SES."
    }
  },
  "Rules": {
    "SesRequiresVerifiedEmail": {
      "Assertions": [
        {
          "Assert": {
            "Fn::Or": [
              {
                "Fn::Equals": [
                  {
                    "Ref": "EmailDeliveryMethod"
                  },
                  "COGNITO"
                ]
              },
              {
                "Fn::Not": [
                  {
                    "Fn::Equals": [
                      {
                        "Ref": "SesVerifiedEmail"
                      },
                      ""
                    ]
                  }
                ]
              }
            ]
          },
          "AssertDescription": "SesVerifiedEmail must not be empty when EmailDeliveryMethod is SES."
        }
      ]
    }
  },
  "Conditions": {
    "IsSesEnabled": {
      "Fn::Equals": [
        {
          "Ref": "EmailDeliveryMethod"
        },
        "SES"
      ]
    },
    "WebsiteSupportsCloudFrontLogging36BD107F": {
      "Fn::Not": [
        {
          "Fn::Or": [
            {
              "Fn::Or": [
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "af-south-1"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "ap-east-1"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "ap-south-2"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "ap-southeast-3"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "ap-southeast-4"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "ca-west-1"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "eu-central-2"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "eu-south-1"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "eu-south-2"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "il-central-1"
                  ]
                }
              ]
            },
            {
              "Fn::Or": [
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "me-central-1"
                  ]
                },
                {
                  "Fn::Equals": [
                    {
                      "Ref": "AWS::Region"
                    },
                    "me-south-1"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "HasCustomDomain": {
      "Fn::Not": [
        {
          "Fn::Equals": [
            {
              "Ref": "CustomDomain"
            },
            ""
          ]
        }
      ]
    },
    "MetricsInfraSendAnonymizedData168371B5": {
      "Fn::Equals": [
        {
          "Fn::FindInMap": [
            "MetricsInfraAnonymizedData6566E64E",
            "SendAnonymizedData",
            "Data"
          ]
        },
        "Yes"
      ]
    },
    "CDKMetadataAvailable": {
      "Fn::Or": [
        {
          "Fn::Or": [
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "af-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-east-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-northeast-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-northeast-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-northeast-3"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-south-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-3"
              ]
            }
          ]
        },
        {
          "Fn::Or": [
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ap-southeast-4"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ca-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "ca-west-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "cn-north-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "cn-northwest-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-central-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-north-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-south-2"
              ]
            }
          ]
        },
        {
          "Fn::Or": [
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-west-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-west-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "eu-west-3"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "il-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "me-central-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "me-south-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "sa-east-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "us-east-1"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "us-east-2"
              ]
            },
            {
              "Fn::Equals": [
                {
                  "Ref": "AWS::Region"
                },
                "us-west-1"
              ]
            }
          ]
        },
        {
          "Fn::Equals": [
            {
              "Ref": "AWS::Region"
            },
            "us-west-2"
          ]
        }
      ]
    }
  },
  "Resources": {
    "DynamoDBTable7400F6BB": {
      "Type": "AWS::DynamoDB::GlobalTable",
      "Properties": {
        "AttributeDefinitions": [
          {
            "AttributeName": "pk",
            "AttributeType": "S"
          },
          {
            "AttributeName": "sk",
            "AttributeType": "S"
          },
          {
            "AttributeName": "gsi1pk",
            "AttributeType": "S"
          },
          {
            "AttributeName": "gsi1sk",
            "AttributeType": "S"
          },
          {
            "AttributeName": "closeTime",
            "AttributeType": "S"
          },
          {
            "AttributeName": "rankingScore",
            "AttributeType": "N"
          }
        ],
        "BillingMode": "PAY_PER_REQUEST",
        "GlobalSecondaryIndexes": [
          {
            "IndexName": "gsi1pk-gsi1sk",
            "KeySchema": [
              {
                "AttributeName": "gsi1pk",
                "KeyType": "HASH"
              },
              {
                "AttributeName": "gsi1sk",
                "KeyType": "RANGE"
              }
            ],
            "Projection": {
              "ProjectionType": "ALL"
            }
          },
          {
            "IndexName": "sk-index",
            "KeySchema": [
              {
                "AttributeName": "sk",
                "KeyType": "HASH"
              }
            ],
            "Projection": {
              "ProjectionType": "ALL"
            }
          }
        ],
        "KeySchema": [
          {
            "AttributeName": "pk",
            "KeyType": "HASH"
          },
          {
            "AttributeName": "sk",
            "KeyType": "RANGE"
          }
        ],
        "LocalSecondaryIndexes": [
          {
            "IndexName": "closeTime",
            "KeySchema": [
              {
                "AttributeName": "pk",
                "KeyType": "HASH"
              },
              {
                "AttributeName": "closeTime",
                "KeyType": "RANGE"
              }
            ],
            "Projection": {
              "ProjectionType": "ALL"
            }
          },
          {
            "IndexName": "rankingScore",
            "KeySchema": [
              {
                "AttributeName": "pk",
                "KeyType": "HASH"
              },
              {
                "AttributeName": "rankingScore",
                "KeyType": "RANGE"
              }
            ],
            "Projection": {
              "ProjectionType": "ALL"
            }
          }
        ],
        "Replicas": [
          {
            "GlobalSecondaryIndexes": [
              {
                "IndexName": "gsi1pk-gsi1sk"
              },
              {
                "IndexName": "sk-index"
              }
            ],
            "PointInTimeRecoverySpecification": {
              "PointInTimeRecoveryEnabled": true
            },
            "Region": {
              "Ref": "AWS::Region"
            }
          }
        ],
        "TableName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndy.Main"
            ]
          ]
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/DynamoDBTable/Table/Resource"
      }
    },
    "S3BucketAccessLogsBucketCC80D389": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "AccessControl": "LogDeliveryWrite",
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        },
        "OwnershipControls": {
          "Rules": [
            {
              "ObjectOwnership": "ObjectWriter"
            }
          ]
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/AccessLogsBucket/Resource",
        "guard": {
          "SuppressedRules": [
            "S3_BUCKET_LOGGING_ENABLED"
          ]
        }
      }
    },
    "S3BucketAccessLogsBucketPolicy52534B3C": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "S3BucketAccessLogsBucketCC80D389"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketAccessLogsBucketCC80D389",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketAccessLogsBucketCC80D389",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "s3:PutObject",
              "Condition": {
                "StringEquals": {
                  "aws:SourceAccount": {
                    "Ref": "AWS::AccountId"
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": "logging.s3.amazonaws.com"
              },
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "S3BucketAccessLogsBucketCC80D389",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/AccessLogsBucket/Policy/Resource"
      }
    },
    "S3BucketModelStorageBucket01547CCF": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        },
        "CorsConfiguration": {
          "CorsRules": [
            {
              "AllowedHeaders": [
                "*"
              ],
              "AllowedMethods": [
                "GET"
              ],
              "AllowedOrigins": [
                "*"
              ]
            }
          ]
        },
        "LoggingConfiguration": {
          "DestinationBucketName": {
            "Ref": "S3BucketAccessLogsBucketCC80D389"
          },
          "LogFilePrefix": "model-storage-bucket-logs/"
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-cdk:auto-delete-objects",
            "Value": "true"
          },
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/ModelStorageBucket/Resource"
      }
    },
    "S3BucketModelStorageBucketPolicyF2A3C9FA": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "S3BucketModelStorageBucket01547CCF"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketModelStorageBucket01547CCF",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketModelStorageBucket01547CCF",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "s3:PutBucketPolicy",
                "s3:GetBucket*",
                "s3:List*",
                "s3:DeleteObject*"
              ],
              "Effect": "Allow",
              "Principal": {
                "AWS": {
                  "Fn::GetAtt": [
                    "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
                    "Arn"
                  ]
                }
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketModelStorageBucket01547CCF",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketModelStorageBucket01547CCF",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/ModelStorageBucket/Policy/Resource"
      }
    },
    "S3BucketModelStorageBucketAutoDeleteObjectsCustomResource760ED3F6": {
      "Type": "Custom::S3AutoDeleteObjects",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
            "Arn"
          ]
        },
        "BucketName": {
          "Ref": "S3BucketModelStorageBucket01547CCF"
        }
      },
      "DependsOn": [
        "S3BucketModelStorageBucketPolicyF2A3C9FA"
      ],
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/ModelStorageBucket/AutoDeleteObjectsCustomResource/Default"
      }
    },
    "S3BucketModelStorageBucketNotifications1EF26196": {
      "Type": "Custom::S3BucketNotifications",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691",
            "Arn"
          ]
        },
        "BucketName": {
          "Ref": "S3BucketModelStorageBucket01547CCF"
        },
        "NotificationConfiguration": {
          "LambdaFunctionConfigurations": [
            {
              "Events": [
                "s3:ObjectCreated:*"
              ],
              "LambdaFunctionArn": {
                "Fn::GetAtt": [
                  "UsageFunctionsUpdateStorageUsedByProfileFnE6F69AD3",
                  "Arn"
                ]
              }
            },
            {
              "Events": [
                "s3:ObjectRemoved:*"
              ],
              "LambdaFunctionArn": {
                "Fn::GetAtt": [
                  "UsageFunctionsUpdateStorageUsedByProfileFnE6F69AD3",
                  "Arn"
                ]
              }
            }
          ]
        },
        "Managed": true,
        "SkipDestinationValidation": false
      },
      "DependsOn": [
        "S3BucketModelStorageBucketAllowBucketNotificationsTodeepraceronawsUsageFunctionsUpdateStorageUsedByProfileFn14338B203C6EDEA3",
        "S3BucketModelStorageBucketPolicyF2A3C9FA"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/ModelStorageBucket/Notifications/Resource"
      }
    },
    "S3BucketModelStorageBucketAllowBucketNotificationsTodeepraceronawsUsageFunctionsUpdateStorageUsedByProfileFn14338B203C6EDEA3": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "UsageFunctionsUpdateStorageUsedByProfileFnE6F69AD3",
            "Arn"
          ]
        },
        "Principal": "s3.amazonaws.com",
        "SourceAccount": {
          "Ref": "AWS::AccountId"
        },
        "SourceArn": {
          "Fn::GetAtt": [
            "S3BucketModelStorageBucket01547CCF",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/ModelStorageBucket/AllowBucketNotificationsTodeepraceronawsUsageFunctionsUpdateStorageUsedByProfileFn14338B20"
      }
    },
    "S3BucketVirtualModelBucketE3ACD733": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        },
        "CorsConfiguration": {
          "CorsRules": [
            {
              "AllowedHeaders": [
                "*"
              ],
              "AllowedMethods": [
                "GET"
              ],
              "AllowedOrigins": [
                "*"
              ]
            }
          ]
        },
        "LoggingConfiguration": {
          "DestinationBucketName": {
            "Ref": "S3BucketAccessLogsBucketCC80D389"
          },
          "LogFilePrefix": "virtual-model-bucket-logs/"
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-cdk:auto-delete-objects",
            "Value": "true"
          },
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/VirtualModelBucket/Resource"
      }
    },
    "S3BucketVirtualModelBucketPolicy540D1096": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "S3BucketVirtualModelBucketE3ACD733"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketVirtualModelBucketE3ACD733",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketVirtualModelBucketE3ACD733",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "s3:PutBucketPolicy",
                "s3:GetBucket*",
                "s3:List*",
                "s3:DeleteObject*"
              ],
              "Effect": "Allow",
              "Principal": {
                "AWS": {
                  "Fn::GetAtt": [
                    "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
                    "Arn"
                  ]
                }
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketVirtualModelBucketE3ACD733",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketVirtualModelBucketE3ACD733",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/VirtualModelBucket/Policy/Resource"
      }
    },
    "S3BucketVirtualModelBucketAutoDeleteObjectsCustomResourceFFE7AEB6": {
      "Type": "Custom::S3AutoDeleteObjects",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
            "Arn"
          ]
        },
        "BucketName": {
          "Ref": "S3BucketVirtualModelBucketE3ACD733"
        }
      },
      "DependsOn": [
        "S3BucketVirtualModelBucketPolicy540D1096"
      ],
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/VirtualModelBucket/AutoDeleteObjectsCustomResource/Default"
      }
    },
    "S3BucketUploadBucketE3BDB254": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        },
        "CorsConfiguration": {
          "CorsRules": [
            {
              "AllowedHeaders": [
                "*"
              ],
              "AllowedMethods": [
                "POST",
                "GET",
                "PUT",
                "DELETE",
                "HEAD"
              ],
              "AllowedOrigins": [
                "*"
              ],
              "ExposedHeaders": [
                "ETag",
                "x-amz-server-side-encryption",
                "x-amz-request-id",
                "x-amz-id-2"
              ],
              "MaxAge": 3600
            }
          ]
        },
        "LifecycleConfiguration": {
          "Rules": [
            {
              "AbortIncompleteMultipartUpload": {
                "DaysAfterInitiation": 1
              },
              "ExpirationInDays": 1,
              "Id": "AutoDeleteUploadedArtifacts",
              "Status": "Enabled"
            }
          ]
        },
        "LoggingConfiguration": {
          "DestinationBucketName": {
            "Ref": "S3BucketAccessLogsBucketCC80D389"
          },
          "LogFilePrefix": "upload-bucket-logs/"
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-cdk:auto-delete-objects",
            "Value": "true"
          },
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/UploadBucket/Resource"
      }
    },
    "S3BucketUploadBucketPolicyDA06AE85": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "S3BucketUploadBucketE3BDB254"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketUploadBucketE3BDB254",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketUploadBucketE3BDB254",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "s3:PutBucketPolicy",
                "s3:GetBucket*",
                "s3:List*",
                "s3:DeleteObject*"
              ],
              "Effect": "Allow",
              "Principal": {
                "AWS": {
                  "Fn::GetAtt": [
                    "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
                    "Arn"
                  ]
                }
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketUploadBucketE3BDB254",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketUploadBucketE3BDB254",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/UploadBucket/Policy/Resource"
      }
    },
    "S3BucketUploadBucketAutoDeleteObjectsCustomResource5A5F52DE": {
      "Type": "Custom::S3AutoDeleteObjects",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F",
            "Arn"
          ]
        },
        "BucketName": {
          "Ref": "S3BucketUploadBucketE3BDB254"
        }
      },
      "DependsOn": [
        "S3BucketUploadBucketPolicyDA06AE85"
      ],
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/S3Bucket/UploadBucket/AutoDeleteObjectsCustomResource/Default"
      }
    },
    "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ]
        },
        "ManagedPolicyArns": [
          {
            "Fn::Sub": "arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role"
      }
    },
    "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/assetfaa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6.zip"
        },
        "Timeout": 900,
        "MemorySize": 128,
        "Handler": "index.handler",
        "Role": {
          "Fn::GetAtt": [
            "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092",
            "Arn"
          ]
        },
        "Runtime": {
          "Fn::FindInMap": [
            "LatestNodeRuntimeMap",
            {
              "Ref": "AWS::Region"
            },
            "value"
          ]
        },
        "Description": {
          "Fn::Join": [
            "",
            [
              "Lambda function for auto-deleting objects in ",
              {
                "Ref": "S3BucketModelStorageBucket01547CCF"
              },
              " S3 bucket."
            ]
          ]
        }
      },
      "DependsOn": [
        "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler",
        "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6",
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "EcrNestedStackEcrNestedStackResourceD4475E64": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "Parameters": {
          "referencetodeepraceronawsNamespaceCB5FC4A9Ref": {
            "Ref": "Namespace"
          }
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "TemplateURL": {
          "Fn::Join": [
            "",
            [
              "https://",
              {
                "Fn::Sub": "solutions-${AWS::Region}"
              },
              ".s3.",
              {
                "Ref": "AWS::Region"
              },
              ".",
              {
                "Ref": "AWS::URLSuffix"
              },
              "/deepracer-on-aws/v1.1.1/deepraceronawsEcr47B19D6B.nested.template"
            ]
          ]
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Ecr.NestedStack/Ecr.NestedStackResource",
        "aws:asset:path": "deepracer-on-aws/v1.1.1/deepraceronawsEcr47B19D6B.nested.template",
        "aws:asset:property": "TemplateURL"
      }
    },
    "VpcuserExecutionVpc7A34B912": {
      "Type": "AWS::EC2::VPC",
      "Properties": {
        "CidrBlock": "10.0.0.0/16",
        "EnableDnsHostnames": true,
        "EnableDnsSupport": true,
        "InstanceTenancy": "default",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          },
          {
            "Key": "Name",
            "Value": "deepracer-on-aws/Vpc/userExecutionVpc"
          }
        ]
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Vpc/userExecutionVpc/Resource"
      }
    },
    "VpcuserExecutionVpcprivateSubnet1SubnetD75F691E": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "AvailabilityZone": {
          "Fn::Select": [
            0,
            {
              "Fn::GetAZs": ""
            }
          ]
        },
        "CidrBlock": "10.0.0.0/24",
        "MapPublicIpOnLaunch": false,
        "Tags": [
          {
            "Key": "aws-cdk:subnet-name",
            "Value": "private"
          },
          {
            "Key": "aws-cdk:subnet-type",
            "Value": "Isolated"
          },
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          },
          {
            "Key": "Name",
            "Value": "deepracer-on-aws/Vpc/userExecutionVpc/privateSubnet1"
          }
        ],
        "VpcId": {
          "Ref": "VpcuserExecutionVpc7A34B912"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Vpc/userExecutionVpc/privateSubnet1/Subnet"
      }
    },
    "VpcuserExecutionVpcprivateSubnet1RouteTable50843989": {
      "Type": "AWS::EC2::RouteTable",
      "Properties": {
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          },
          {
            "Key": "Name",
            "Value": "deepracer-on-aws/Vpc/userExecutionVpc/privateSubnet1"
          }
        ],
        "VpcId": {
          "Ref": "VpcuserExecutionVpc7A34B912"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Vpc/userExecutionVpc/privateSubnet1/RouteTable"
      }
    },
    "VpcuserExecutionVpcprivateSubnet1RouteTableAssociation58E053E1": {
      "Type": "AWS::EC2::SubnetRouteTableAssociation",
      "Properties": {
        "RouteTableId": {
          "Ref": "VpcuserExecutionVpcprivateSubnet1RouteTable50843989"
        },
        "SubnetId": {
          "Ref": "VpcuserExecutionVpcprivateSubnet1SubnetD75F691E"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Vpc/userExecutionVpc/privateSubnet1/RouteTableAssociation"
      }
    },
    "VpcuserExecutionVpcprivateSubnet2Subnet142EA691": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "AvailabilityZone": {
          "Fn::Select": [
            1,
            {
              "Fn::GetAZs": ""
            }
          ]
        },
        "CidrBlock": "10.0.1.0/24",
        "MapPublicIpOnLaunch": false,
        "Tags": [
          {
            "Key": "aws-cdk:subnet-name",
            "Value": "private"
          },
          {
            "Key": "aws-cdk:subnet-type",
            "Value": "Isolated"
          },
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          },
          {
            "Key": "Name",
            "Value": "deepracer-on-aws/Vpc/userExecutionVpc/privateSubnet2"
          }
        ],
        "VpcId": {
          "Ref": "VpcuserExecutionVpc7A34B912"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Vpc/userExecutionVpc/privateSubnet2/Subnet"
      }
    },
    "VpcuserExecutionVpcprivateSubnet2RouteTable59CE409C": {
      "Type": "AWS::EC2::RouteTable",
      "Properties": {
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          },
          {
            "Key": "Name",
            "Value": "deepracer-on-aws/Vpc/userExecutionVpc/privateSubnet2"
          }
        ],
        "VpcId": {
          "Ref": "VpcuserExecutionVpc7A34B912"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Vpc/userExecutionVpc/privateSubnet2/RouteTable"
      }
    },
    "VpcuserExecutionVpcprivateSubnet2RouteTableAssociationD4C2D580": {
      "Type": "AWS::EC2::SubnetRouteTableAssociation",
      "Properties": {
        "RouteTableId": {
          "Ref": "VpcuserExecutionVpcprivateSubnet2RouteTable59CE409C"
        },
        "SubnetId": {
          "Ref": "VpcuserExecutionVpcprivateSubnet2Subnet142EA691"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Vpc/userExecutionVpc/privateSubnet2/RouteTableAssociation"
      }
    },
    "VpcuserExecutionSecurityGroupD815F9BC": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupDescription": "deepracer-on-aws/Vpc/userExecutionSecurityGroup",
        "SecurityGroupEgress": [
          {
            "CidrIp": "255.255.255.255/32",
            "Description": "Disallow all traffic",
            "FromPort": 252,
            "IpProtocol": "icmp",
            "ToPort": 86
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "VpcId": {
          "Ref": "VpcuserExecutionVpc7A34B912"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Vpc/userExecutionSecurityGroup/Resource",
        "guard": {
          "SuppressedRules": [
            "SECURITY_GROUP_EGRESS_PORT_RANGE_RULE"
          ]
        }
      }
    },
    "VpcuserExecutionAcl25700C6A": {
      "Type": "AWS::EC2::NetworkAcl",
      "Properties": {
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          },
          {
            "Key": "Name",
            "Value": "deepracer-on-aws/Vpc/userExecutionAcl"
          }
        ],
        "VpcId": {
          "Ref": "VpcuserExecutionVpc7A34B912"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Vpc/userExecutionAcl/Resource"
      }
    },
    "VpcuserExecutionAclDefaultAssociationdeepraceronawsVpcuserExecutionVpcprivateSubnet1A44A7089AD627662": {
      "Type": "AWS::EC2::SubnetNetworkAclAssociation",
      "Properties": {
        "NetworkAclId": {
          "Ref": "VpcuserExecutionAcl25700C6A"
        },
        "SubnetId": {
          "Ref": "VpcuserExecutionVpcprivateSubnet1SubnetD75F691E"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Vpc/userExecutionAcl/DefaultAssociationdeepraceronawsVpcuserExecutionVpcprivateSubnet1A44A7089/Resource"
      }
    },
    "VpcuserExecutionAclDefaultAssociationdeepraceronawsVpcuserExecutionVpcprivateSubnet21BD56B924BA9ED68": {
      "Type": "AWS::EC2::SubnetNetworkAclAssociation",
      "Properties": {
        "NetworkAclId": {
          "Ref": "VpcuserExecutionAcl25700C6A"
        },
        "SubnetId": {
          "Ref": "VpcuserExecutionVpcprivateSubnet2Subnet142EA691"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Vpc/userExecutionAcl/DefaultAssociationdeepraceronawsVpcuserExecutionVpcprivateSubnet21BD56B92/Resource"
      }
    },
    "GlobalSettingsApplicationF700C2F1": {
      "Type": "AWS::AppConfig::Application",
      "Properties": {
        "Description": "DeepRacer on AWS AppConfig application",
        "Name": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-deepracer-on-aws-app"
            ]
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/GlobalSettings/Application"
      }
    },
    "GlobalSettingsEnvironment0C8D83D6": {
      "Type": "AWS::AppConfig::Environment",
      "Properties": {
        "ApplicationId": {
          "Ref": "GlobalSettingsApplicationF700C2F1"
        },
        "Description": "DeepRacer on AWS AppConfig environment",
        "Name": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-deepracer-on-aws-env"
            ]
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/GlobalSettings/Environment"
      }
    },
    "GlobalSettingsConfigurationProfile385EEC94": {
      "Type": "AWS::AppConfig::ConfigurationProfile",
      "Properties": {
        "ApplicationId": {
          "Ref": "GlobalSettingsApplicationF700C2F1"
        },
        "Description": "DeepRacer on AWS AppConfig configuration profile",
        "LocationUri": "hosted",
        "Name": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-deepracer-on-aws-config-prof"
            ]
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/GlobalSettings/ConfigurationProfile"
      }
    },
    "GlobalSettingsDeploymentStrategyEEDE25EB": {
      "Type": "AWS::AppConfig::DeploymentStrategy",
      "Properties": {
        "DeploymentDurationInMinutes": 0,
        "Description": "DeepRacer on AWS AppConfig deployment strategy",
        "FinalBakeTimeInMinutes": 0,
        "GrowthFactor": 100,
        "GrowthType": "LINEAR",
        "Name": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-deepracer-on-aws-deployment"
            ]
          ]
        },
        "ReplicateTo": "NONE",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/GlobalSettings/DeploymentStrategy"
      }
    },
    "GlobalSettingsHostedConfigurationVersion73F440C7": {
      "Type": "AWS::AppConfig::HostedConfigurationVersion",
      "Properties": {
        "ApplicationId": {
          "Ref": "GlobalSettingsApplicationF700C2F1"
        },
        "ConfigurationProfileId": {
          "Ref": "GlobalSettingsConfigurationProfile385EEC94"
        },
        "Content": "{\"usageQuotas\":{\"global\":{\"globalComputeMinutesLimit\":-1,\"globalModelCountLimit\":-1},\"newUser\":{\"newUserComputeMinutesLimit\":-1,\"newUserModelCountLimit\":-1}},\"registration\":{\"type\":\"invite-only\"}}",
        "ContentType": "application/json",
        "Description": "DeepRacer on AWS AppConfig hosted configuration version"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/GlobalSettings/HostedConfigurationVersion"
      }
    },
    "GlobalSettingsDeployment078FE457": {
      "Type": "AWS::AppConfig::Deployment",
      "Properties": {
        "ApplicationId": {
          "Ref": "GlobalSettingsApplicationF700C2F1"
        },
        "ConfigurationProfileId": {
          "Ref": "GlobalSettingsConfigurationProfile385EEC94"
        },
        "ConfigurationVersion": {
          "Ref": "GlobalSettingsHostedConfigurationVersion73F440C7"
        },
        "DeploymentStrategyId": {
          "Ref": "GlobalSettingsDeploymentStrategyEEDE25EB"
        },
        "Description": "DeepRacer on Aws AppConfig deployment",
        "EnvironmentId": {
          "Ref": "GlobalSettingsEnvironment0C8D83D6"
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/GlobalSettings/Deployment"
      }
    },
    "UserPoolPreSignUpFunctionServiceRole60148732": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/PreSignUpFunction/ServiceRole/Resource"
      }
    },
    "UserPoolPreSignUpFunctionServiceRoleDefaultPolicy8656B111": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:Query",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "DynamoDBTable7400F6BB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "DynamoDBTable7400F6BB",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "appconfig:GetLatestConfiguration",
                "appconfig:StartConfigurationSession"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":appconfig:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":application/",
                    {
                      "Fn::GetAtt": [
                        "GlobalSettingsApplicationF700C2F1",
                        "ApplicationId"
                      ]
                    },
                    "/environment/",
                    {
                      "Fn::GetAtt": [
                        "GlobalSettingsEnvironment0C8D83D6",
                        "EnvironmentId"
                      ]
                    },
                    "/configuration/",
                    {
                      "Fn::GetAtt": [
                        "GlobalSettingsConfigurationProfile385EEC94",
                        "ConfigurationProfileId"
                      ]
                    }
                  ]
                ]
              }
            },
            {
              "Action": [
                "appconfig:CreateHostedConfigurationVersion",
                "appconfig:StartDeployment"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":appconfig:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":application/",
                      {
                        "Fn::GetAtt": [
                          "GlobalSettingsApplicationF700C2F1",
                          "ApplicationId"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":appconfig:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":application/",
                      {
                        "Fn::GetAtt": [
                          "GlobalSettingsApplicationF700C2F1",
                          "ApplicationId"
                        ]
                      },
                      "/configurationprofile/",
                      {
                        "Fn::GetAtt": [
                          "GlobalSettingsConfigurationProfile385EEC94",
                          "ConfigurationProfileId"
                        ]
                      }
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "appconfig:StartDeployment",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":appconfig:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":deploymentstrategy/",
                      {
                        "Fn::GetAtt": [
                          "GlobalSettingsDeploymentStrategyEEDE25EB",
                          "Id"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":appconfig:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":application/",
                      {
                        "Fn::GetAtt": [
                          "GlobalSettingsApplicationF700C2F1",
                          "ApplicationId"
                        ]
                      },
                      "/environment/",
                      {
                        "Fn::GetAtt": [
                          "GlobalSettingsEnvironment0C8D83D6",
                          "EnvironmentId"
                        ]
                      }
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolPreSignUpFunctionServiceRoleDefaultPolicy8656B111",
        "Roles": [
          {
            "Ref": "UserPoolPreSignUpFunctionServiceRole60148732"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/PreSignUpFunction/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolPreSignUpFunction0F50514D": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset07b05cdf4cb9621cc771b0f537ad1ec07bcfa5eee79764543ec0b76613bd61c5.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": "",
            "AWS_APPCONFIG_APPLICATION_ID": {
              "Fn::GetAtt": [
                "GlobalSettingsApplicationF700C2F1",
                "ApplicationId"
              ]
            },
            "AWS_APPCONFIG_ENVIRONMENT_ID": {
              "Fn::GetAtt": [
                "GlobalSettingsEnvironment0C8D83D6",
                "EnvironmentId"
              ]
            },
            "AWS_APPCONFIG_CONFIGURATION_PROFILE_ID": {
              "Fn::GetAtt": [
                "GlobalSettingsConfigurationProfile385EEC94",
                "ConfigurationProfileId"
              ]
            },
            "AWS_APPCONFIG_DEPLOYMENT_STRATEGY": {
              "Fn::GetAtt": [
                "GlobalSettingsDeploymentStrategyEEDE25EB",
                "Id"
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-PreSignUpFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "UserPoolPreSignUpFunctionServiceRole60148732",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "UserPoolPreSignUpFunctionServiceRoleDefaultPolicy8656B111",
        "UserPoolPreSignUpFunctionServiceRole60148732"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/PreSignUpFunction/Resource",
        "aws:asset:path": "asset.07b05cdf4cb9621cc771b0f537ad1ec07bcfa5eee79764543ec0b76613bd61c5",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UserPoolPreSignUpErrorAlarm3307DC04": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmDescription": "Alert when a PreSignUpFunction failure occurs",
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "Dimensions": [
          {
            "Name": "FunctionName",
            "Value": {
              "Ref": "UserPoolPreSignUpFunction0F50514D"
            }
          }
        ],
        "EvaluationPeriods": 1,
        "MetricName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-PreSignUpFunctionErrors"
            ]
          ]
        },
        "Namespace": "AWS/Lambda",
        "Period": 60,
        "Statistic": "Sum",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Threshold": 1,
        "TreatMissingData": "notBreaching"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/PreSignUpErrorAlarm/Resource"
      }
    },
    "UserPoolPostConfirmationFunctionServiceRoleB9F3147A": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/PostConfirmationFunction/ServiceRole/Resource"
      }
    },
    "UserPoolPostConfirmationFunctionServiceRoleDefaultPolicy7E308CF3": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": "cognito-idp:AdminAddUserToGroup",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":cognito-idp:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":userpool/",
                    {
                      "Ref": "AWS::Region"
                    },
                    "_*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolPostConfirmationFunctionServiceRoleDefaultPolicy7E308CF3",
        "Roles": [
          {
            "Ref": "UserPoolPostConfirmationFunctionServiceRoleB9F3147A"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/PostConfirmationFunction/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolPostConfirmationFunctionB434DC55": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset4cbe97eaf578fbd88c5a6964bb1fb82795ea2a875f68b70134042a80e95ecee3.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": ""
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-PostConfirmationFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "UserPoolPostConfirmationFunctionServiceRoleB9F3147A",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "UserPoolPostConfirmationFunctionServiceRoleDefaultPolicy7E308CF3",
        "UserPoolPostConfirmationFunctionServiceRoleB9F3147A"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/PostConfirmationFunction/Resource",
        "aws:asset:path": "asset.4cbe97eaf578fbd88c5a6964bb1fb82795ea2a875f68b70134042a80e95ecee3",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UserPoolPostSignUpErrorAlarmBF8E665E": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmDescription": "Alert when a PostSignUpFunction failure occurs",
        "ComparisonOperator": "GreaterThanOrEqualToThreshold",
        "Dimensions": [
          {
            "Name": "FunctionName",
            "Value": {
              "Ref": "UserPoolPostConfirmationFunctionB434DC55"
            }
          }
        ],
        "EvaluationPeriods": 1,
        "MetricName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-PostSignUpFunctionErrors"
            ]
          ]
        },
        "Namespace": "AWS/Lambda",
        "Period": 60,
        "Statistic": "Sum",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Threshold": 1,
        "TreatMissingData": "notBreaching"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/PostSignUpErrorAlarm/Resource"
      }
    },
    "UserPoolPreSignUpCognito975866FE": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "UserPoolPreSignUpFunction0F50514D",
            "Arn"
          ]
        },
        "Principal": "cognito-idp.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "UserPool6D0DFADB",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/UserPool/PreSignUpCognito"
      }
    },
    "UserPoolPostConfirmationCognitoCC9615D3": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "UserPoolPostConfirmationFunctionB434DC55",
            "Arn"
          ]
        },
        "Principal": "cognito-idp.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "UserPool6D0DFADB",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/UserPool/PostConfirmationCognito"
      }
    },
    "UserPool6D0DFADB": {
      "Type": "AWS::Cognito::UserPool",
      "Properties": {
        "AccountRecoverySetting": {
          "RecoveryMechanisms": [
            {
              "Name": "verified_phone_number",
              "Priority": 1
            },
            {
              "Name": "verified_email",
              "Priority": 2
            }
          ]
        },
        "AdminCreateUserConfig": {
          "AllowAdminCreateUserOnly": true,
          "InviteMessageTemplate": {
            "EmailMessage": "Hello,<br><br>You have been invited to join DeepRacer on AWS. Your temporary password is: {####}<br><br>You will be asked to create a new password upon successful verification.<br><br><br><br><i>Account ID: {username}</i>",
            "EmailSubject": "Welcome to DeepRacer on AWS"
          }
        },
        "AliasAttributes": [
          "email"
        ],
        "AutoVerifiedAttributes": [
          "email"
        ],
        "EmailConfiguration": {
          "EmailSendingAccount": {
            "Fn::If": [
              "IsSesEnabled",
              "DEVELOPER",
              "COGNITO_DEFAULT"
            ]
          },
          "From": {
            "Fn::If": [
              "IsSesEnabled",
              {
                "Ref": "SesVerifiedEmail"
              },
              {
                "Ref": "AWS::NoValue"
              }
            ]
          },
          "SourceArn": {
            "Fn::If": [
              "IsSesEnabled",
              {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":ses:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":identity/",
                    {
                      "Ref": "SesVerifiedEmail"
                    }
                  ]
                ]
              },
              {
                "Ref": "AWS::NoValue"
              }
            ]
          }
        },
        "EmailVerificationMessage": "The verification code to your new account is {####}",
        "EmailVerificationSubject": "Verify your new account",
        "LambdaConfig": {
          "CustomMessage": {
            "Fn::GetAtt": [
              "UserPoolCognitoEmailMetricFunction89E4CA7C",
              "Arn"
            ]
          },
          "PostConfirmation": {
            "Fn::GetAtt": [
              "UserPoolPostConfirmationFunctionB434DC55",
              "Arn"
            ]
          },
          "PreSignUp": {
            "Fn::GetAtt": [
              "UserPoolPreSignUpFunction0F50514D",
              "Arn"
            ]
          }
        },
        "Policies": {
          "PasswordPolicy": {
            "MinimumLength": 8,
            "RequireLowercase": true,
            "RequireNumbers": true,
            "RequireSymbols": true,
            "RequireUppercase": true
          }
        },
        "SmsVerificationMessage": "The verification code to your new account is {####}",
        "UserPoolName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndyUserPool"
            ]
          ]
        },
        "UserPoolTags": {
          "aws-solutions:dr-id": {
            "Fn::Join": [
              "",
              [
                "DeepRacerOnAWS-",
                {
                  "Ref": "Namespace"
                }
              ]
            ]
          }
        },
        "UsernameConfiguration": {
          "CaseSensitive": false
        },
        "VerificationMessageTemplate": {
          "DefaultEmailOption": "CONFIRM_WITH_CODE",
          "EmailMessage": "The verification code to your new account is {####}",
          "EmailSubject": "Verify your new account",
          "SmsMessage": "The verification code to your new account is {####}"
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/UserPool/Resource"
      }
    },
    "UserPoolWebClientEB451012": {
      "Type": "AWS::Cognito::UserPoolClient",
      "Properties": {
        "AllowedOAuthFlows": [
          "implicit",
          "code"
        ],
        "AllowedOAuthFlowsUserPoolClient": true,
        "AllowedOAuthScopes": [
          "profile",
          "phone",
          "email",
          "openid",
          "aws.cognito.signin.user.admin"
        ],
        "CallbackURLs": [
          "https://example.com"
        ],
        "ExplicitAuthFlows": [
          "ALLOW_USER_PASSWORD_AUTH",
          "ALLOW_USER_SRP_AUTH",
          "ALLOW_REFRESH_TOKEN_AUTH"
        ],
        "RefreshTokenValidity": 1440,
        "SupportedIdentityProviders": [
          "COGNITO"
        ],
        "TokenValidityUnits": {
          "RefreshToken": "minutes"
        },
        "UserPoolId": {
          "Ref": "UserPool6D0DFADB"
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/UserPool/WebClient/Resource"
      }
    },
    "UserPoolCognitoEmailMetricFunctionServiceRole0BD0B776": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/CognitoEmailMetricFunction/ServiceRole/Resource"
      }
    },
    "UserPoolCognitoEmailMetricFunctionServiceRoleDefaultPolicy80759D86": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": "cloudwatch:PutMetricData",
              "Condition": {
                "StringEquals": {
                  "cloudwatch:namespace": "DeepRacerOnAWS/Email"
                }
              },
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolCognitoEmailMetricFunctionServiceRoleDefaultPolicy80759D86",
        "Roles": [
          {
            "Ref": "UserPoolCognitoEmailMetricFunctionServiceRole0BD0B776"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/CognitoEmailMetricFunction/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolCognitoEmailMetricFunction89E4CA7C": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asseta0490b34709a603e8b788045a23bf72f5eedf41db7425793127f8d5180635b77.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": ""
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-CognitoEmailMetricFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "UserPoolCognitoEmailMetricFunctionServiceRole0BD0B776",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "UserPoolCognitoEmailMetricFunctionServiceRoleDefaultPolicy80759D86",
        "UserPoolCognitoEmailMetricFunctionServiceRole0BD0B776"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/CognitoEmailMetricFunction/Resource",
        "aws:asset:path": "asset.a0490b34709a603e8b788045a23bf72f5eedf41db7425793127f8d5180635b77",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UserPoolCognitoEmailMetricFunctionAllowCognitoInvoke0BE1513D": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "UserPoolCognitoEmailMetricFunction89E4CA7C",
            "Arn"
          ]
        },
        "Principal": "cognito-idp.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "UserPool6D0DFADB",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/CognitoEmailMetricFunction/AllowCognitoInvoke"
      }
    },
    "UserPoolEmailVolumeAnomalyDetector2BE115EB": {
      "Type": "AWS::CloudWatch::AnomalyDetector",
      "Properties": {
        "Dimensions": [
          {
            "Name": "Namespace",
            "Value": {
              "Ref": "Namespace"
            }
          }
        ],
        "MetricName": "TransactionalEmailSent",
        "Namespace": "DeepRacerOnAWS/Email",
        "Stat": "Sum"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/EmailVolumeAnomalyDetector"
      },
      "Condition": "IsSesEnabled"
    },
    "UserPoolEmailVolumeAnomalyAlarm13AA4C91": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmDescription": "Unusual email sending volume detected",
        "ComparisonOperator": "LessThanLowerOrGreaterThanUpperThreshold",
        "DatapointsToAlarm": 2,
        "EvaluationPeriods": 3,
        "Metrics": [
          {
            "Id": "emailVolume",
            "MetricStat": {
              "Metric": {
                "Dimensions": [
                  {
                    "Name": "Namespace",
                    "Value": {
                      "Ref": "Namespace"
                    }
                  }
                ],
                "MetricName": "TransactionalEmailSent",
                "Namespace": "DeepRacerOnAWS/Email"
              },
              "Period": 3600,
              "Stat": "Sum"
            },
            "ReturnData": true
          },
          {
            "Expression": "ANOMALY_DETECTION_BAND(emailVolume, 2)",
            "Id": "anomalyBand",
            "ReturnData": true
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "ThresholdMetricId": "anomalyBand",
        "TreatMissingData": "notBreaching"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/EmailVolumeAnomalyAlarm"
      },
      "Condition": "IsSesEnabled"
    },
    "UserPoolSesBounceRateAlarmDB4AACA1": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmDescription": "SES bounce rate exceeds 5% — risk of SES sending suspension",
        "ComparisonOperator": "GreaterThanThreshold",
        "EvaluationPeriods": 1,
        "MetricName": "Reputation.BounceRate",
        "Namespace": "AWS/SES",
        "Period": 300,
        "Statistic": "Average",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Threshold": 0.05,
        "TreatMissingData": "notBreaching"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/SesBounceRateAlarm"
      },
      "Condition": "IsSesEnabled"
    },
    "UserPoolSesComplaintRateAlarm3DF4D832": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmDescription": "SES complaint rate exceeds 0.1% — risk of SES sending suspension",
        "ComparisonOperator": "GreaterThanThreshold",
        "EvaluationPeriods": 1,
        "MetricName": "Reputation.ComplaintRate",
        "Namespace": "AWS/SES",
        "Period": 300,
        "Statistic": "Average",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Threshold": 0.001,
        "TreatMissingData": "notBreaching"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/SesComplaintRateAlarm"
      },
      "Condition": "IsSesEnabled"
    },
    "UserPoolIdentityPoolA58D72D6": {
      "Type": "AWS::Cognito::IdentityPool",
      "Properties": {
        "AllowUnauthenticatedIdentities": false,
        "CognitoIdentityProviders": [
          {
            "ClientId": {
              "Ref": "UserPoolWebClientEB451012"
            },
            "ProviderName": {
              "Fn::GetAtt": [
                "UserPool6D0DFADB",
                "ProviderName"
              ]
            }
          }
        ],
        "IdentityPoolName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-dr-idp"
            ]
          ]
        },
        "IdentityPoolTags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/IdentityPool"
      }
    },
    "UserPoolAdminRole3DAD93BC": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRoleWithWebIdentity",
              "Condition": {
                "StringEquals": {
                  "cognito-identity.amazonaws.com:aud": {
                    "Ref": "UserPoolIdentityPoolA58D72D6"
                  }
                },
                "ForAnyValue:StringLike": {
                  "cognito-identity.amazonaws.com:amr": "authenticated"
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Federated": "cognito-identity.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/AdminRole/Resource"
      }
    },
    "UserPoolAdminRoleDefaultPolicyE95DE84C": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload",
                "s3:ListBucketMultipartUploads",
                "s3:CreateMultipartUpload",
                "s3:CompleteMultipartUpload"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "S3BucketUploadBucketE3BDB254",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              }
            },
            {
              "Action": "execute-api:Invoke",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":execute-api:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":",
                    {
                      "Fn::GetAtt": [
                        "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                        "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                      ]
                    },
                    "/*/*/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolAdminRoleDefaultPolicyE95DE84C",
        "Roles": [
          {
            "Ref": "UserPoolAdminRole3DAD93BC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/AdminRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolRaceFacilitatorRole275C3028": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRoleWithWebIdentity",
              "Condition": {
                "StringEquals": {
                  "cognito-identity.amazonaws.com:aud": {
                    "Ref": "UserPoolIdentityPoolA58D72D6"
                  }
                },
                "ForAnyValue:StringLike": {
                  "cognito-identity.amazonaws.com:amr": "authenticated"
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Federated": "cognito-identity.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/RaceFacilitatorRole/Resource"
      }
    },
    "UserPoolRaceFacilitatorRoleDefaultPolicy81FB4BF6": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload",
                "s3:ListBucketMultipartUploads",
                "s3:CreateMultipartUpload",
                "s3:CompleteMultipartUpload"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "S3BucketUploadBucketE3BDB254",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              }
            },
            {
              "Action": "execute-api:Invoke",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/importmodel"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/importmodel"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/leaderboards"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/leaderboards"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/leaderboards"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/DELETE/leaderboards/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/leaderboards/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/leaderboards/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/PATCH/leaderboards/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/leaderboards/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/leaderboards/*/ranking"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/leaderboards/*/ranking"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/leaderboards/*/rankings"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/leaderboards/*/rankings"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/leaderboards/*/submissions"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/leaderboards/*/submissions"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/leaderboards/*/submissions"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/models"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/models"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/DELETE/models/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/models/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/PATCH/models/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models/*/evaluation"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/models/*/evaluation"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/models/*/evaluations"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models/*/evaluations"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/models/*/evaluations/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models/*/evaluations/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/models/*/getasset"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models/*/getasset"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/profile"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/profile"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/PATCH/profile"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/profile"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/rewardFunction"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/rewardFunction"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/settings/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/settings/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolRaceFacilitatorRoleDefaultPolicy81FB4BF6",
        "Roles": [
          {
            "Ref": "UserPoolRaceFacilitatorRole275C3028"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/RaceFacilitatorRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolRacerRoleE35E47D7": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRoleWithWebIdentity",
              "Condition": {
                "StringEquals": {
                  "cognito-identity.amazonaws.com:aud": {
                    "Ref": "UserPoolIdentityPoolA58D72D6"
                  }
                },
                "ForAnyValue:StringLike": {
                  "cognito-identity.amazonaws.com:amr": "authenticated"
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Federated": "cognito-identity.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/RacerRole/Resource"
      }
    },
    "UserPoolRacerRoleDefaultPolicyBAF829F4": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload",
                "s3:ListBucketMultipartUploads",
                "s3:CreateMultipartUpload",
                "s3:CompleteMultipartUpload"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "S3BucketUploadBucketE3BDB254",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              }
            },
            {
              "Action": "execute-api:Invoke",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/importmodel"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/importmodel"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/leaderboards"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/leaderboards"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/leaderboards/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/leaderboards/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/leaderboards/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/leaderboards/*/ranking"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/leaderboards/*/ranking"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/leaderboards/*/rankings"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/leaderboards/*/rankings"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/leaderboards/*/submissions"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/leaderboards/*/submissions"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/leaderboards/*/submissions"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/models"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/models"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/DELETE/models/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/models/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/PATCH/models/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models/*/evaluation"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/models/*/evaluation"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/models/*/evaluations"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models/*/evaluations"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/models/*/evaluations/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models/*/evaluations/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/models/*/getasset"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/models/*/getasset"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/profile"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/profile"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/PATCH/profile"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/profile"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/rewardFunction"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/POST/rewardFunction"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/GET/settings/*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":execute-api:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*/OPTIONS/settings/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolRacerRoleDefaultPolicyBAF829F4",
        "Roles": [
          {
            "Ref": "UserPoolRacerRoleE35E47D7"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/RacerRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolIdentityPoolRoleAttachmentE127856F": {
      "Type": "AWS::Cognito::IdentityPoolRoleAttachment",
      "Properties": {
        "IdentityPoolId": {
          "Ref": "UserPoolIdentityPoolA58D72D6"
        },
        "RoleMappings": {
          "cognito-user-pool": {
            "AmbiguousRoleResolution": "Deny",
            "IdentityProvider": {
              "Fn::Join": [
                "",
                [
                  {
                    "Fn::GetAtt": [
                      "UserPool6D0DFADB",
                      "ProviderName"
                    ]
                  },
                  ":",
                  {
                    "Ref": "UserPoolWebClientEB451012"
                  }
                ]
              ]
            },
            "RulesConfiguration": {
              "Rules": [
                {
                  "Claim": "cognito:groups",
                  "MatchType": "Contains",
                  "RoleARN": {
                    "Fn::GetAtt": [
                      "UserPoolAdminRole3DAD93BC",
                      "Arn"
                    ]
                  },
                  "Value": "dr-admins"
                },
                {
                  "Claim": "cognito:groups",
                  "MatchType": "Contains",
                  "RoleARN": {
                    "Fn::GetAtt": [
                      "UserPoolRaceFacilitatorRole275C3028",
                      "Arn"
                    ]
                  },
                  "Value": "dr-race-facilitators"
                },
                {
                  "Claim": "cognito:groups",
                  "MatchType": "Contains",
                  "RoleARN": {
                    "Fn::GetAtt": [
                      "UserPoolRacerRoleE35E47D7",
                      "Arn"
                    ]
                  },
                  "Value": "dr-racers"
                }
              ]
            },
            "Type": "Rules"
          }
        },
        "Roles": {}
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/IdentityPoolRoleAttachment"
      }
    },
    "UserPoolAddAdminToGroupFunctionServiceRole8634B616": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/AddAdminToGroupFunction/ServiceRole/Resource"
      }
    },
    "UserPoolAddAdminToGroupFunctionServiceRoleDefaultPolicy4B44BBDD": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "cognito-idp:AdminAddUserToGroup",
                "cognito-idp:AdminCreateUser"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "UserPool6D0DFADB",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolAddAdminToGroupFunctionServiceRoleDefaultPolicy4B44BBDD",
        "Roles": [
          {
            "Ref": "UserPoolAddAdminToGroupFunctionServiceRole8634B616"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/AddAdminToGroupFunction/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolAddAdminToGroupFunctionCA8F20A2": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset3f11bc49341749c4dfba49a7f47285d0a597076305934dd29ec26bc96f33a9eb.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": ""
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-AddAdminToGroupFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "UserPoolAddAdminToGroupFunctionServiceRole8634B616",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "UserPoolAddAdminToGroupFunctionServiceRoleDefaultPolicy4B44BBDD",
        "UserPoolAddAdminToGroupFunctionServiceRole8634B616"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/AddAdminToGroupFunction/Resource",
        "aws:asset:path": "asset.3f11bc49341749c4dfba49a7f47285d0a597076305934dd29ec26bc96f33a9eb",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UserPoolAddAdminToGroupProviderframeworkonEventServiceRole678D0DCE": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/AddAdminToGroupProvider/framework-onEvent/ServiceRole/Resource"
      }
    },
    "UserPoolAddAdminToGroupProviderframeworkonEventServiceRoleDefaultPolicy2EC1138F": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "UserPoolAddAdminToGroupFunctionCA8F20A2",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "UserPoolAddAdminToGroupFunctionCA8F20A2",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:GetFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "UserPoolAddAdminToGroupFunctionCA8F20A2",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolAddAdminToGroupProviderframeworkonEventServiceRoleDefaultPolicy2EC1138F",
        "Roles": [
          {
            "Ref": "UserPoolAddAdminToGroupProviderframeworkonEventServiceRole678D0DCE"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/AddAdminToGroupProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolAddAdminToGroupProviderframeworkonEventBBE36F99": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/assetbdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
        },
        "Description": "AWS CDK resource provider framework - onEvent (deepracer-on-aws/UserPool/AddAdminToGroupProvider)",
        "Environment": {
          "Variables": {
            "USER_ON_EVENT_FUNCTION_ARN": {
              "Fn::GetAtt": [
                "UserPoolAddAdminToGroupFunctionCA8F20A2",
                "Arn"
              ]
            }
          }
        },
        "Handler": "framework.onEvent",
        "LoggingConfig": {
          "LogGroup": {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          }
        },
        "Role": {
          "Fn::GetAtt": [
            "UserPoolAddAdminToGroupProviderframeworkonEventServiceRole678D0DCE",
            "Arn"
          ]
        },
        "Runtime": {
          "Fn::FindInMap": [
            "LatestNodeRuntimeMap",
            {
              "Ref": "AWS::Region"
            },
            "value"
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "UserPoolAddAdminToGroupProviderframeworkonEventServiceRoleDefaultPolicy2EC1138F",
        "UserPoolAddAdminToGroupProviderframeworkonEventServiceRole678D0DCE"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/AddAdminToGroupProvider/framework-onEvent/Resource",
        "aws:asset:path": "asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UserPoolAddAdminToGroup94C99B49": {
      "Type": "AWS::CloudFormation::CustomResource",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "UserPoolAddAdminToGroupProviderframeworkonEventBBE36F99",
            "Arn"
          ]
        },
        "userPoolId": {
          "Ref": "UserPool6D0DFADB"
        },
        "adminEmail": {
          "Ref": "AdminEmail"
        }
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/AddAdminToGroup/Default"
      }
    },
    "UserPoolAdminUserPoolGroup21281686": {
      "Type": "AWS::Cognito::UserPoolGroup",
      "Properties": {
        "Description": "DeepRacer on AWS - Admin user group",
        "GroupName": "dr-admins",
        "UserPoolId": {
          "Ref": "UserPool6D0DFADB"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/AdminUserPoolGroup"
      }
    },
    "UserPoolRaceFacilitatorUserPoolGroup8F192B0A": {
      "Type": "AWS::Cognito::UserPoolGroup",
      "Properties": {
        "Description": "DeepRacer on AWS - Race facilitator user group",
        "GroupName": "dr-race-facilitators",
        "UserPoolId": {
          "Ref": "UserPool6D0DFADB"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/RaceFacilitatorUserPoolGroup"
      }
    },
    "UserPoolRacerUserPoolGroupC1E2106C": {
      "Type": "AWS::Cognito::UserPoolGroup",
      "Properties": {
        "Description": "DeepRacer on AWS - Racer user group",
        "GroupName": "dr-racers",
        "UserPoolId": {
          "Ref": "UserPool6D0DFADB"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/RacerUserPoolGroup"
      }
    },
    "UserPoolProfileRoleChangeHandlerServiceRoleA4D4401E": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/ProfileRoleChangeHandler/ServiceRole/Resource"
      }
    },
    "UserPoolProfileRoleChangeHandlerServiceRoleDefaultPolicy2E76051B": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": "cognito-idp:ListUsers",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "UserPool6D0DFADB",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "DynamoDBTable7400F6BB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "DynamoDBTable7400F6BB",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolProfileRoleChangeHandlerServiceRoleDefaultPolicy2E76051B",
        "Roles": [
          {
            "Ref": "UserPoolProfileRoleChangeHandlerServiceRoleA4D4401E"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/ProfileRoleChangeHandler/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolProfileRoleChangeHandlerA3E1F617": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset0045c2d19eb6714a3dcf1b320e9115ea6bf29460db224d8f504b1a5f799e6903.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": ""
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-ProfileRoleChangeHandler"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "UserPoolProfileRoleChangeHandlerServiceRoleA4D4401E",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "UserPoolProfileRoleChangeHandlerServiceRoleDefaultPolicy2E76051B",
        "UserPoolProfileRoleChangeHandlerServiceRoleA4D4401E"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/ProfileRoleChangeHandler/Resource",
        "aws:asset:path": "asset.0045c2d19eb6714a3dcf1b320e9115ea6bf29460db224d8f504b1a5f799e6903",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UserPoolProfileRoleChangeHandlerAllowEventRuleInvokeDF1B7BD1": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "UserPoolProfileRoleChangeHandlerA3E1F617",
            "Arn"
          ]
        },
        "Principal": "events.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":events:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":rule/CognitoUserPoolGroupChangeRule*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/ProfileRoleChangeHandler/AllowEventRuleInvoke"
      }
    },
    "UserPoolCognitoUserPoolGroupChangeRuleA6AAB423": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "EventPattern": {
          "source": [
            "aws.cognito-idp"
          ],
          "detail-type": [
            "AWS API Call via CloudTrail"
          ],
          "detail": {
            "eventSource": [
              "cognito-idp.amazonaws.com"
            ],
            "eventName": [
              "AdminAddUserToGroup",
              "AdminRemoveUserFromGroup"
            ],
            "requestParameters": {
              "userPoolId": [
                {
                  "Ref": "UserPool6D0DFADB"
                }
              ]
            }
          }
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "UserPoolProfileRoleChangeHandlerA3E1F617",
                "Arn"
              ]
            },
            "Id": "Target0"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/CognitoUserPoolGroupChangeRule/Resource"
      }
    },
    "UserPoolCognitoUserPoolGroupChangeRuleAllowEventRuledeepraceronawsUserPoolProfileRoleChangeHandler58A81962050981E7": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "UserPoolProfileRoleChangeHandlerA3E1F617",
            "Arn"
          ]
        },
        "Principal": "events.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "UserPoolCognitoUserPoolGroupChangeRuleA6AAB423",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/CognitoUserPoolGroupChangeRule/AllowEventRuledeepraceronawsUserPoolProfileRoleChangeHandler58A81962"
      }
    },
    "UserPoolProfileEmailChangeHandlerServiceRole6AEF8601": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/ProfileEmailChangeHandler/ServiceRole/Resource"
      }
    },
    "UserPoolProfileEmailChangeHandlerServiceRoleDefaultPolicy5B1B98C7": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "cognito-idp:AdminGetUser",
                "cognito-idp:ListUsers"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "UserPool6D0DFADB",
                  "Arn"
                ]
              }
            },
            {
              "Action": [
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "DynamoDBTable7400F6BB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "DynamoDBTable7400F6BB",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolProfileEmailChangeHandlerServiceRoleDefaultPolicy5B1B98C7",
        "Roles": [
          {
            "Ref": "UserPoolProfileEmailChangeHandlerServiceRole6AEF8601"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/ProfileEmailChangeHandler/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolProfileEmailChangeHandlerDC3D1702": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset2714d19522eb18b475af159d371720efa3b376913dce86f6b363d4df50e7d925.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": ""
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-ProfileEmailChangeHandler"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "UserPoolProfileEmailChangeHandlerServiceRole6AEF8601",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "UserPoolProfileEmailChangeHandlerServiceRoleDefaultPolicy5B1B98C7",
        "UserPoolProfileEmailChangeHandlerServiceRole6AEF8601"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/ProfileEmailChangeHandler/Resource",
        "aws:asset:path": "asset.2714d19522eb18b475af159d371720efa3b376913dce86f6b363d4df50e7d925",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UserPoolProfileEmailChangeHandlerAllowEmailChangeEventRuleInvokeBDC6534E": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "UserPoolProfileEmailChangeHandlerDC3D1702",
            "Arn"
          ]
        },
        "Principal": "events.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":events:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":rule/CognitoUserPoolEmailChangeRule*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/ProfileEmailChangeHandler/AllowEmailChangeEventRuleInvoke"
      }
    },
    "UserPoolCognitoUserPoolEmailChangeRuleE67E708E": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "EventPattern": {
          "source": [
            "aws.cognito-idp"
          ],
          "detail-type": [
            "AWS API Call via CloudTrail"
          ],
          "detail": {
            "eventSource": [
              "cognito-idp.amazonaws.com"
            ],
            "eventName": [
              "AdminUpdateUserAttributes"
            ],
            "requestParameters": {
              "userPoolId": [
                {
                  "Ref": "UserPool6D0DFADB"
                }
              ]
            }
          }
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Fn::GetAtt": [
                "UserPoolProfileEmailChangeHandlerDC3D1702",
                "Arn"
              ]
            },
            "Id": "Target0"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/CognitoUserPoolEmailChangeRule/Resource"
      }
    },
    "UserPoolCognitoUserPoolEmailChangeRuleAllowEventRuledeepraceronawsUserPoolProfileEmailChangeHandler17F67E7D0BA4FCEE": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "UserPoolProfileEmailChangeHandlerDC3D1702",
            "Arn"
          ]
        },
        "Principal": "events.amazonaws.com",
        "SourceArn": {
          "Fn::GetAtt": [
            "UserPoolCognitoUserPoolEmailChangeRuleE67E708E",
            "Arn"
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/CognitoUserPoolEmailChangeRule/AllowEventRuledeepraceronawsUserPoolProfileEmailChangeHandler17F67E7D"
      }
    },
    "UserPoolEmailTemplateSyncHandlerServiceRole37B433AC": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/EmailTemplateSyncHandler/ServiceRole/Resource"
      }
    },
    "UserPoolEmailTemplateSyncHandlerServiceRoleDefaultPolicyE0CD50A9": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "cognito-idp:UpdateUserPool",
                "cognito-idp:DescribeUserPool",
                "cognito-idp:AdminCreateUser",
                "cognito-idp:AdminGetUser",
                "cognito-idp:ListUsers",
                "cloudformation:DescribeStacks"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "UserPool6D0DFADB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":cloudformation:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":stack/deepracer-on-aws/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolEmailTemplateSyncHandlerServiceRoleDefaultPolicyE0CD50A9",
        "Roles": [
          {
            "Ref": "UserPoolEmailTemplateSyncHandlerServiceRole37B433AC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/EmailTemplateSyncHandler/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolEmailTemplateSyncHandler88905103": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset9e5de8194bd4be88a29f7dea5efb92659867804525d815b521f05e6cc6dec942.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": "",
            "USER_POOL_ID": {
              "Ref": "UserPool6D0DFADB"
            },
            "ADMIN_EMAIL": {
              "Ref": "AdminEmail"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-EmailTemplateSyncHandler"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "UserPoolEmailTemplateSyncHandlerServiceRole37B433AC",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "UserPoolEmailTemplateSyncHandlerServiceRoleDefaultPolicyE0CD50A9",
        "UserPoolEmailTemplateSyncHandlerServiceRole37B433AC"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/EmailTemplateSyncHandler/Resource",
        "aws:asset:path": "asset.9e5de8194bd4be88a29f7dea5efb92659867804525d815b521f05e6cc6dec942",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UserPoolUpdateEmailTemplateWithUrlProviderframeworkonEventServiceRole10F03A52": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/UpdateEmailTemplateWithUrlProvider/framework-onEvent/ServiceRole/Resource"
      }
    },
    "UserPoolUpdateEmailTemplateWithUrlProviderframeworkonEventServiceRoleDefaultPolicy0312172F": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "UserPoolEmailTemplateSyncHandler88905103",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "UserPoolEmailTemplateSyncHandler88905103",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:GetFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "UserPoolEmailTemplateSyncHandler88905103",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UserPoolUpdateEmailTemplateWithUrlProviderframeworkonEventServiceRoleDefaultPolicy0312172F",
        "Roles": [
          {
            "Ref": "UserPoolUpdateEmailTemplateWithUrlProviderframeworkonEventServiceRole10F03A52"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/UpdateEmailTemplateWithUrlProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UserPoolUpdateEmailTemplateWithUrlProviderframeworkonEventCE62CA1D": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/assetbdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
        },
        "Description": "AWS CDK resource provider framework - onEvent (deepracer-on-aws/UserPool/UpdateEmailTemplateWithUrlProvider)",
        "Environment": {
          "Variables": {
            "USER_ON_EVENT_FUNCTION_ARN": {
              "Fn::GetAtt": [
                "UserPoolEmailTemplateSyncHandler88905103",
                "Arn"
              ]
            }
          }
        },
        "Handler": "framework.onEvent",
        "LoggingConfig": {
          "LogGroup": {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          }
        },
        "Role": {
          "Fn::GetAtt": [
            "UserPoolUpdateEmailTemplateWithUrlProviderframeworkonEventServiceRole10F03A52",
            "Arn"
          ]
        },
        "Runtime": {
          "Fn::FindInMap": [
            "LatestNodeRuntimeMap",
            {
              "Ref": "AWS::Region"
            },
            "value"
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "UserPoolUpdateEmailTemplateWithUrlProviderframeworkonEventServiceRoleDefaultPolicy0312172F",
        "UserPoolUpdateEmailTemplateWithUrlProviderframeworkonEventServiceRole10F03A52"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/UpdateEmailTemplateWithUrlProvider/framework-onEvent/Resource",
        "aws:asset:path": "asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UserPoolUpdateEmailTemplateWithUrlB361E767": {
      "Type": "AWS::CloudFormation::CustomResource",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "UserPoolUpdateEmailTemplateWithUrlProviderframeworkonEventCE62CA1D",
            "Arn"
          ]
        },
        "websiteUrl": {
          "Fn::Join": [
            "",
            [
              "https://",
              {
                "Fn::GetAtt": [
                  "WebsiteCloudFrontToS3CloudFrontDistribution4313ED9C",
                  "DomainName"
                ]
              }
            ]
          ]
        },
        "stackName": "deepracer-on-aws",
        "forceUpdate": "1778492502112"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UserPool/UpdateEmailTemplateWithUrl/Default"
      }
    },
    "DeepRacerUserIdentityLogGroup1631EFAE": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "KmsKeyId": {
          "Fn::GetAtt": [
            "EcrNestedStackEcrNestedStackResourceD4475E64",
            "Outputs.deepraceronawsEcrDeepRacerCMK1FB00512Arn"
          ]
        },
        "LogGroupName": {
          "Fn::Join": [
            "",
            [
              "/aws/lambda/",
              {
                "Ref": "Namespace"
              },
              "-DeepRacerUserIdentity"
            ]
          ]
        },
        "RetentionInDays": 3653,
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/DeepRacerUserIdentityLogGroup/Resource"
      }
    },
    "ApiStackNestedStackApiStackNestedStackResource56E3B9D0": {
      "Type": "AWS::CloudFormation::Stack",
      "Properties": {
        "Parameters": {
          "referencetodeepraceronawsNamespaceCB5FC4A9Ref": {
            "Ref": "Namespace"
          },
          "referencetodeepraceronawsDynamoDBTable5BE2F721Arn": {
            "Fn::GetAtt": [
              "DynamoDBTable7400F6BB",
              "Arn"
            ]
          },
          "referencetodeepraceronawsS3BucketModelStorageBucket0B4C0A17Arn": {
            "Fn::GetAtt": [
              "S3BucketModelStorageBucket01547CCF",
              "Arn"
            ]
          },
          "referencetodeepraceronawsUserPoolD1EE740DArn": {
            "Fn::GetAtt": [
              "UserPool6D0DFADB",
              "Arn"
            ]
          },
          "referencetodeepraceronawsS3BucketModelStorageBucket0B4C0A17Ref": {
            "Ref": "S3BucketModelStorageBucket01547CCF"
          },
          "referencetodeepraceronawsGlobalSettingsApplicationBA8B1EBDApplicationId": {
            "Fn::GetAtt": [
              "GlobalSettingsApplicationF700C2F1",
              "ApplicationId"
            ]
          },
          "referencetodeepraceronawsGlobalSettingsEnvironmentF7EEEAA4EnvironmentId": {
            "Fn::GetAtt": [
              "GlobalSettingsEnvironment0C8D83D6",
              "EnvironmentId"
            ]
          },
          "referencetodeepraceronawsGlobalSettingsConfigurationProfileFFFB87F8ConfigurationProfileId": {
            "Fn::GetAtt": [
              "GlobalSettingsConfigurationProfile385EEC94",
              "ConfigurationProfileId"
            ]
          },
          "referencetodeepraceronawsGlobalSettingsDeploymentStrategy17682AB1Id": {
            "Fn::GetAtt": [
              "GlobalSettingsDeploymentStrategyEEDE25EB",
              "Id"
            ]
          },
          "referencetodeepraceronawsUserPoolD1EE740DRef": {
            "Ref": "UserPool6D0DFADB"
          },
          "referencetodeepraceronawsS3BucketVirtualModelBucket59112BEBArn": {
            "Fn::GetAtt": [
              "S3BucketVirtualModelBucketE3ACD733",
              "Arn"
            ]
          },
          "referencetodeepraceronawsS3BucketUploadBucketB32E1B71Arn": {
            "Fn::GetAtt": [
              "S3BucketUploadBucketE3BDB254",
              "Arn"
            ]
          },
          "referencetodeepraceronawsS3BucketVirtualModelBucket59112BEBRef": {
            "Ref": "S3BucketVirtualModelBucketE3ACD733"
          },
          "referencetodeepraceronawsEcrNestedStackEcrNestedStackResourceAC5C6175OutputsdeepraceronawsEcrEcrRepo1RepositoryA36776ABArn": {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrEcrRepo1RepositoryA36776ABArn"
            ]
          },
          "referencetodeepraceronawsEcrNestedStackEcrNestedStackResourceAC5C6175OutputsdeepraceronawsEcrEcrRepo1RepositoryA36776ABRef": {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrEcrRepo1RepositoryA36776ABRef"
            ]
          },
          "referencetodeepraceronawsVpcuserExecutionVpcprivateSubnet1Subnet45B3F2C6Ref": {
            "Ref": "VpcuserExecutionVpcprivateSubnet1SubnetD75F691E"
          },
          "referencetodeepraceronawsVpcuserExecutionVpcprivateSubnet2Subnet46E4A5F5Ref": {
            "Ref": "VpcuserExecutionVpcprivateSubnet2Subnet142EA691"
          },
          "referencetodeepraceronawsVpcuserExecutionSecurityGroupA5FF3084GroupId": {
            "Fn::GetAtt": [
              "VpcuserExecutionSecurityGroupD815F9BC",
              "GroupId"
            ]
          },
          "referencetodeepraceronawsEcrNestedStackEcrNestedStackResourceAC5C6175OutputsdeepraceronawsEcrEcrRepo2RepositoryAAE606C9Arn": {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrEcrRepo2RepositoryAAE606C9Arn"
            ]
          },
          "referencetodeepraceronawsEcrNestedStackEcrNestedStackResourceAC5C6175OutputsdeepraceronawsEcrEcrRepo2RepositoryAAE606C9Ref": {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrEcrRepo2RepositoryAAE606C9Ref"
            ]
          },
          "referencetodeepraceronawsDynamoDBTable5BE2F721Ref": {
            "Ref": "DynamoDBTable7400F6BB"
          },
          "referencetodeepraceronawsEcrNestedStackEcrNestedStackResourceAC5C6175OutputsdeepraceronawsEcrDeepRacerCMK1FB00512Arn": {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerCMK1FB00512Arn"
            ]
          }
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "TemplateURL": {
          "Fn::Join": [
            "",
            [
              "https://",
              {
                "Fn::Sub": "solutions-${AWS::Region}"
              },
              ".s3.",
              {
                "Ref": "AWS::Region"
              },
              ".",
              {
                "Ref": "AWS::URLSuffix"
              },
              "/deepracer-on-aws/v1.1.1/deepraceronawsApiStack80305628.nested.template"
            ]
          ]
        }
      },
      "DependsOn": [
        "EcrNestedStackEcrNestedStackResourceD4475E64",
        "VpcuserExecutionVpcprivateSubnet1RouteTableAssociation58E053E1",
        "VpcuserExecutionVpcprivateSubnet2RouteTableAssociationD4C2D580"
      ],
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/ApiStack.NestedStack/ApiStack.NestedStackResource",
        "aws:asset:path": "deepracer-on-aws/v1.1.1/deepraceronawsApiStack80305628.nested.template",
        "aws:asset:property": "TemplateURL"
      }
    },
    "SesProductionAccessCheckSesProductionAccessCheckFunctionServiceRole349D6CA4": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/SesProductionAccessCheck/SesProductionAccessCheckFunction/ServiceRole/Resource"
      },
      "Condition": "IsSesEnabled"
    },
    "SesProductionAccessCheckSesProductionAccessCheckFunctionServiceRoleDefaultPolicy0CAD0DE1": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": "ses:GetAccount",
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "SesProductionAccessCheckSesProductionAccessCheckFunctionServiceRoleDefaultPolicy0CAD0DE1",
        "Roles": [
          {
            "Ref": "SesProductionAccessCheckSesProductionAccessCheckFunctionServiceRole349D6CA4"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/SesProductionAccessCheck/SesProductionAccessCheckFunction/ServiceRole/DefaultPolicy/Resource"
      },
      "Condition": "IsSesEnabled"
    },
    "SesProductionAccessCheckSesProductionAccessCheckFunction0BB1F1D2": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset8fc59ece38967efdf3a9ab7d944ed2e50a44863b4f5d7c98251219268c19d16c.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": ""
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-SesProductionAccessCheck"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "SesProductionAccessCheckSesProductionAccessCheckFunctionServiceRole349D6CA4",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "SesProductionAccessCheckSesProductionAccessCheckFunctionServiceRoleDefaultPolicy0CAD0DE1",
        "SesProductionAccessCheckSesProductionAccessCheckFunctionServiceRole349D6CA4"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/SesProductionAccessCheck/SesProductionAccessCheckFunction/Resource",
        "aws:asset:path": "asset.8fc59ece38967efdf3a9ab7d944ed2e50a44863b4f5d7c98251219268c19d16c",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      },
      "Condition": "IsSesEnabled"
    },
    "SesProductionAccessCheckSesProductionAccessCheckProviderframeworkonEventServiceRole9DE0A0B1": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/SesProductionAccessCheck/SesProductionAccessCheckProvider/framework-onEvent/ServiceRole/Resource"
      },
      "Condition": "IsSesEnabled"
    },
    "SesProductionAccessCheckSesProductionAccessCheckProviderframeworkonEventServiceRoleDefaultPolicy2FA84AD6": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "SesProductionAccessCheckSesProductionAccessCheckFunction0BB1F1D2",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "SesProductionAccessCheckSesProductionAccessCheckFunction0BB1F1D2",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:GetFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "SesProductionAccessCheckSesProductionAccessCheckFunction0BB1F1D2",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "SesProductionAccessCheckSesProductionAccessCheckProviderframeworkonEventServiceRoleDefaultPolicy2FA84AD6",
        "Roles": [
          {
            "Ref": "SesProductionAccessCheckSesProductionAccessCheckProviderframeworkonEventServiceRole9DE0A0B1"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/SesProductionAccessCheck/SesProductionAccessCheckProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource"
      },
      "Condition": "IsSesEnabled"
    },
    "SesProductionAccessCheckSesProductionAccessCheckProviderframeworkonEvent2A43D085": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/assetbdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
        },
        "Description": "AWS CDK resource provider framework - onEvent (deepracer-on-aws/SesProductionAccessCheck/SesProductionAccessCheckProvider)",
        "Environment": {
          "Variables": {
            "USER_ON_EVENT_FUNCTION_ARN": {
              "Fn::GetAtt": [
                "SesProductionAccessCheckSesProductionAccessCheckFunction0BB1F1D2",
                "Arn"
              ]
            }
          }
        },
        "Handler": "framework.onEvent",
        "Role": {
          "Fn::GetAtt": [
            "SesProductionAccessCheckSesProductionAccessCheckProviderframeworkonEventServiceRole9DE0A0B1",
            "Arn"
          ]
        },
        "Runtime": {
          "Fn::FindInMap": [
            "LatestNodeRuntimeMap",
            {
              "Ref": "AWS::Region"
            },
            "value"
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "SesProductionAccessCheckSesProductionAccessCheckProviderframeworkonEventServiceRoleDefaultPolicy2FA84AD6",
        "SesProductionAccessCheckSesProductionAccessCheckProviderframeworkonEventServiceRole9DE0A0B1"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/SesProductionAccessCheck/SesProductionAccessCheckProvider/framework-onEvent/Resource",
        "aws:asset:path": "asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      },
      "Condition": "IsSesEnabled"
    },
    "SesProductionAccessCheckSesProductionAccessCheckResource7A984AB4": {
      "Type": "AWS::CloudFormation::CustomResource",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "SesProductionAccessCheckSesProductionAccessCheckProviderframeworkonEvent2A43D085",
            "Arn"
          ]
        },
        "emailDeliveryMethod": {
          "Ref": "EmailDeliveryMethod"
        },
        "sesVerifiedEmail": {
          "Ref": "SesVerifiedEmail"
        },
        "forceUpdate": "1778492494333"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/SesProductionAccessCheck/SesProductionAccessCheckResource/Default"
      },
      "Condition": "IsSesEnabled"
    },
    "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionServiceRole50EC2E3D": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/EmailDeliveryMethodAudit/EmailDeliveryMethodChangeFunction/ServiceRole/Resource"
      }
    },
    "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionServiceRoleDefaultPolicy5CDAE23A": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionServiceRoleDefaultPolicy5CDAE23A",
        "Roles": [
          {
            "Ref": "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionServiceRole50EC2E3D"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/EmailDeliveryMethodAudit/EmailDeliveryMethodChangeFunction/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionA52FB1E6": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/assetb653d0baec0bce9bf3bffd3e423cb59c96603bc941d15239c7a123f8c4f51a6e.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": ""
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-EmailDeliveryMethodAudit"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionServiceRole50EC2E3D",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 10,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionServiceRoleDefaultPolicy5CDAE23A",
        "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionServiceRole50EC2E3D"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/EmailDeliveryMethodAudit/EmailDeliveryMethodChangeFunction/Resource",
        "aws:asset:path": "asset.b653d0baec0bce9bf3bffd3e423cb59c96603bc941d15239c7a123f8c4f51a6e",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "EmailDeliveryMethodAuditEmailDeliveryMethodAuditProviderframeworkonEventServiceRole550AE16C": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/EmailDeliveryMethodAudit/EmailDeliveryMethodAuditProvider/framework-onEvent/ServiceRole/Resource"
      }
    },
    "EmailDeliveryMethodAuditEmailDeliveryMethodAuditProviderframeworkonEventServiceRoleDefaultPolicy9A5DBF06": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionA52FB1E6",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionA52FB1E6",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:GetFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionA52FB1E6",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "EmailDeliveryMethodAuditEmailDeliveryMethodAuditProviderframeworkonEventServiceRoleDefaultPolicy9A5DBF06",
        "Roles": [
          {
            "Ref": "EmailDeliveryMethodAuditEmailDeliveryMethodAuditProviderframeworkonEventServiceRole550AE16C"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/EmailDeliveryMethodAudit/EmailDeliveryMethodAuditProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "EmailDeliveryMethodAuditEmailDeliveryMethodAuditProviderframeworkonEvent68B4895D": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/assetbdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
        },
        "Description": "AWS CDK resource provider framework - onEvent (deepracer-on-aws/EmailDeliveryMethodAudit/EmailDeliveryMethodAuditProvider)",
        "Environment": {
          "Variables": {
            "USER_ON_EVENT_FUNCTION_ARN": {
              "Fn::GetAtt": [
                "EmailDeliveryMethodAuditEmailDeliveryMethodChangeFunctionA52FB1E6",
                "Arn"
              ]
            }
          }
        },
        "Handler": "framework.onEvent",
        "Role": {
          "Fn::GetAtt": [
            "EmailDeliveryMethodAuditEmailDeliveryMethodAuditProviderframeworkonEventServiceRole550AE16C",
            "Arn"
          ]
        },
        "Runtime": {
          "Fn::FindInMap": [
            "LatestNodeRuntimeMap",
            {
              "Ref": "AWS::Region"
            },
            "value"
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "EmailDeliveryMethodAuditEmailDeliveryMethodAuditProviderframeworkonEventServiceRoleDefaultPolicy9A5DBF06",
        "EmailDeliveryMethodAuditEmailDeliveryMethodAuditProviderframeworkonEventServiceRole550AE16C"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/EmailDeliveryMethodAudit/EmailDeliveryMethodAuditProvider/framework-onEvent/Resource",
        "aws:asset:path": "asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "EmailDeliveryMethodAuditEmailDeliveryMethodAuditResource45653C1F": {
      "Type": "AWS::CloudFormation::CustomResource",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "EmailDeliveryMethodAuditEmailDeliveryMethodAuditProviderframeworkonEvent68B4895D",
            "Arn"
          ]
        },
        "emailDeliveryMethod": {
          "Ref": "EmailDeliveryMethod"
        },
        "sesVerifiedEmail": {
          "Ref": "SesVerifiedEmail"
        },
        "forceUpdate": "1778492495373"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/EmailDeliveryMethodAudit/EmailDeliveryMethodAuditResource/Default"
      }
    },
    "WorkflowSageMakerRole27179619": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "sagemaker.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/SageMakerRole/Resource"
      }
    },
    "WorkflowSageMakerRoleDefaultPolicy8F135E52": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*",
                "s3:DeleteObject*",
                "s3:PutObject",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:Abort*"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketModelStorageBucket01547CCF",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketModelStorageBucket01547CCF",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WorkflowSageMakerRoleDefaultPolicy8F135E52",
        "Roles": [
          {
            "Ref": "WorkflowSageMakerRole27179619"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/SageMakerRole/DefaultPolicy/Resource"
      }
    },
    "WorkflowSageMakerAccessPolicy9F49D7B1": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "sagemaker:*TrainingJob*",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:aws:sagemaker:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":training-job/deepracerindy-*"
                  ]
                ]
              }
            },
            {
              "Action": "ecr:GetAuthorizationToken",
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:aws:ecr:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":repository/",
                    {
                      "Ref": "Namespace"
                    },
                    "-deepracer-on-aws-*"
                  ]
                ]
              }
            },
            {
              "Action": [
                "kinesisvideo:DescribeStream",
                "kinesisvideo:GetDataEndpoint",
                "kinesisvideo:PutMedia"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:aws:kinesisvideo:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":stream/deepracerindy-*"
                  ]
                ]
              }
            },
            {
              "Action": "cloudwatch:PutMetricData",
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/sagemaker/TrainingJobs"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/sagemaker/TrainingJobs:log-stream:*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/deepracer/training/TrainingJobs"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/deepracer/training/TrainingJobs:log-stream:*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/deepracer/training/SimulationJobs"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/deepracer/training/SimulationJobs:log-stream:*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:CreateNetworkInterfacePermission",
                "ec2:DeleteNetworkInterface",
                "ec2:DeleteNetworkInterfacePermission",
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs"
              ],
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WorkflowSageMakerAccessPolicy9F49D7B1",
        "Roles": [
          {
            "Ref": "WorkflowSageMakerRole27179619"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/SageMakerAccessPolicy/Resource"
      }
    },
    "WorkflowJobInitializerFunctionServiceRole37DEE0E6": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobInitializerFunction/ServiceRole/Resource"
      }
    },
    "WorkflowJobInitializerFunctionServiceRoleDefaultPolicy13C4B0A6": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:Query",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "DynamoDBTable7400F6BB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "DynamoDBTable7400F6BB",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*",
                "s3:DeleteObject*",
                "s3:PutObject",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:Abort*"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketModelStorageBucket01547CCF",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketModelStorageBucket01547CCF",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "kinesisvideo:CreateStream",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:aws:kinesisvideo:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":stream/deepracerindy-*"
                  ]
                ]
              }
            },
            {
              "Action": "sagemaker:CreateTrainingJob",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:aws:sagemaker:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":training-job/deepracerindy-*"
                  ]
                ]
              }
            },
            {
              "Action": "iam:PassRole",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "WorkflowSageMakerRole27179619",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WorkflowJobInitializerFunctionServiceRoleDefaultPolicy13C4B0A6",
        "Roles": [
          {
            "Ref": "WorkflowJobInitializerFunctionServiceRole37DEE0E6"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobInitializerFunction/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "WorkflowJobInitializerFunction74C9D7B8": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset4664d5929a47c3daa6f3b9473d313dc7dd5cc3d9bad0f3c964e0a5e5d317f36c.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndyWorkflow",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": "",
            "MODEL_DATA_BUCKET_NAME": {
              "Ref": "S3BucketModelStorageBucket01547CCF"
            },
            "SAGEMAKER_ROLE_ARN": {
              "Fn::GetAtt": [
                "WorkflowSageMakerRole27179619",
                "Arn"
              ]
            },
            "SAGEMAKER_TRAINING_IMAGE": {
              "Fn::Join": [
                "",
                [
                  {
                    "Fn::Select": [
                      4,
                      {
                        "Fn::Split": [
                          ":",
                          {
                            "Fn::GetAtt": [
                              "EcrNestedStackEcrNestedStackResourceD4475E64",
                              "Outputs.deepraceronawsEcrEcrRepo0RepositoryAC9EE669Arn"
                            ]
                          }
                        ]
                      }
                    ]
                  },
                  ".dkr.ecr.",
                  {
                    "Fn::Select": [
                      3,
                      {
                        "Fn::Split": [
                          ":",
                          {
                            "Fn::GetAtt": [
                              "EcrNestedStackEcrNestedStackResourceD4475E64",
                              "Outputs.deepraceronawsEcrEcrRepo0RepositoryAC9EE669Arn"
                            ]
                          }
                        ]
                      }
                    ]
                  },
                  ".",
                  {
                    "Ref": "AWS::URLSuffix"
                  },
                  "/",
                  {
                    "Fn::GetAtt": [
                      "EcrNestedStackEcrNestedStackResourceD4475E64",
                      "Outputs.deepraceronawsEcrEcrRepo0RepositoryAC9EE669Ref"
                    ]
                  },
                  ":v1.1.1"
                ]
              ]
            },
            "SAGEMAKER_INSTANCE_TYPE": ""
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndyWorkflow-JobInitializerFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "WorkflowJobInitializerFunctionServiceRole37DEE0E6",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "WorkflowJobInitializerFunctionServiceRoleDefaultPolicy13C4B0A6",
        "WorkflowJobInitializerFunctionServiceRole37DEE0E6"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobInitializerFunction/Resource",
        "aws:asset:path": "asset.4664d5929a47c3daa6f3b9473d313dc7dd5cc3d9bad0f3c964e0a5e5d317f36c",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "WorkflowJobMonitorFunctionServiceRoleB23773CC": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobMonitorFunction/ServiceRole/Resource"
      }
    },
    "WorkflowJobMonitorFunctionServiceRoleDefaultPolicy34205F6B": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:Query",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "DynamoDBTable7400F6BB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "DynamoDBTable7400F6BB",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*",
                "s3:DeleteObject*",
                "s3:PutObject",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:Abort*"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketModelStorageBucket01547CCF",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketModelStorageBucket01547CCF",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "sagemaker:DescribeTrainingJob",
                "sagemaker:StopTrainingJob"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:aws:sagemaker:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":training-job/deepracerindy-*"
                  ]
                ]
              }
            },
            {
              "Action": [
                "kinesisvideo:GetDataEndpoint",
                "kinesisvideo:GetHLSStreamingSessionURL"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:aws:kinesisvideo:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":stream/deepracerindy-*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WorkflowJobMonitorFunctionServiceRoleDefaultPolicy34205F6B",
        "Roles": [
          {
            "Ref": "WorkflowJobMonitorFunctionServiceRoleB23773CC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobMonitorFunction/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "WorkflowJobMonitorFunction06625369": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset59f5f629b48ed10a0c851c4a51d3da94fe4cea359a88b9290503db0446a783fa.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndyWorkflow",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": "",
            "MODEL_DATA_BUCKET_NAME": {
              "Ref": "S3BucketModelStorageBucket01547CCF"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndyWorkflow-JobMonitorFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "WorkflowJobMonitorFunctionServiceRoleB23773CC",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "WorkflowJobMonitorFunctionServiceRoleDefaultPolicy34205F6B",
        "WorkflowJobMonitorFunctionServiceRoleB23773CC"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobMonitorFunction/Resource",
        "aws:asset:path": "asset.59f5f629b48ed10a0c851c4a51d3da94fe4cea359a88b9290503db0446a783fa",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "WorkflowJobFinalizerFunctionServiceRole1563BB03": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobFinalizerFunction/ServiceRole/Resource"
      }
    },
    "WorkflowJobFinalizerFunctionServiceRoleDefaultPolicy861573E9": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:Query",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "DynamoDBTable7400F6BB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "DynamoDBTable7400F6BB",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*",
                "s3:DeleteObject*",
                "s3:PutObject",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:Abort*"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketModelStorageBucket01547CCF",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketModelStorageBucket01547CCF",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "kinesisVideo:DeleteStream",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:aws:kinesisvideo:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":stream/deepracerindy-*"
                  ]
                ]
              }
            },
            {
              "Action": [
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:GetLogEvents"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/sagemaker/TrainingJobs"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/sagemaker/TrainingJobs:log-stream:*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/deepracer/training/TrainingJobs"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/deepracer/training/TrainingJobs:log-stream:*"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/deepracer/training/SimulationJobs"
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:logs:",
                      {
                        "Ref": "AWS::Region"
                      },
                      ":",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      ":log-group:/aws/deepracer/training/SimulationJobs:log-stream:*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "sagemaker:DescribeTrainingJob",
                "sagemaker:StopTrainingJob"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:aws:sagemaker:",
                    {
                      "Ref": "AWS::Region"
                    },
                    ":",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":training-job/deepracerindy-*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WorkflowJobFinalizerFunctionServiceRoleDefaultPolicy861573E9",
        "Roles": [
          {
            "Ref": "WorkflowJobFinalizerFunctionServiceRole1563BB03"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobFinalizerFunction/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "WorkflowJobFinalizerFunctionFF3C37AE": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset46119f3f98071bf0a86f6d273fe664011eec9afc85c27f0209ea38b8bd3d8fa2.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndyWorkflow",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": "",
            "MODEL_DATA_BUCKET_NAME": {
              "Ref": "S3BucketModelStorageBucket01547CCF"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndyWorkflow-JobFinalizerFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "WorkflowJobFinalizerFunctionServiceRole1563BB03",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 900,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "WorkflowJobFinalizerFunctionServiceRoleDefaultPolicy861573E9",
        "WorkflowJobFinalizerFunctionServiceRole1563BB03"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobFinalizerFunction/Resource",
        "aws:asset:path": "asset.46119f3f98071bf0a86f6d273fe664011eec9afc85c27f0209ea38b8bd3d8fa2",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "WorkflowExecutionLogsE67184FE": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "KmsKeyId": {
          "Fn::GetAtt": [
            "EcrNestedStackEcrNestedStackResourceD4475E64",
            "Outputs.deepraceronawsEcrDeepRacerCMK1FB00512Arn"
          ]
        },
        "LogGroupName": {
          "Fn::Join": [
            "",
            [
              "/aws/vendedlogs/states/",
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndyWorkflow"
            ]
          ]
        },
        "RetentionInDays": 731,
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/ExecutionLogs/Resource"
      }
    },
    "WorkflowStateMachineRoleAB27BF0D": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "states.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/StateMachine/Role/Resource"
      }
    },
    "WorkflowStateMachineRoleDefaultPolicyB2EAF58E": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "WorkflowJobInitializerFunction74C9D7B8",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "WorkflowJobInitializerFunction74C9D7B8",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "WorkflowJobMonitorFunction06625369",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "WorkflowJobMonitorFunction06625369",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "WorkflowJobFinalizerFunctionFF3C37AE",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "WorkflowJobFinalizerFunctionFF3C37AE",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords",
                "xray:GetSamplingRules",
                "xray:GetSamplingTargets"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "EcrNestedStackEcrNestedStackResourceD4475E64",
                  "Outputs.deepraceronawsEcrDeepRacerCMK1FB00512Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WorkflowStateMachineRoleDefaultPolicyB2EAF58E",
        "Roles": [
          {
            "Ref": "WorkflowStateMachineRoleAB27BF0D"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/StateMachine/Role/DefaultPolicy/Resource"
      }
    },
    "WorkflowStateMachine8F1B1C15": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "DefinitionString": {
          "Fn::Join": [
            "",
            [
              "{\"StartAt\":\"Job Initializer\",\"States\":{\"Job Initializer\":{\"Next\":\"Job Monitor\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorDetails\",\"Next\":\"Job Finalizer\"}],\"Type\":\"Task\",\"OutputPath\":\"$.Payload\",\"Resource\":\"arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":states:::lambda:invoke\",\"Parameters\":{\"FunctionName\":\"",
              {
                "Fn::GetAtt": [
                  "WorkflowJobInitializerFunction74C9D7B8",
                  "Arn"
                ]
              },
              "\",\"Payload.$\":\"$\"}},\"Job Monitor\":{\"Next\":\"Job running?\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorDetails\",\"Next\":\"Job Finalizer\"}],\"Type\":\"Task\",\"OutputPath\":\"$.Payload\",\"Resource\":\"arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":states:::lambda:invoke\",\"Parameters\":{\"FunctionName\":\"",
              {
                "Fn::GetAtt": [
                  "WorkflowJobMonitorFunction06625369",
                  "Arn"
                ]
              },
              "\",\"Payload.$\":\"$\"}},\"Wait while job runs\":{\"Type\":\"Wait\",\"Seconds\":60,\"Next\":\"Job Monitor\"},\"Job running?\":{\"Type\":\"Choice\",\"Choices\":[{\"Or\":[{\"Variable\":\"$.trainingJob.status\",\"StringEquals\":\"InProgress\"},{\"Variable\":\"$.trainingJob.status\",\"StringEquals\":\"Stopping\"}],\"Next\":\"Wait while job runs\"}],\"Default\":\"Job Finalizer\"},\"Job Finalizer\":{\"Next\":\"Workflow completed successfully?\",\"Retry\":[{\"ErrorEquals\":[\"Lambda.ClientExecutionTimeoutException\",\"Lambda.ServiceException\",\"Lambda.AWSLambdaException\",\"Lambda.SdkClientException\"],\"IntervalSeconds\":2,\"MaxAttempts\":6,\"BackoffRate\":2}],\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"Next\":\"Job failed\"}],\"Type\":\"Task\",\"OutputPath\":\"$.Payload\",\"Resource\":\"arn:",
              {
                "Ref": "AWS::Partition"
              },
              ":states:::lambda:invoke\",\"Parameters\":{\"FunctionName\":\"",
              {
                "Fn::GetAtt": [
                  "WorkflowJobFinalizerFunctionFF3C37AE",
                  "Arn"
                ]
              },
              "\",\"Payload.$\":\"$\"}},\"Workflow completed successfully?\":{\"Type\":\"Choice\",\"Choices\":[{\"Variable\":\"$.errorDetails\",\"IsPresent\":true,\"Next\":\"Job failed\"}],\"Default\":\"Job succeeded\"},\"Job succeeded\":{\"Type\":\"Succeed\"},\"Job failed\":{\"Type\":\"Fail\"}}}"
            ]
          ]
        },
        "LoggingConfiguration": {
          "Destinations": [
            {
              "CloudWatchLogsLogGroup": {
                "LogGroupArn": {
                  "Fn::GetAtt": [
                    "WorkflowExecutionLogsE67184FE",
                    "Arn"
                  ]
                }
              }
            }
          ],
          "IncludeExecutionData": true,
          "Level": "ALL"
        },
        "RoleArn": {
          "Fn::GetAtt": [
            "WorkflowStateMachineRoleAB27BF0D",
            "Arn"
          ]
        },
        "StateMachineName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndyWorkflow"
            ]
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "TracingConfiguration": {
          "Enabled": true
        }
      },
      "DependsOn": [
        "WorkflowStateMachineRoleDefaultPolicyB2EAF58E",
        "WorkflowStateMachineRoleAB27BF0D"
      ],
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/StateMachine/Resource"
      }
    },
    "WorkflowJobDispatcherFunctionRole0400E762": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobDispatcherFunctionRole/Resource"
      }
    },
    "WorkflowJobDispatcherFunctionRoleDefaultPolicyD1316F84": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:Query",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "DynamoDBTable7400F6BB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "DynamoDBTable7400F6BB",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "sqs:ReceiveMessage",
                "sqs:ChangeMessageVisibility",
                "sqs:GetQueueUrl",
                "sqs:DeleteMessage",
                "sqs:GetQueueAttributes"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                  "Outputs.deepraceronawsApiStackApiWorkflowJobQueue01EC220CArn"
                ]
              }
            },
            {
              "Action": [
                "sqs:SendMessage",
                "sqs:GetQueueAttributes",
                "sqs:GetQueueUrl"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                  "Outputs.deepraceronawsApiStackApiWorkflowJobQueue01EC220CArn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WorkflowJobDispatcherFunctionRoleDefaultPolicyD1316F84",
        "Roles": [
          {
            "Ref": "WorkflowJobDispatcherFunctionRole0400E762"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobDispatcherFunctionRole/DefaultPolicy/Resource"
      }
    },
    "WorkflowJobDispatcherSageMakerPolicyB44FEC00": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "sagemaker:ListTrainingJobs",
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WorkflowJobDispatcherSageMakerPolicyB44FEC00",
        "Roles": [
          {
            "Ref": "WorkflowJobDispatcherFunctionRole0400E762"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobDispatcherSageMakerPolicy/Resource"
      }
    },
    "WorkflowJobDispatcherServiceQuotasPolicyF865BDE6": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "servicequotas:GetServiceQuota",
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WorkflowJobDispatcherServiceQuotasPolicyF865BDE6",
        "Roles": [
          {
            "Ref": "WorkflowJobDispatcherFunctionRole0400E762"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobDispatcherServiceQuotasPolicy/Resource"
      }
    },
    "WorkflowJobDispatcherStepFunctionPolicy5A338432": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "states:StartExecution",
              "Effect": "Allow",
              "Resource": {
                "Ref": "WorkflowStateMachine8F1B1C15"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WorkflowJobDispatcherStepFunctionPolicy5A338432",
        "Roles": [
          {
            "Ref": "WorkflowJobDispatcherFunctionRole0400E762"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobDispatcherStepFunctionPolicy/Resource"
      }
    },
    "WorkflowJobDispatcherFunction925E9E8A": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset7f4916cec0dc5634a74f35eb0aa1fc84a332ba5eb5314c3b830d7cec9f178fe8.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndyWorkflow",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": "",
            "MODEL_DATA_BUCKET_NAME": {
              "Ref": "S3BucketModelStorageBucket01547CCF"
            },
            "WORKFLOW_STATE_MACHINE_ARN": {
              "Ref": "WorkflowStateMachine8F1B1C15"
            },
            "WORKFLOW_JOB_QUEUE_URL": {
              "Fn::GetAtt": [
                "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                "Outputs.deepraceronawsApiStackApiWorkflowJobQueue01EC220CRef"
              ]
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndyWorkflow-JobDispatcherFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          }
        },
        "MemorySize": 256,
        "Role": {
          "Fn::GetAtt": [
            "WorkflowJobDispatcherFunctionRole0400E762",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "WorkflowJobDispatcherFunctionRoleDefaultPolicyD1316F84",
        "WorkflowJobDispatcherFunctionRole0400E762"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobDispatcherFunction/Resource",
        "aws:asset:path": "asset.7f4916cec0dc5634a74f35eb0aa1fc84a332ba5eb5314c3b830d7cec9f178fe8",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "WorkflowJobDispatcherFunctionSqsEventSourcedeepraceronawsApiStackApiWorkflowJobQueue1A8F51CC4923C432": {
      "Type": "AWS::Lambda::EventSourceMapping",
      "Properties": {
        "BatchSize": 1,
        "EventSourceArn": {
          "Fn::GetAtt": [
            "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
            "Outputs.deepraceronawsApiStackApiWorkflowJobQueue01EC220CArn"
          ]
        },
        "FunctionName": {
          "Ref": "WorkflowJobDispatcherFunction925E9E8A"
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Workflow/JobDispatcherFunction/SqsEventSource:deepraceronawsApiStackApiWorkflowJobQueue1A8F51CC/Resource"
      }
    },
    "WebsiteCloudFrontToS3S3LoggingBucket3285FF05": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CloudFrontToS3/S3LoggingBucket/Resource",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W35",
              "reason": "This S3 bucket is used as the access logging bucket for another bucket"
            }
          ]
        }
      }
    },
    "WebsiteCloudFrontToS3S3LoggingBucketPolicyFB1AAAF6": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "WebsiteCloudFrontToS3S3LoggingBucket3285FF05"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "WebsiteCloudFrontToS3S3LoggingBucket3285FF05",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "WebsiteCloudFrontToS3S3LoggingBucket3285FF05",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "s3:PutObject",
              "Condition": {
                "ArnLike": {
                  "aws:SourceArn": {
                    "Fn::GetAtt": [
                      "WebsiteCloudFrontToS3S3Bucket18AD4248",
                      "Arn"
                    ]
                  }
                },
                "StringEquals": {
                  "aws:SourceAccount": {
                    "Ref": "AWS::AccountId"
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": "logging.s3.amazonaws.com"
              },
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "WebsiteCloudFrontToS3S3LoggingBucket3285FF05",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CloudFrontToS3/S3LoggingBucket/Policy/Resource"
      }
    },
    "WebsiteCloudFrontToS3S3Bucket18AD4248": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        },
        "LifecycleConfiguration": {
          "Rules": [
            {
              "NoncurrentVersionTransitions": [
                {
                  "StorageClass": "GLACIER",
                  "TransitionInDays": 90
                }
              ],
              "Status": "Enabled"
            }
          ]
        },
        "LoggingConfiguration": {
          "DestinationBucketName": {
            "Ref": "WebsiteCloudFrontToS3S3LoggingBucket3285FF05"
          }
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-cdk:cr-owned:42a09d17",
            "Value": "true"
          },
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CloudFrontToS3/S3Bucket/Resource"
      }
    },
    "WebsiteCloudFrontToS3S3BucketPolicy59EB757C": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "WebsiteCloudFrontToS3S3Bucket18AD4248"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "WebsiteCloudFrontToS3S3Bucket18AD4248",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "WebsiteCloudFrontToS3S3Bucket18AD4248",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "s3:GetObject",
              "Condition": {
                "StringEquals": {
                  "AWS:SourceArn": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":cloudfront::",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":distribution/",
                        {
                          "Ref": "WebsiteCloudFrontToS3CloudFrontDistribution4313ED9C"
                        }
                      ]
                    ]
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": "cloudfront.amazonaws.com"
              },
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "WebsiteCloudFrontToS3S3Bucket18AD4248",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              }
            },
            {
              "Action": "s3:ListBucket",
              "Condition": {
                "StringEquals": {
                  "AWS:SourceArn": {
                    "Fn::Join": [
                      "",
                      [
                        "arn:",
                        {
                          "Ref": "AWS::Partition"
                        },
                        ":cloudfront::",
                        {
                          "Ref": "AWS::AccountId"
                        },
                        ":distribution/",
                        {
                          "Ref": "WebsiteCloudFrontToS3CloudFrontDistribution4313ED9C"
                        }
                      ]
                    ]
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": "cloudfront.amazonaws.com"
              },
              "Resource": {
                "Fn::GetAtt": [
                  "WebsiteCloudFrontToS3S3Bucket18AD4248",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CloudFrontToS3/S3Bucket/Policy/Resource",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "F16",
              "reason": "Public website bucket policy requires a wildcard principal"
            }
          ]
        }
      }
    },
    "WebsiteCloudFrontToS3CloudfrontLoggingBucketAccessLogD8FF6B03": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CloudFrontToS3/CloudfrontLoggingBucketAccessLog/Resource",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W35",
              "reason": "This S3 bucket is used as the access logging bucket for another bucket"
            }
          ]
        }
      }
    },
    "WebsiteCloudFrontToS3CloudfrontLoggingBucketAccessLogPolicyB645E530": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "WebsiteCloudFrontToS3CloudfrontLoggingBucketAccessLogD8FF6B03"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "WebsiteCloudFrontToS3CloudfrontLoggingBucketAccessLogD8FF6B03",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "WebsiteCloudFrontToS3CloudfrontLoggingBucketAccessLogD8FF6B03",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "s3:PutObject",
              "Condition": {
                "ArnLike": {
                  "aws:SourceArn": {
                    "Fn::GetAtt": [
                      "WebsiteCloudFrontToS3CloudfrontLoggingBucketF02A63E9",
                      "Arn"
                    ]
                  }
                },
                "StringEquals": {
                  "aws:SourceAccount": {
                    "Ref": "AWS::AccountId"
                  }
                }
              },
              "Effect": "Allow",
              "Principal": {
                "Service": "logging.s3.amazonaws.com"
              },
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "WebsiteCloudFrontToS3CloudfrontLoggingBucketAccessLogD8FF6B03",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CloudFrontToS3/CloudfrontLoggingBucketAccessLog/Policy/Resource"
      }
    },
    "WebsiteCloudFrontToS3CloudfrontLoggingBucketF02A63E9": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "AccessControl": "LogDeliveryWrite",
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        },
        "LoggingConfiguration": {
          "DestinationBucketName": {
            "Ref": "WebsiteCloudFrontToS3CloudfrontLoggingBucketAccessLogD8FF6B03"
          }
        },
        "OwnershipControls": {
          "Rules": [
            {
              "ObjectOwnership": "ObjectWriter"
            }
          ]
        },
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "BlockPublicPolicy": true,
          "IgnorePublicAcls": true,
          "RestrictPublicBuckets": true
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "VersioningConfiguration": {
          "Status": "Enabled"
        }
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CloudFrontToS3/CloudfrontLoggingBucket/Resource"
      }
    },
    "WebsiteCloudFrontToS3CloudfrontLoggingBucketPolicy5BF04B0B": {
      "Type": "AWS::S3::BucketPolicy",
      "Properties": {
        "Bucket": {
          "Ref": "WebsiteCloudFrontToS3CloudfrontLoggingBucketF02A63E9"
        },
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:*",
              "Condition": {
                "Bool": {
                  "aws:SecureTransport": "false"
                }
              },
              "Effect": "Deny",
              "Principal": {
                "AWS": "*"
              },
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "WebsiteCloudFrontToS3CloudfrontLoggingBucketF02A63E9",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "WebsiteCloudFrontToS3CloudfrontLoggingBucketF02A63E9",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CloudFrontToS3/CloudfrontLoggingBucket/Policy/Resource"
      }
    },
    "WebsiteCloudFrontToS3CloudFrontOacF32C1CF8": {
      "Type": "AWS::CloudFront::OriginAccessControl",
      "Properties": {
        "OriginAccessControlConfig": {
          "Description": "Origin access control provisioned by aws-cloudfront-s3",
          "Name": {
            "Fn::Join": [
              "",
              [
                "aws-cloudfront-s3-CloutToS3-",
                {
                  "Fn::Select": [
                    2,
                    {
                      "Fn::Split": [
                        "/",
                        {
                          "Ref": "AWS::StackId"
                        }
                      ]
                    }
                  ]
                }
              ]
            ]
          },
          "OriginAccessControlOriginType": "s3",
          "SigningBehavior": "always",
          "SigningProtocol": "sigv4"
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CloudFrontToS3/CloudFrontOac"
      }
    },
    "WebsiteCloudFrontToS3ResponseHeadersPolicy7577A66F": {
      "Type": "AWS::CloudFront::ResponseHeadersPolicy",
      "Properties": {
        "ResponseHeadersPolicyConfig": {
          "CustomHeadersConfig": {
            "Items": [
              {
                "Header": "Cache-Control",
                "Override": true,
                "Value": "no-cache,no-store"
              },
              {
                "Header": "Cross-Origin-Opener-Policy",
                "Override": true,
                "Value": "same-origin"
              }
            ]
          },
          "Name": {
            "Fn::Join": [
              "",
              [
                {
                  "Ref": "Namespace"
                },
                "SecurityHeadersPolicy-",
                {
                  "Ref": "AWS::Region"
                }
              ]
            ]
          },
          "SecurityHeadersConfig": {
            "ContentSecurityPolicy": {
              "ContentSecurityPolicy": {
                "Fn::Join": [
                  "",
                  [
                    "base-uri 'none'; default-src 'none'; frame-ancestors 'none'; font-src 'self' data:; img-src 'self' data:; media-src 'self' blob: https://",
                    {
                      "Fn::GetAtt": [
                        "S3BucketModelStorageBucket01547CCF",
                        "RegionalDomainName"
                      ]
                    },
                    "; object-src 'none'; style-src 'self'; script-src 'self' 'wasm-unsafe-eval'; worker-src 'self' blob:; connect-src 'self' blob: https://",
                    {
                      "Fn::GetAtt": [
                        "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                        "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                      ]
                    },
                    ".execute-api.",
                    {
                      "Ref": "AWS::Region"
                    },
                    ".",
                    {
                      "Ref": "AWS::URLSuffix"
                    },
                    "/",
                    {
                      "Fn::GetAtt": [
                        "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                        "Outputs.deepraceronawsApiStackApiDeploymentStageprod2937C774Ref"
                      ]
                    },
                    "/ https://cognito-idp.",
                    {
                      "Ref": "AWS::Region"
                    },
                    ".amazonaws.com https://cognito-identity.",
                    {
                      "Ref": "AWS::Region"
                    },
                    ".amazonaws.com https://*.kinesisvideo.",
                    {
                      "Ref": "AWS::Region"
                    },
                    ".amazonaws.com https://",
                    {
                      "Fn::GetAtt": [
                        "S3BucketUploadBucketE3BDB254",
                        "RegionalDomainName"
                      ]
                    },
                    " https://",
                    {
                      "Fn::GetAtt": [
                        "S3BucketModelStorageBucket01547CCF",
                        "RegionalDomainName"
                      ]
                    },
                    " https://www.gstatic.com/draco/versioned/decoders/; upgrade-insecure-requests"
                  ]
                ]
              },
              "Override": true
            },
            "ContentTypeOptions": {
              "Override": true
            },
            "FrameOptions": {
              "FrameOption": "DENY",
              "Override": true
            },
            "ReferrerPolicy": {
              "Override": true,
              "ReferrerPolicy": "strict-origin-when-cross-origin"
            },
            "StrictTransportSecurity": {
              "AccessControlMaxAgeSec": 47304000,
              "IncludeSubdomains": true,
              "Override": true,
              "Preload": true
            },
            "XSSProtection": {
              "ModeBlock": true,
              "Override": true,
              "Protection": true
            }
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CloudFrontToS3/ResponseHeadersPolicy/Resource"
      }
    },
    "WebsiteCloudFrontToS3CloudFrontDistribution4313ED9C": {
      "Type": "AWS::CloudFront::Distribution",
      "Properties": {
        "DistributionConfig": {
          "CustomErrorResponses": [
            {
              "ErrorCode": 404,
              "ResponseCode": 200,
              "ResponsePagePath": "/index.html"
            },
            {
              "ErrorCode": 403,
              "ResponseCode": 200,
              "ResponsePagePath": "/index.html"
            }
          ],
          "DefaultCacheBehavior": {
            "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6",
            "Compress": true,
            "ResponseHeadersPolicyId": {
              "Ref": "WebsiteCloudFrontToS3ResponseHeadersPolicy7577A66F"
            },
            "TargetOriginId": "deepraceronawsWebsiteCloudFrontToS3CloudFrontDistributionOrigin1C6706192",
            "ViewerProtocolPolicy": "redirect-to-https"
          },
          "DefaultRootObject": "index.html",
          "Enabled": true,
          "HttpVersion": "http2",
          "IPV6Enabled": true,
          "Logging": {
            "Fn::If": [
              "WebsiteSupportsCloudFrontLogging36BD107F",
              {
                "Bucket": {
                  "Fn::GetAtt": [
                    "WebsiteCloudFrontToS3CloudfrontLoggingBucketF02A63E9",
                    "DomainName"
                  ]
                },
                "IncludeCookies": false
              },
              {
                "Ref": "AWS::NoValue"
              }
            ]
          },
          "Origins": [
            {
              "DomainName": {
                "Fn::GetAtt": [
                  "WebsiteCloudFrontToS3S3Bucket18AD4248",
                  "RegionalDomainName"
                ]
              },
              "Id": "deepraceronawsWebsiteCloudFrontToS3CloudFrontDistributionOrigin1C6706192",
              "OriginAccessControlId": {
                "Fn::GetAtt": [
                  "WebsiteCloudFrontToS3CloudFrontOacF32C1CF8",
                  "Id"
                ]
              },
              "S3OriginConfig": {
                "OriginAccessIdentity": ""
              }
            }
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CloudFrontToS3/CloudFrontDistribution/Resource",
        "cfn_nag": {
          "rules_to_suppress": [
            {
              "id": "W70",
              "reason": "Since the distribution uses the CloudFront domain name, CloudFront automatically sets the security policy to TLSv1 regardless of the value of MinimumProtocolVersion"
            }
          ]
        }
      }
    },
    "WebsiteDeployWebsiteAwsCliLayerBA460CCE": {
      "Type": "AWS::Lambda::LayerVersion",
      "Properties": {
        "Content": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset8a84a8f465fbe0c48af2c256847ec9abfe095d23781b749728b998315f3ad732.zip"
        },
        "Description": "/opt/awscli/aws"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/DeployWebsite/AwsCliLayer/Resource",
        "aws:asset:path": "asset.8a84a8f465fbe0c48af2c256847ec9abfe095d23781b749728b998315f3ad732.zip",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Content"
      }
    },
    "WebsiteDeployWebsiteCustomResource2048MiB749F534D": {
      "Type": "Custom::CDKBucketDeployment",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiB8AA4A604",
            "Arn"
          ]
        },
        "SourceBucketNames": [
          {
            "Fn::Sub": "solutions-${AWS::Region}"
          }
        ],
        "SourceObjectKeys": [
          "deepracer-on-aws/v1.1.1/asset7f929d6759b2b7597fb573ce759c9951214134e88a13233eb6a3bedcd5b3af4b.zip"
        ],
        "DestinationBucketName": {
          "Ref": "WebsiteCloudFrontToS3S3Bucket18AD4248"
        },
        "Prune": true,
        "DistributionId": {
          "Ref": "WebsiteCloudFrontToS3CloudFrontDistribution4313ED9C"
        },
        "OutputObjectKeys": true
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/DeployWebsite/CustomResource-2048MiB/Default"
      }
    },
    "WebsiteCreateWebsiteEnvFileServiceRoleA206CED4": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CreateWebsiteEnvFile/ServiceRole/Resource"
      }
    },
    "WebsiteCreateWebsiteEnvFileServiceRoleDefaultPolicyCED01828": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
              ],
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    {
                      "Fn::GetAtt": [
                        "WebsiteCloudFrontToS3S3Bucket18AD4248",
                        "Arn"
                      ]
                    },
                    "/*"
                  ]
                ]
              }
            },
            {
              "Action": "cloudfront:CreateInvalidation",
              "Effect": "Allow",
              "Resource": {
                "Fn::Join": [
                  "",
                  [
                    "arn:",
                    {
                      "Ref": "AWS::Partition"
                    },
                    ":cloudfront::",
                    {
                      "Ref": "AWS::AccountId"
                    },
                    ":distribution/",
                    {
                      "Ref": "WebsiteCloudFrontToS3CloudFrontDistribution4313ED9C"
                    }
                  ]
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WebsiteCreateWebsiteEnvFileServiceRoleDefaultPolicyCED01828",
        "Roles": [
          {
            "Ref": "WebsiteCreateWebsiteEnvFileServiceRoleA206CED4"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CreateWebsiteEnvFile/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "WebsiteCreateWebsiteEnvFile0F4D62FE": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset888efdf1129016be6176a735a4550215a4a3e31bc581651b37deee6e166cb1e0.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": ""
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-CreateWebsiteEnvFile"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "WebsiteCreateWebsiteEnvFileServiceRoleA206CED4",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 60,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "WebsiteCreateWebsiteEnvFileServiceRoleDefaultPolicyCED01828",
        "WebsiteCreateWebsiteEnvFileServiceRoleA206CED4"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CreateWebsiteEnvFile/Resource",
        "aws:asset:path": "asset.888efdf1129016be6176a735a4550215a4a3e31bc581651b37deee6e166cb1e0",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "WebsiteCreateEnvFileProviderframeworkonEventServiceRoleA21F2D80": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CreateEnvFileProvider/framework-onEvent/ServiceRole/Resource"
      }
    },
    "WebsiteCreateEnvFileProviderframeworkonEventServiceRoleDefaultPolicyBD0FB5C9": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "WebsiteCreateWebsiteEnvFile0F4D62FE",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "WebsiteCreateWebsiteEnvFile0F4D62FE",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:GetFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "WebsiteCreateWebsiteEnvFile0F4D62FE",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "WebsiteCreateEnvFileProviderframeworkonEventServiceRoleDefaultPolicyBD0FB5C9",
        "Roles": [
          {
            "Ref": "WebsiteCreateEnvFileProviderframeworkonEventServiceRoleA21F2D80"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CreateEnvFileProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "WebsiteCreateEnvFileProviderframeworkonEvent79338D92": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/assetbdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
        },
        "Description": "AWS CDK resource provider framework - onEvent (deepracer-on-aws/Website/CreateEnvFileProvider)",
        "Environment": {
          "Variables": {
            "USER_ON_EVENT_FUNCTION_ARN": {
              "Fn::GetAtt": [
                "WebsiteCreateWebsiteEnvFile0F4D62FE",
                "Arn"
              ]
            }
          }
        },
        "Handler": "framework.onEvent",
        "Role": {
          "Fn::GetAtt": [
            "WebsiteCreateEnvFileProviderframeworkonEventServiceRoleA21F2D80",
            "Arn"
          ]
        },
        "Runtime": {
          "Fn::FindInMap": [
            "LatestNodeRuntimeMap",
            {
              "Ref": "AWS::Region"
            },
            "value"
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "WebsiteCreateEnvFileProviderframeworkonEventServiceRoleDefaultPolicyBD0FB5C9",
        "WebsiteCreateEnvFileProviderframeworkonEventServiceRoleA21F2D80"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CreateEnvFileProvider/framework-onEvent/Resource",
        "aws:asset:path": "asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "WebsiteCreateEnvFileResource71F46A47": {
      "Type": "AWS::CloudFormation::CustomResource",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "WebsiteCreateEnvFileProviderframeworkonEvent79338D92",
            "Arn"
          ]
        },
        "bucketName": {
          "Ref": "WebsiteCloudFrontToS3S3Bucket18AD4248"
        },
        "fileName": "env.js",
        "fileContent": {
          "Fn::Join": [
            "",
            [
              "window.EnvironmentConfig = {\"apiEndpointUrl\":\"https://",
              {
                "Fn::GetAtt": [
                  "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                  "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                ]
              },
              ".execute-api.",
              {
                "Ref": "AWS::Region"
              },
              ".",
              {
                "Ref": "AWS::URLSuffix"
              },
              "/",
              {
                "Fn::GetAtt": [
                  "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                  "Outputs.deepraceronawsApiStackApiDeploymentStageprod2937C774Ref"
                ]
              },
              "/\",\"userPoolId\":\"",
              {
                "Ref": "UserPool6D0DFADB"
              },
              "\",\"userPoolClientId\":\"",
              {
                "Ref": "UserPoolWebClientEB451012"
              },
              "\",\"identityPoolId\":\"",
              {
                "Ref": "UserPoolIdentityPoolA58D72D6"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"uploadBucketName\":\"",
              {
                "Ref": "S3BucketUploadBucketE3BDB254"
              },
              "\"};"
            ]
          ]
        },
        "namespace": {
          "Ref": "Namespace"
        },
        "distributionId": {
          "Ref": "WebsiteCloudFrontToS3CloudFrontDistribution4313ED9C"
        },
        "forceUpdate": "1778492501068"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Website/CreateEnvFileResource/Default"
      }
    },
    "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiBServiceRoleB37F9ACF": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiB/ServiceRole/Resource"
      }
    },
    "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiBServiceRoleDefaultPolicy5D765796": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":s3:::",
                      {
                        "Fn::Sub": "solutions-${AWS::Region}"
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:",
                      {
                        "Ref": "AWS::Partition"
                      },
                      ":s3:::",
                      {
                        "Fn::Sub": "solutions-${AWS::Region}"
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*",
                "s3:DeleteObject*",
                "s3:PutObject",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:Abort*"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "WebsiteCloudFrontToS3S3Bucket18AD4248",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "WebsiteCloudFrontToS3S3Bucket18AD4248",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "cloudfront:GetInvalidation",
                "cloudfront:CreateInvalidation"
              ],
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiBServiceRoleDefaultPolicy5D765796",
        "Roles": [
          {
            "Ref": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiBServiceRoleB37F9ACF"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiB/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiB8AA4A604": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset9a1fcb4a7ecba81ad70e9d3fb241f6794497da945dae5f25924e4dd002b65f2d.zip"
        },
        "Environment": {
          "Variables": {
            "AWS_CA_BUNDLE": "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem"
          }
        },
        "Handler": "index.handler",
        "Layers": [
          {
            "Ref": "WebsiteDeployWebsiteAwsCliLayerBA460CCE"
          }
        ],
        "MemorySize": 2048,
        "Role": {
          "Fn::GetAtt": [
            "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiBServiceRoleB37F9ACF",
            "Arn"
          ]
        },
        "Runtime": "python3.11",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiBServiceRoleDefaultPolicy5D765796",
        "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiBServiceRoleB37F9ACF"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C2048MiB/Resource",
        "aws:asset:path": "asset.9a1fcb4a7ecba81ad70e9d3fb241f6794497da945dae5f25924e4dd002b65f2d",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UpdateApiCorsUpdateCorsFunctionServiceRoleF29522AE": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UpdateApiCors/UpdateCorsFunction/ServiceRole/Resource"
      }
    },
    "UpdateApiCorsUpdateCorsFunctionServiceRoleDefaultPolicy4B14DD18": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "apigateway:GET",
                "apigateway:PUT",
                "apigateway:PATCH",
                "apigateway:POST"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:apigateway:*::/restapis/",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      }
                    ]
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      "arn:aws:apigateway:*::/restapis/",
                      {
                        "Fn::GetAtt": [
                          "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                          "Outputs.deepraceronawsApiStackApiBB0205FFRef"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UpdateApiCorsUpdateCorsFunctionServiceRoleDefaultPolicy4B14DD18",
        "Roles": [
          {
            "Ref": "UpdateApiCorsUpdateCorsFunctionServiceRoleF29522AE"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UpdateApiCors/UpdateCorsFunction/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UpdateApiCorsUpdateCorsFunctionC369CA21": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asseta66d1b9fdecee79dae75c58f9f0ff92c1552b238212cad7e9182aee059935199.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": ""
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-UpdateApiCors"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "UpdateApiCorsUpdateCorsFunctionServiceRoleF29522AE",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 300,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "UpdateApiCorsUpdateCorsFunctionServiceRoleDefaultPolicy4B14DD18",
        "UpdateApiCorsUpdateCorsFunctionServiceRoleF29522AE"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UpdateApiCors/UpdateCorsFunction/Resource",
        "aws:asset:path": "asset.a66d1b9fdecee79dae75c58f9f0ff92c1552b238212cad7e9182aee059935199",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UpdateApiCorsUpdateCorsProviderframeworkonEventServiceRoleFBF18EED": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UpdateApiCors/UpdateCorsProvider/framework-onEvent/ServiceRole/Resource"
      }
    },
    "UpdateApiCorsUpdateCorsProviderframeworkonEventServiceRoleDefaultPolicy7D1F739A": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "UpdateApiCorsUpdateCorsFunctionC369CA21",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "UpdateApiCorsUpdateCorsFunctionC369CA21",
                          "Arn"
                        ]
                      },
                      ":*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": "lambda:GetFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "UpdateApiCorsUpdateCorsFunctionC369CA21",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UpdateApiCorsUpdateCorsProviderframeworkonEventServiceRoleDefaultPolicy7D1F739A",
        "Roles": [
          {
            "Ref": "UpdateApiCorsUpdateCorsProviderframeworkonEventServiceRoleFBF18EED"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UpdateApiCors/UpdateCorsProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UpdateApiCorsUpdateCorsProviderframeworkonEventFC5D994F": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/assetbdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"
        },
        "Description": "AWS CDK resource provider framework - onEvent (deepracer-on-aws/UpdateApiCors/UpdateCorsProvider)",
        "Environment": {
          "Variables": {
            "USER_ON_EVENT_FUNCTION_ARN": {
              "Fn::GetAtt": [
                "UpdateApiCorsUpdateCorsFunctionC369CA21",
                "Arn"
              ]
            }
          }
        },
        "Handler": "framework.onEvent",
        "Role": {
          "Fn::GetAtt": [
            "UpdateApiCorsUpdateCorsProviderframeworkonEventServiceRoleFBF18EED",
            "Arn"
          ]
        },
        "Runtime": {
          "Fn::FindInMap": [
            "LatestNodeRuntimeMap",
            {
              "Ref": "AWS::Region"
            },
            "value"
          ]
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 900
      },
      "DependsOn": [
        "UpdateApiCorsUpdateCorsProviderframeworkonEventServiceRoleDefaultPolicy7D1F739A",
        "UpdateApiCorsUpdateCorsProviderframeworkonEventServiceRoleFBF18EED"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UpdateApiCors/UpdateCorsProvider/framework-onEvent/Resource",
        "aws:asset:path": "asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca",
        "aws:asset:is-bundled": false,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "UpdateApiCorsUpdateCorsResource98633B54": {
      "Type": "AWS::CloudFormation::CustomResource",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": [
            "UpdateApiCorsUpdateCorsProviderframeworkonEventFC5D994F",
            "Arn"
          ]
        },
        "apiId": {
          "Fn::GetAtt": [
            "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
            "Outputs.deepraceronawsApiStackApiBB0205FFRef"
          ]
        },
        "allowedOrigin": {
          "Fn::If": [
            "HasCustomDomain",
            {
              "Ref": "CustomDomain"
            },
            {
              "Fn::Join": [
                "",
                [
                  "https://",
                  {
                    "Fn::GetAtt": [
                      "WebsiteCloudFrontToS3CloudFrontDistribution4313ED9C",
                      "DomainName"
                    ]
                  }
                ]
              ]
            }
          ]
        },
        "forceUpdate": "1778492502108"
      },
      "UpdateReplacePolicy": "Delete",
      "DeletionPolicy": "Delete",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UpdateApiCors/UpdateCorsResource/Default"
      }
    },
    "UsageFunctionsUpdateStorageUsedByProfileFnServiceRoleDB81ACFF": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UsageFunctions/UpdateStorageUsedByProfileFn/ServiceRole/Resource"
      }
    },
    "UsageFunctionsUpdateStorageUsedByProfileFnServiceRoleDefaultPolicy8454B82B": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "s3:GetObject*",
                "s3:GetBucket*",
                "s3:List*"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "S3BucketModelStorageBucket01547CCF",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "S3BucketModelStorageBucket01547CCF",
                          "Arn"
                        ]
                      },
                      "/*"
                    ]
                  ]
                }
              ]
            },
            {
              "Action": [
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "DynamoDBTable7400F6BB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "DynamoDBTable7400F6BB",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "UsageFunctionsUpdateStorageUsedByProfileFnServiceRoleDefaultPolicy8454B82B",
        "Roles": [
          {
            "Ref": "UsageFunctionsUpdateStorageUsedByProfileFnServiceRoleDB81ACFF"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UsageFunctions/UpdateStorageUsedByProfileFn/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "UsageFunctionsUpdateStorageUsedByProfileFnE6F69AD3": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset6cfb6b69f4be798df07476efa75dd798f2f03c2ebf0df7f768d9e89df81216fa.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": "",
            "MODEL_STORAGE_BUCKET_NAME": {
              "Ref": "S3BucketModelStorageBucket01547CCF"
            }
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-UpdateStorageUsedByProfileFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "UsageFunctionsUpdateStorageUsedByProfileFnServiceRoleDB81ACFF",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "UsageFunctionsUpdateStorageUsedByProfileFnServiceRoleDefaultPolicy8454B82B",
        "UsageFunctionsUpdateStorageUsedByProfileFnServiceRoleDB81ACFF"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/UsageFunctions/UpdateStorageUsedByProfileFn/Resource",
        "aws:asset:path": "asset.6cfb6b69f4be798df07476efa75dd798f2f03c2ebf0df7f768d9e89df81216fa",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/Resource"
      }
    },
    "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "s3:PutBucketNotification",
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36",
        "Roles": [
          {
            "Ref": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Role/DefaultPolicy/Resource"
      }
    },
    "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Description": "AWS CloudFormation handler for \"Custom::S3BucketNotifications\" resources (@aws-cdk/aws-s3)",
        "Code": {
          "ZipFile": "import boto3  # type: ignore\nimport json\nimport logging\nimport urllib.request\n\ns3 = boto3.client(\"s3\")\n\nEVENTBRIDGE_CONFIGURATION = 'EventBridgeConfiguration'\nCONFIGURATION_TYPES = [\"TopicConfigurations\", \"QueueConfigurations\", \"LambdaFunctionConfigurations\"]\n\ndef handler(event: dict, context):\n  response_status = \"SUCCESS\"\n  error_message = \"\"\n  try:\n    props = event[\"ResourceProperties\"]\n    notification_configuration = props[\"NotificationConfiguration\"]\n    managed = props.get('Managed', 'true').lower() == 'true'\n    skipDestinationValidation = props.get('SkipDestinationValidation', 'false').lower() == 'true'\n    stack_id = event['StackId']\n    old = event.get(\"OldResourceProperties\", {}).get(\"NotificationConfiguration\", {})\n    if managed:\n      config = handle_managed(event[\"RequestType\"], notification_configuration)\n    else:\n      config = handle_unmanaged(props[\"BucketName\"], stack_id, event[\"RequestType\"], notification_configuration, old)\n    s3.put_bucket_notification_configuration(Bucket=props[\"BucketName\"], NotificationConfiguration=config, SkipDestinationValidation=skipDestinationValidation)\n  except Exception as e:\n    logging.exception(\"Failed to put bucket notification configuration\")\n    response_status = \"FAILED\"\n    error_message = f\"Error: {str(e)}. \"\n  finally:\n    submit_response(event, context, response_status, error_message)\n\ndef handle_managed(request_type, notification_configuration):\n  if request_type == 'Delete':\n    return {}\n  return notification_configuration\n\ndef handle_unmanaged(bucket, stack_id, request_type, notification_configuration, old):\n  def get_id(n):\n    n['Id'] = ''\n    sorted_notifications = sort_filter_rules(n)\n    strToHash=json.dumps(sorted_notifications, sort_keys=True).replace('\"Name\": \"prefix\"', '\"Name\": \"Prefix\"').replace('\"Name\": \"suffix\"', '\"Name\": \"Suffix\"')\n    return f\"{stack_id}-{hash(strToHash)}\"\n  def with_id(n):\n    n['Id'] = get_id(n)\n    return n\n\n  external_notifications = {}\n  existing_notifications = s3.get_bucket_notification_configuration(Bucket=bucket)\n  for t in CONFIGURATION_TYPES:\n    if request_type == 'Update':\n        old_incoming_ids = [get_id(n) for n in old.get(t, [])]\n        external_notifications[t] = [n for n in existing_notifications.get(t, []) if not get_id(n) in old_incoming_ids]      \n    elif request_type == 'Delete':\n        external_notifications[t] = [n for n in existing_notifications.get(t, []) if not n['Id'].startswith(f\"{stack_id}-\")]\n    elif request_type == 'Create':\n        external_notifications[t] = [n for n in existing_notifications.get(t, [])]\n  if EVENTBRIDGE_CONFIGURATION in existing_notifications:\n    external_notifications[EVENTBRIDGE_CONFIGURATION] = existing_notifications[EVENTBRIDGE_CONFIGURATION]\n\n  if request_type == 'Delete':\n    return external_notifications\n\n  notifications = {}\n  for t in CONFIGURATION_TYPES:\n    external = external_notifications.get(t, [])\n    incoming = [with_id(n) for n in notification_configuration.get(t, [])]\n    notifications[t] = external + incoming\n\n  if EVENTBRIDGE_CONFIGURATION in notification_configuration:\n    notifications[EVENTBRIDGE_CONFIGURATION] = notification_configuration[EVENTBRIDGE_CONFIGURATION]\n  elif EVENTBRIDGE_CONFIGURATION in external_notifications:\n    notifications[EVENTBRIDGE_CONFIGURATION] = external_notifications[EVENTBRIDGE_CONFIGURATION]\n\n  return notifications\n\ndef submit_response(event: dict, context, response_status: str, error_message: str):\n  response_body = json.dumps(\n    {\n      \"Status\": response_status,\n      \"Reason\": f\"{error_message}See the details in CloudWatch Log Stream: {context.log_stream_name}\",\n      \"PhysicalResourceId\": event.get(\"PhysicalResourceId\") or event[\"LogicalResourceId\"],\n      \"StackId\": event[\"StackId\"],\n      \"RequestId\": event[\"RequestId\"],\n      \"LogicalResourceId\": event[\"LogicalResourceId\"],\n      \"NoEcho\": False,\n    }\n  ).encode(\"utf-8\")\n  headers = {\"content-type\": \"\", \"content-length\": str(len(response_body))}\n  try:\n    req = urllib.request.Request(url=event[\"ResponseURL\"], headers=headers, data=response_body, method=\"PUT\")\n    with urllib.request.urlopen(req) as response:\n      print(response.read().decode(\"utf-8\"))\n    print(\"Status code: \" + response.reason)\n  except Exception as e:\n      print(\"send(..) failed executing request.urlopen(..): \" + str(e))\n\ndef sort_filter_rules(json_obj):\n  if not isinstance(json_obj, dict):\n      return json_obj\n  for key, value in json_obj.items():\n      if isinstance(value, dict):\n          json_obj[key] = sort_filter_rules(value)\n      elif isinstance(value, list):\n          json_obj[key] = [sort_filter_rules(item) for item in value]\n  if \"Filter\" in json_obj and \"Key\" in json_obj[\"Filter\"] and \"FilterRules\" in json_obj[\"Filter\"][\"Key\"]:\n      filter_rules = json_obj[\"Filter\"][\"Key\"][\"FilterRules\"]\n      sorted_filter_rules = sorted(filter_rules, key=lambda x: x[\"Name\"])\n      json_obj[\"Filter\"][\"Key\"][\"FilterRules\"] = sorted_filter_rules\n  return json_obj"
        },
        "Handler": "index.handler",
        "Role": {
          "Fn::GetAtt": [
            "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC",
            "Arn"
          ]
        },
        "Runtime": "python3.11",
        "Timeout": 300,
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "DependsOn": [
        "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36",
        "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "MonthlyQuotaResetMonthlyQuotaResetFunctionServiceRoleB079C50C": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MonthlyQuotaReset/MonthlyQuotaResetFunction/ServiceRole/Resource"
      }
    },
    "MonthlyQuotaResetMonthlyQuotaResetFunctionServiceRoleDefaultPolicy3F2354D7": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:Query",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "DynamoDBTable7400F6BB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "DynamoDBTable7400F6BB",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "MonthlyQuotaResetMonthlyQuotaResetFunctionServiceRoleDefaultPolicy3F2354D7",
        "Roles": [
          {
            "Ref": "MonthlyQuotaResetMonthlyQuotaResetFunctionServiceRoleB079C50C"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MonthlyQuotaReset/MonthlyQuotaResetFunction/ServiceRole/DefaultPolicy/Resource"
      }
    },
    "MonthlyQuotaResetMonthlyQuotaResetFunctionFDD5D8F7": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset44fd16055f5b4a7c67cd1ed1c9ece7c330900fc828aa570091bb501826b34c22.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": "",
            "PROFILE_UPDATE_CONCURRENCY": "10",
            "PROFILE_UPDATE_BATCH_SIZE": "100"
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-MonthlyQuotaResetFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "MonthlyQuotaResetMonthlyQuotaResetFunctionServiceRoleB079C50C",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 900,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "MonthlyQuotaResetMonthlyQuotaResetFunctionServiceRoleDefaultPolicy3F2354D7",
        "MonthlyQuotaResetMonthlyQuotaResetFunctionServiceRoleB079C50C"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MonthlyQuotaReset/MonthlyQuotaResetFunction/Resource",
        "aws:asset:path": "asset.44fd16055f5b4a7c67cd1ed1c9ece7c330900fc828aa570091bb501826b34c22",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      }
    },
    "MonthlyQuotaResetMonthlyQuotaResetSchedulerRoleEC5677EC": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "scheduler.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MonthlyQuotaReset/MonthlyQuotaResetSchedulerRole/Resource"
      }
    },
    "MonthlyQuotaResetMonthlyQuotaResetSchedulerRoleDefaultPolicyFA5BA36B": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "MonthlyQuotaResetMonthlyQuotaResetFunctionFDD5D8F7",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "MonthlyQuotaResetMonthlyQuotaResetSchedulerRoleDefaultPolicyFA5BA36B",
        "Roles": [
          {
            "Ref": "MonthlyQuotaResetMonthlyQuotaResetSchedulerRoleEC5677EC"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MonthlyQuotaReset/MonthlyQuotaResetSchedulerRole/DefaultPolicy/Resource"
      }
    },
    "MonthlyQuotaResetMonthlyQuotaResetSchedule0AE5B5F4": {
      "Type": "AWS::Scheduler::Schedule",
      "Properties": {
        "Description": "Triggers monthly quota reset function on the 1st of every month at midnight UTC",
        "FlexibleTimeWindow": {
          "MaximumWindowInMinutes": 240,
          "Mode": "FLEXIBLE"
        },
        "ScheduleExpression": "cron(0 0 1 * ? *)",
        "State": "ENABLED",
        "Target": {
          "Arn": {
            "Fn::GetAtt": [
              "MonthlyQuotaResetMonthlyQuotaResetFunctionFDD5D8F7",
              "Arn"
            ]
          },
          "RetryPolicy": {
            "MaximumRetryAttempts": 3
          },
          "RoleArn": {
            "Fn::GetAtt": [
              "MonthlyQuotaResetMonthlyQuotaResetSchedulerRoleEC5677EC",
              "Arn"
            ]
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MonthlyQuotaReset/MonthlyQuotaResetSchedule"
      }
    },
    "DeepRacerScheduledLogGroup8209DD2E": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "KmsKeyId": {
          "Fn::GetAtt": [
            "EcrNestedStackEcrNestedStackResourceD4475E64",
            "Outputs.deepraceronawsEcrDeepRacerCMK1FB00512Arn"
          ]
        },
        "LogGroupName": {
          "Fn::Join": [
            "",
            [
              "/aws/lambda/",
              {
                "Ref": "Namespace"
              },
              "-DeepRacerScheduled"
            ]
          ]
        },
        "RetentionInDays": 731,
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/DeepRacerScheduledLogGroup/Resource"
      }
    },
    "ResourceGroupTaggedResourceGroupC04007EA": {
      "Type": "AWS::ResourceGroups::Group",
      "Properties": {
        "Name": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-TaggedResourceGroup"
            ]
          ]
        },
        "ResourceQuery": {
          "Query": {
            "ResourceTypeFilters": [
              "AWS::AllSupported"
            ],
            "TagFilters": [
              {
                "Key": "aws-solutions:dr-id",
                "Values": [
                  {
                    "Fn::Join": [
                      "",
                      [
                        "DeepRacerOnAWS-",
                        {
                          "Ref": "Namespace"
                        }
                      ]
                    ]
                  }
                ]
              }
            ]
          },
          "Type": "TAG_FILTERS_1_0"
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/ResourceGroup/TaggedResourceGroup"
      }
    },
    "LogInsightsAllActivityQueryBE5FA8A8": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/Recent Activity/AllActivity"
            ]
          ]
        },
        "QueryString": "fields @timestamp, @message, @logStream, level\n| sort @timestamp desc\n| limit 100"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/AllActivityQuery"
      }
    },
    "LogInsightsAllErrorsQueryAC5BA1B7": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/Recent Activity/AllErrors"
            ]
          ]
        },
        "QueryString": "fields @timestamp, @message, @logStream, level\n| filter @message like /ERROR/ or @message like /Exception/ or @message like /FAILED/ or level = \"ERROR\"\n| sort @timestamp desc\n| limit 100"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/AllErrorsQuery"
      }
    },
    "LogInsightsDailyActiveUsersQuery24EB656A": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/User Activity/DailyActiveUsers"
            ]
          ]
        },
        "QueryString": "fields @timestamp, metricsLogData.profileId\n| filter metricsLogSubscriptionKey = \"UserLogIn\"\n| stats count_distinct(metricsLogData.profileId) as daily_active_users by bin(1h)\n| sort @timestamp desc"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/DailyActiveUsersQuery"
      }
    },
    "LogInsightsUserLoginPatternsQueryE8FA2B01": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/User Activity/UserLoginPatterns"
            ]
          ]
        },
        "QueryString": "fields @timestamp, metricsLogData.profileId\n| filter metricsLogSubscriptionKey = \"UserLogIn\"\n| stats count() as login_count by metricsLogData.profileId\n| sort login_count desc\n| limit 50"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/UserLoginPatternsQuery"
      }
    },
    "LogInsightsUserEngagementQuery5639F9F0": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/User Activity/UserEngagement"
            ]
          ]
        },
        "QueryString": "fields @timestamp, metricsLogSubscriptionKey\n| filter metricsLogSubscriptionKey in [\"CreateModel\", \"CreateEvaluation\", \"CreateSubmission\", \"CreateLeaderboard\"]\n| stats count() as activity_count by metricsLogSubscriptionKey, bin(1d)\n| sort @timestamp desc"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/UserEngagementQuery"
      }
    },
    "LogInsightsModelCreationTrendsQuery1852CC66": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/Model Training/ModelCreationTrends"
            ]
          ]
        },
        "QueryString": "fields @timestamp\n| filter metricsLogSubscriptionKey = \"CreateModel\"\n| stats count() as models_created by bin(1d)\n| sort @timestamp desc"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/ModelCreationTrendsQuery"
      }
    },
    "LogInsightsTrainingJobPerformanceQueryAD6B1466": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/Model Training/TrainingJobPerformance"
            ]
          ]
        },
        "QueryString": "fields @timestamp, metricsLogData.jobType, metricsLogData.jobStatus, metricsLogData.sageMakerMinutes\n| filter metricsLogSubscriptionKey = \"DeepRacerJob\"\n| filter metricsLogData.jobType = \"training\"\n| stats count() as job_count, avg(metricsLogData.sageMakerMinutes) as avg_duration_minutes by metricsLogData.jobStatus, bin(1h)\n| sort @timestamp desc"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/TrainingJobPerformanceQuery"
      }
    },
    "LogInsightsEvaluationJobAnalysisQuery6FAAAF4B": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/Model Training/EvaluationJobAnalysis"
            ]
          ]
        },
        "QueryString": "fields @timestamp, metricsLogData.jobType, metricsLogData.jobStatus, metricsLogData.sageMakerMinutes, metricsLogData.modelId\n| filter metricsLogSubscriptionKey = \"DeepRacerJob\"\n| filter metricsLogData.jobType = \"evaluation\"\n| stats count() as evaluation_count, avg(metricsLogData.sageMakerMinutes) as avg_duration by metricsLogData.jobStatus, bin(1h)\n| sort @timestamp desc"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/EvaluationJobAnalysisQuery"
      }
    },
    "LogInsightsModelDownloadPatternsQuery0435EB65": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/Model Training/ModelDownloadPatterns"
            ]
          ]
        },
        "QueryString": "fields @timestamp, metricsLogData.modelId\n| filter metricsLogSubscriptionKey = \"DownloadModel\"\n| stats count() as download_count by metricsLogData.modelId\n| sort download_count desc\n| limit 20"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/ModelDownloadPatternsQuery"
      }
    },
    "LogInsightsSystemSummaryQuery2A9852CD": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/System Metrics/SystemSummary"
            ]
          ]
        },
        "QueryString": "fields @timestamp, metricsLogData.models, metricsLogData.users, metricsLogData.races, metricsLogData.trainingJobs, metricsLogData.evaluationJobs\n| filter metricsLogSubscriptionKey = \"DailyHeartbeat\"\n| sort @timestamp desc\n| limit 30"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/SystemSummaryQuery"
      }
    },
    "LogInsightsErrorFrequencyQueryAD9958D9": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/Error Analysis/ErrorFrequency"
            ]
          ]
        },
        "QueryString": "fields @timestamp, @message, @logStream\n| filter @message like /ERROR/ or @message like /Exception/ or level = \"ERROR\"\n| stats count() as error_count by @logStream, bin(1h)\n| sort error_count desc"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/ErrorFrequencyQuery"
      }
    },
    "LogInsightsErrorTypesQueryFE30BD9B": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/Error Analysis/ErrorTypes"
            ]
          ]
        },
        "QueryString": "fields @timestamp, @message\n| filter @message like /ERROR/ or @message like /Exception/\n| parse @message /(?<error_type>\\w*Error|\\w*Exception)/\n| stats count() as occurrence_count by error_type\n| sort occurrence_count desc\n| limit 20"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/ErrorTypesQuery"
      }
    },
    "LogInsightsFailedJobAnalysisQueryDFAAF726": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/Error Analysis/FailedJobAnalysis"
            ]
          ]
        },
        "QueryString": "fields @timestamp, metricsLogData.jobType, metricsLogData.jobStatus, metricsLogData.modelId\n| filter metricsLogSubscriptionKey = \"DeepRacerJob\"\n| filter metricsLogData.jobStatus like /FAILED|ERROR/\n| stats count() as failed_jobs by metricsLogData.jobType, metricsLogData.jobStatus, bin(1h)\n| sort @timestamp desc"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/FailedJobAnalysisQuery"
      }
    },
    "LogInsightsTimeoutAnalysisQueryCE7C675E": {
      "Type": "AWS::Logs::QueryDefinition",
      "Properties": {
        "LogGroupNames": [
          {
            "Fn::GetAtt": [
              "EcrNestedStackEcrNestedStackResourceD4475E64",
              "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
            ]
          },
          {
            "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
            ]
          },
          {
            "Fn::GetAtt": [
              "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
              "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
            ]
          },
          {
            "Ref": "DeepRacerScheduledLogGroup8209DD2E"
          }
        ],
        "Name": {
          "Fn::Join": [
            "",
            [
              "DeepRacerOnAWS Sample Queries (",
              {
                "Ref": "Namespace"
              },
              ")/Error Analysis/TimeoutAnalysis"
            ]
          ]
        },
        "QueryString": "fields @timestamp, @message, @duration, @billedDuration\n| filter @message like /Task timed out/ or @message like /timeout/\n| stats count() as timeout_count, avg(@duration) as avg_duration_before_timeout by bin(1h)\n| sort @timestamp desc"
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/LogInsights/TimeoutAnalysisQuery"
      }
    },
    "MetricsInfraDailyHeartbeatCollectHeartbeatLambdaServiceRoleC6F47985": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/DailyHeartbeat/CollectHeartbeatLambda/ServiceRole/Resource"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraDailyHeartbeatCollectHeartbeatLambdaServiceRoleDefaultPolicy3BE45875": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            },
            {
              "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:Query",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:ConditionCheckItem",
                "dynamodb:DescribeTable"
              ],
              "Effect": "Allow",
              "Resource": [
                {
                  "Fn::GetAtt": [
                    "DynamoDBTable7400F6BB",
                    "Arn"
                  ]
                },
                {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "DynamoDBTable7400F6BB",
                          "Arn"
                        ]
                      },
                      "/index/*"
                    ]
                  ]
                }
              ]
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "MetricsInfraDailyHeartbeatCollectHeartbeatLambdaServiceRoleDefaultPolicy3BE45875",
        "Roles": [
          {
            "Ref": "MetricsInfraDailyHeartbeatCollectHeartbeatLambdaServiceRoleC6F47985"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/DailyHeartbeat/CollectHeartbeatLambda/ServiceRole/DefaultPolicy/Resource"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraDailyHeartbeatCollectHeartbeatLambda4BC53AEF": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/asset8b871a25c70911bbce2e697471f8c7521ba460f6d580007f8dc1d993d044b3f4.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": "",
            "DB_READ_CONCURRENCY": "10"
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-CollectHeartbeatFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "DeepRacerMetricsLogGroup12AB979D"
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "MetricsInfraDailyHeartbeatCollectHeartbeatLambdaServiceRoleC6F47985",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "MetricsInfraDailyHeartbeatCollectHeartbeatLambdaServiceRoleDefaultPolicy3BE45875",
        "MetricsInfraDailyHeartbeatCollectHeartbeatLambdaServiceRoleC6F47985"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/DailyHeartbeat/CollectHeartbeatLambda/Resource",
        "aws:asset:path": "asset.8b871a25c70911bbce2e697471f8c7521ba460f6d580007f8dc1d993d044b3f4",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraDailyHeartbeatCollectHeartbeatSchedulerRoleA72D0571": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "scheduler.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/DailyHeartbeat/CollectHeartbeatSchedulerRole/Resource"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraDailyHeartbeatCollectHeartbeatSchedulerRoleDefaultPolicy39A29E14": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Resource": {
                "Fn::GetAtt": [
                  "MetricsInfraDailyHeartbeatCollectHeartbeatLambda4BC53AEF",
                  "Arn"
                ]
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "MetricsInfraDailyHeartbeatCollectHeartbeatSchedulerRoleDefaultPolicy39A29E14",
        "Roles": [
          {
            "Ref": "MetricsInfraDailyHeartbeatCollectHeartbeatSchedulerRoleA72D0571"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/DailyHeartbeat/CollectHeartbeatSchedulerRole/DefaultPolicy/Resource"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraDailyHeartbeatCollectHeartbeatSchedule6CC21B46": {
      "Type": "AWS::Scheduler::Schedule",
      "Properties": {
        "Description": "Triggers daily heartbeat function at 12:10 AM every day",
        "FlexibleTimeWindow": {
          "MaximumWindowInMinutes": 120,
          "Mode": "FLEXIBLE"
        },
        "ScheduleExpression": "cron(10 0 * * ? *)",
        "State": "ENABLED",
        "Target": {
          "Arn": {
            "Fn::GetAtt": [
              "MetricsInfraDailyHeartbeatCollectHeartbeatLambda4BC53AEF",
              "Arn"
            ]
          },
          "RetryPolicy": {
            "MaximumRetryAttempts": 3
          },
          "RoleArn": {
            "Fn::GetAtt": [
              "MetricsInfraDailyHeartbeatCollectHeartbeatSchedulerRoleA72D0571",
              "Arn"
            ]
          }
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/DailyHeartbeat/CollectHeartbeatSchedule"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRole00473C20": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Statement": [
            {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              }
            }
          ],
          "Version": "2012-10-17"
        },
        "ManagedPolicyArns": [
          {
            "Fn::Join": [
              "",
              [
                "arn:",
                {
                  "Ref": "AWS::Partition"
                },
                ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
              ]
            ]
          }
        ],
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/MetricsReporter/MetricLogSubscriberLambda/ServiceRole/Resource"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRoleDefaultPolicyDF68804C": {
      "Type": "AWS::IAM::Policy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [
            {
              "Action": [
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords"
              ],
              "Effect": "Allow",
              "Resource": "*"
            }
          ],
          "Version": "2012-10-17"
        },
        "PolicyName": "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRoleDefaultPolicyDF68804C",
        "Roles": [
          {
            "Ref": "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRole00473C20"
          }
        ]
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/MetricsReporter/MetricLogSubscriberLambda/ServiceRole/DefaultPolicy/Resource"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Architectures": [
          "arm64"
        ],
        "Code": {
          "S3Bucket": {
            "Fn::Sub": "solutions-${AWS::Region}"
          },
          "S3Key": "deepracer-on-aws/v1.1.1/assetd8f96a97303c7590de07f78213120652b4858d8df1d1e13fbc100f45da42b288.zip"
        },
        "Environment": {
          "Variables": {
            "ACCOUNT_ID": {
              "Ref": "AWS::AccountId"
            },
            "REGION": {
              "Ref": "AWS::Region"
            },
            "NODE_OPTIONS": "--enable-source-maps",
            "POWERTOOLS_SERVICE_NAME": "DeepRacerIndy",
            "POWERTOOLS_METRICS_NAMESPACE": "DeepRacerIndy",
            "NAMESPACE": {
              "Ref": "Namespace"
            },
            "CUSTOM_USER_AGENT": "AwsSolution/SO0310/v1.1.1",
            "DEPLOYMENT_MODE": "",
            "STACK_ARN": {
              "Ref": "AWS::StackId"
            },
            "SOLUTION_ID": "SO0310",
            "SOLUTION_VERSION": "v1.1.1",
            "METRICS_ENDPOINT": "https://metrics.awssolutionsbuilder.com/generic"
          }
        },
        "FunctionName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-DeepRacerOnAWS-ProcessSubscribedMetricsLogsFn"
            ]
          ]
        },
        "Handler": "index.lambdaHandler",
        "LoggingConfig": {
          "ApplicationLogLevel": "INFO",
          "LogFormat": "JSON",
          "LogGroup": {
            "Ref": "DeepRacerMetricsLogGroup12AB979D"
          }
        },
        "MemorySize": 512,
        "Role": {
          "Fn::GetAtt": [
            "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRole00473C20",
            "Arn"
          ]
        },
        "Runtime": "nodejs22.x",
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ],
        "Timeout": 30,
        "TracingConfig": {
          "Mode": "Active"
        }
      },
      "DependsOn": [
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRoleDefaultPolicyDF68804C",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRole00473C20"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/MetricsReporter/MetricLogSubscriberLambda/Resource",
        "aws:asset:path": "asset.d8f96a97303c7590de07f78213120652b4858d8df1d1e13fbc100f45da42b288",
        "aws:asset:is-bundled": true,
        "aws:asset:property": "Code",
        "guard": {
          "SuppressedRules": [
            "LAMBDA_INSIDE_VPC",
            "LAMBDA_CONCURRENCY_CHECK"
          ]
        }
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraMetricsReporterMetricLogSubscriberLambdaLogsInvokePermissionA32C9865": {
      "Type": "AWS::Lambda::Permission",
      "Properties": {
        "Action": "lambda:InvokeFunction",
        "FunctionName": {
          "Fn::GetAtt": [
            "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
            "Arn"
          ]
        },
        "Principal": "logs.amazonaws.com",
        "SourceArn": {
          "Fn::Join": [
            "",
            [
              "arn:aws:logs:",
              {
                "Ref": "AWS::Region"
              },
              ":",
              {
                "Ref": "AWS::AccountId"
              },
              ":log-group:/aws/lambda/*:*"
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/MetricsReporter/MetricLogSubscriberLambda/LogsInvokePermission"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraMetricsReporterMetricLogSubscriptionDeepRacerEcrImagesLogGroup0F46749C": {
      "Type": "AWS::Logs::SubscriptionFilter",
      "Properties": {
        "DestinationArn": {
          "Fn::GetAtt": [
            "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
            "Arn"
          ]
        },
        "FilterPattern": "{ ($.metricsLogSubscriptionKey = \"DailyHeartbeat\") || ($.metricsLogSubscriptionKey = \"UserLogIn\") || ($.metricsLogSubscriptionKey = \"ImportModel\") || ($.metricsLogSubscriptionKey = \"DownloadModel\") || ($.metricsLogSubscriptionKey = \"UnexpectedError\") || ($.metricsLogSubscriptionKey = \"CreateEvaluation\") || ($.metricsLogSubscriptionKey = \"CreateLeaderboard\") || ($.metricsLogSubscriptionKey = \"CreateModel\") || ($.metricsLogSubscriptionKey = \"CreateSubmission\") || ($.metricsLogSubscriptionKey = \"DeleteModel\") || ($.metricsLogSubscriptionKey = \"DeleteProfile\") || ($.metricsLogSubscriptionKey = \"DeleteProfileModels\") || ($.metricsLogSubscriptionKey = \"CreateUser\") || ($.metricsLogSubscriptionKey = \"DeepRacerJob\") }",
        "LogGroupName": {
          "Fn::GetAtt": [
            "EcrNestedStackEcrNestedStackResourceD4475E64",
            "Outputs.deepraceronawsEcrDeepRacerEcrImagesLogGroupD1DE8872Ref"
          ]
        }
      },
      "DependsOn": [
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaLogsInvokePermissionA32C9865",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRoleDefaultPolicyDF68804C",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRole00473C20"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/MetricsReporter/MetricLogSubscription-DeepRacerEcrImagesLogGroup"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraMetricsReporterMetricLogSubscriptionDeepRacerUserIdentityLogGroupE185B33E": {
      "Type": "AWS::Logs::SubscriptionFilter",
      "Properties": {
        "DestinationArn": {
          "Fn::GetAtt": [
            "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
            "Arn"
          ]
        },
        "FilterPattern": "{ ($.metricsLogSubscriptionKey = \"DailyHeartbeat\") || ($.metricsLogSubscriptionKey = \"UserLogIn\") || ($.metricsLogSubscriptionKey = \"ImportModel\") || ($.metricsLogSubscriptionKey = \"DownloadModel\") || ($.metricsLogSubscriptionKey = \"UnexpectedError\") || ($.metricsLogSubscriptionKey = \"CreateEvaluation\") || ($.metricsLogSubscriptionKey = \"CreateLeaderboard\") || ($.metricsLogSubscriptionKey = \"CreateModel\") || ($.metricsLogSubscriptionKey = \"CreateSubmission\") || ($.metricsLogSubscriptionKey = \"DeleteModel\") || ($.metricsLogSubscriptionKey = \"DeleteProfile\") || ($.metricsLogSubscriptionKey = \"DeleteProfileModels\") || ($.metricsLogSubscriptionKey = \"CreateUser\") || ($.metricsLogSubscriptionKey = \"DeepRacerJob\") }",
        "LogGroupName": {
          "Ref": "DeepRacerUserIdentityLogGroup1631EFAE"
        }
      },
      "DependsOn": [
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaLogsInvokePermissionA32C9865",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRoleDefaultPolicyDF68804C",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRole00473C20"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/MetricsReporter/MetricLogSubscription-DeepRacerUserIdentityLogGroup"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraMetricsReporterMetricLogSubscriptionDeepRacerApisLogGroup29E38DE7": {
      "Type": "AWS::Logs::SubscriptionFilter",
      "Properties": {
        "DestinationArn": {
          "Fn::GetAtt": [
            "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
            "Arn"
          ]
        },
        "FilterPattern": "{ ($.metricsLogSubscriptionKey = \"DailyHeartbeat\") || ($.metricsLogSubscriptionKey = \"UserLogIn\") || ($.metricsLogSubscriptionKey = \"ImportModel\") || ($.metricsLogSubscriptionKey = \"DownloadModel\") || ($.metricsLogSubscriptionKey = \"UnexpectedError\") || ($.metricsLogSubscriptionKey = \"CreateEvaluation\") || ($.metricsLogSubscriptionKey = \"CreateLeaderboard\") || ($.metricsLogSubscriptionKey = \"CreateModel\") || ($.metricsLogSubscriptionKey = \"CreateSubmission\") || ($.metricsLogSubscriptionKey = \"DeleteModel\") || ($.metricsLogSubscriptionKey = \"DeleteProfile\") || ($.metricsLogSubscriptionKey = \"DeleteProfileModels\") || ($.metricsLogSubscriptionKey = \"CreateUser\") || ($.metricsLogSubscriptionKey = \"DeepRacerJob\") }",
        "LogGroupName": {
          "Fn::GetAtt": [
            "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
            "Outputs.deepraceronawsApiStackDeepRacerApisLogGroupFF908639Ref"
          ]
        }
      },
      "DependsOn": [
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaLogsInvokePermissionA32C9865",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRoleDefaultPolicyDF68804C",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRole00473C20"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/MetricsReporter/MetricLogSubscription-DeepRacerApisLogGroup"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraMetricsReporterMetricLogSubscriptionDeepRacerSystemEventsLogGroup8C97FF95": {
      "Type": "AWS::Logs::SubscriptionFilter",
      "Properties": {
        "DestinationArn": {
          "Fn::GetAtt": [
            "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
            "Arn"
          ]
        },
        "FilterPattern": "{ ($.metricsLogSubscriptionKey = \"DailyHeartbeat\") || ($.metricsLogSubscriptionKey = \"UserLogIn\") || ($.metricsLogSubscriptionKey = \"ImportModel\") || ($.metricsLogSubscriptionKey = \"DownloadModel\") || ($.metricsLogSubscriptionKey = \"UnexpectedError\") || ($.metricsLogSubscriptionKey = \"CreateEvaluation\") || ($.metricsLogSubscriptionKey = \"CreateLeaderboard\") || ($.metricsLogSubscriptionKey = \"CreateModel\") || ($.metricsLogSubscriptionKey = \"CreateSubmission\") || ($.metricsLogSubscriptionKey = \"DeleteModel\") || ($.metricsLogSubscriptionKey = \"DeleteProfile\") || ($.metricsLogSubscriptionKey = \"DeleteProfileModels\") || ($.metricsLogSubscriptionKey = \"CreateUser\") || ($.metricsLogSubscriptionKey = \"DeepRacerJob\") }",
        "LogGroupName": {
          "Fn::GetAtt": [
            "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
            "Outputs.deepraceronawsApiStackDeepRacerSystemEventsLogGroupE0E810EARef"
          ]
        }
      },
      "DependsOn": [
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaLogsInvokePermissionA32C9865",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRoleDefaultPolicyDF68804C",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRole00473C20"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/MetricsReporter/MetricLogSubscription-DeepRacerSystemEventsLogGroup"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraMetricsReporterMetricLogSubscriptionDeepRacerWorkflowLogGroupC5E10142": {
      "Type": "AWS::Logs::SubscriptionFilter",
      "Properties": {
        "DestinationArn": {
          "Fn::GetAtt": [
            "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
            "Arn"
          ]
        },
        "FilterPattern": "{ ($.metricsLogSubscriptionKey = \"DailyHeartbeat\") || ($.metricsLogSubscriptionKey = \"UserLogIn\") || ($.metricsLogSubscriptionKey = \"ImportModel\") || ($.metricsLogSubscriptionKey = \"DownloadModel\") || ($.metricsLogSubscriptionKey = \"UnexpectedError\") || ($.metricsLogSubscriptionKey = \"CreateEvaluation\") || ($.metricsLogSubscriptionKey = \"CreateLeaderboard\") || ($.metricsLogSubscriptionKey = \"CreateModel\") || ($.metricsLogSubscriptionKey = \"CreateSubmission\") || ($.metricsLogSubscriptionKey = \"DeleteModel\") || ($.metricsLogSubscriptionKey = \"DeleteProfile\") || ($.metricsLogSubscriptionKey = \"DeleteProfileModels\") || ($.metricsLogSubscriptionKey = \"CreateUser\") || ($.metricsLogSubscriptionKey = \"DeepRacerJob\") }",
        "LogGroupName": {
          "Fn::GetAtt": [
            "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
            "Outputs.deepraceronawsApiStackDeepRacerWorkflowLogGroupAB31CF9CRef"
          ]
        }
      },
      "DependsOn": [
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaLogsInvokePermissionA32C9865",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRoleDefaultPolicyDF68804C",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRole00473C20"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/MetricsReporter/MetricLogSubscription-DeepRacerWorkflowLogGroup"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraMetricsReporterMetricLogSubscriptionDeepRacerScheduledLogGroup27FF90C8": {
      "Type": "AWS::Logs::SubscriptionFilter",
      "Properties": {
        "DestinationArn": {
          "Fn::GetAtt": [
            "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
            "Arn"
          ]
        },
        "FilterPattern": "{ ($.metricsLogSubscriptionKey = \"DailyHeartbeat\") || ($.metricsLogSubscriptionKey = \"UserLogIn\") || ($.metricsLogSubscriptionKey = \"ImportModel\") || ($.metricsLogSubscriptionKey = \"DownloadModel\") || ($.metricsLogSubscriptionKey = \"UnexpectedError\") || ($.metricsLogSubscriptionKey = \"CreateEvaluation\") || ($.metricsLogSubscriptionKey = \"CreateLeaderboard\") || ($.metricsLogSubscriptionKey = \"CreateModel\") || ($.metricsLogSubscriptionKey = \"CreateSubmission\") || ($.metricsLogSubscriptionKey = \"DeleteModel\") || ($.metricsLogSubscriptionKey = \"DeleteProfile\") || ($.metricsLogSubscriptionKey = \"DeleteProfileModels\") || ($.metricsLogSubscriptionKey = \"CreateUser\") || ($.metricsLogSubscriptionKey = \"DeepRacerJob\") }",
        "LogGroupName": {
          "Ref": "DeepRacerScheduledLogGroup8209DD2E"
        }
      },
      "DependsOn": [
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaLogsInvokePermissionA32C9865",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRoleDefaultPolicyDF68804C",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRole00473C20"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/MetricsReporter/MetricLogSubscription-DeepRacerScheduledLogGroup"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "MetricsInfraMetricsReporterMetricLogSubscriptionDeepRacerMetricsLogGroupBA59836E": {
      "Type": "AWS::Logs::SubscriptionFilter",
      "Properties": {
        "DestinationArn": {
          "Fn::GetAtt": [
            "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
            "Arn"
          ]
        },
        "FilterPattern": "{ ($.metricsLogSubscriptionKey = \"DailyHeartbeat\") || ($.metricsLogSubscriptionKey = \"UserLogIn\") || ($.metricsLogSubscriptionKey = \"ImportModel\") || ($.metricsLogSubscriptionKey = \"DownloadModel\") || ($.metricsLogSubscriptionKey = \"UnexpectedError\") || ($.metricsLogSubscriptionKey = \"CreateEvaluation\") || ($.metricsLogSubscriptionKey = \"CreateLeaderboard\") || ($.metricsLogSubscriptionKey = \"CreateModel\") || ($.metricsLogSubscriptionKey = \"CreateSubmission\") || ($.metricsLogSubscriptionKey = \"DeleteModel\") || ($.metricsLogSubscriptionKey = \"DeleteProfile\") || ($.metricsLogSubscriptionKey = \"DeleteProfileModels\") || ($.metricsLogSubscriptionKey = \"CreateUser\") || ($.metricsLogSubscriptionKey = \"DeepRacerJob\") }",
        "LogGroupName": {
          "Ref": "DeepRacerMetricsLogGroup12AB979D"
        }
      },
      "DependsOn": [
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaLogsInvokePermissionA32C9865",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaC8AC5B85",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRoleDefaultPolicyDF68804C",
        "MetricsInfraMetricsReporterMetricLogSubscriberLambdaServiceRole00473C20"
      ],
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MetricsInfra/MetricsReporter/MetricLogSubscription-DeepRacerMetricsLogGroup"
      },
      "Condition": "MetricsInfraSendAnonymizedData168371B5"
    },
    "DeepRacerMetricsLogGroup12AB979D": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "KmsKeyId": {
          "Fn::GetAtt": [
            "EcrNestedStackEcrNestedStackResourceD4475E64",
            "Outputs.deepraceronawsEcrDeepRacerCMK1FB00512Arn"
          ]
        },
        "LogGroupName": {
          "Fn::Join": [
            "",
            [
              "/aws/lambda/",
              {
                "Ref": "Namespace"
              },
              "-DeepRacerMetrics"
            ]
          ]
        },
        "RetentionInDays": 731,
        "Tags": [
          {
            "Key": "aws-solutions:dr-id",
            "Value": {
              "Fn::Join": [
                "",
                [
                  "DeepRacerOnAWS-",
                  {
                    "Ref": "Namespace"
                  }
                ]
              ]
            }
          }
        ]
      },
      "UpdateReplacePolicy": "Retain",
      "DeletionPolicy": "Retain",
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/DeepRacerMetricsLogGroup/Resource"
      }
    },
    "MonitoringDashboard9E35EEED": {
      "Type": "AWS::CloudWatch::Dashboard",
      "Properties": {
        "DashboardBody": {
          "Fn::Join": [
            "",
            [
              "{\"widgets\":[{\"type\":\"text\",\"width\":24,\"height\":2,\"x\":0,\"y\":0,\"properties\":{\"markdown\":\"# DeepRacer Monitoring Dashboard\\nNamespace: **",
              {
                "Ref": "Namespace"
              },
              "**\"}},{\"type\":\"text\",\"width\":24,\"height\":1,\"x\":0,\"y\":2,\"properties\":{\"markdown\":\"## System Alarms\"}},{\"type\":\"alarm\",\"width\":24,\"height\":3,\"x\":0,\"y\":3,\"properties\":{\"title\":\"Alarm Status\",\"alarms\":[\"",
              {
                "Fn::GetAtt": [
                  "UserPoolPreSignUpErrorAlarm3307DC04",
                  "Arn"
                ]
              },
              "\",\"",
              {
                "Fn::GetAtt": [
                  "UserPoolPostSignUpErrorAlarmBF8E665E",
                  "Arn"
                ]
              },
              "\",\"",
              {
                "Fn::GetAtt": [
                  "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                  "Outputs.deepraceronawsApiStackApiAssetPackagingDLQAlarm99E358D1Arn"
                ]
              },
              "\",\"",
              {
                "Fn::GetAtt": [
                  "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                  "Outputs.deepraceronawsApiStackApiimportWorkflowImportModelLambdaErrorsAlarmAF14FC2EArn"
                ]
              },
              "\"]}},{\"type\":\"text\",\"width\":24,\"height\":2,\"x\":0,\"y\":6,\"properties\":{\"markdown\":\"## Training Instance Usage\\n\\nCurrent ml.c7i.4xlarge training job usage. [View quota limits and utilization](https://console.aws.amazon.com/servicequotas/home/services/sagemaker/quotas/L-1EC4D7FD)\"}},{\"type\":\"metric\",\"width\":24,\"height\":6,\"x\":0,\"y\":8,\"properties\":{\"view\":\"timeSeries\",\"title\":\"ml.c7i.4xlarge Training Jobs In Use\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"AWS/Usage\",\"ResourceCount\",\"Class\",\"None\",\"Resource\",\"training-job/ml.c7i.4xlarge\",\"Service\",\"SageMaker\",\"Type\",\"Resource\",{\"label\":\"Active Instances\",\"stat\":\"Maximum\"}]],\"yAxis\":{}}},{\"type\":\"text\",\"width\":24,\"height\":1,\"x\":0,\"y\":14,\"properties\":{\"markdown\":\"## Training & Evaluation Jobs\"}},{\"type\":\"metric\",\"width\":12,\"height\":6,\"x\":0,\"y\":15,\"properties\":{\"view\":\"timeSeries\",\"title\":\"Training Job Outcomes\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"DeepRacerIndyWorkflow\",\"JobOutcome\",\"JobStatus\",\"COMPLETED\",\"JobType\",\"training\",\"service\",\"DeepRacerIndy\",{\"label\":\"Completed\",\"period\":3600,\"stat\":\"Sum\"}],[\"DeepRacerIndyWorkflow\",\"JobOutcome\",\"JobStatus\",\"FAILED\",\"JobType\",\"training\",\"service\",\"DeepRacerIndy\",{\"label\":\"Failed\",\"period\":3600,\"stat\":\"Sum\"}]],\"yAxis\":{}}},{\"type\":\"metric\",\"width\":12,\"height\":6,\"x\":12,\"y\":15,\"properties\":{\"view\":\"timeSeries\",\"title\":\"Evaluation Job Outcomes\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"DeepRacerIndyWorkflow\",\"JobOutcome\",\"JobStatus\",\"COMPLETED\",\"JobType\",\"evaluation\",\"service\",\"DeepRacerIndy\",{\"label\":\"Completed\",\"period\":3600,\"stat\":\"Sum\"}],[\"DeepRacerIndyWorkflow\",\"JobOutcome\",\"JobStatus\",\"FAILED\",\"JobType\",\"evaluation\",\"service\",\"DeepRacerIndy\",{\"label\":\"Failed\",\"period\":3600,\"stat\":\"Sum\"}]],\"yAxis\":{}}},{\"type\":\"text\",\"width\":24,\"height\":1,\"x\":0,\"y\":21,\"properties\":{\"markdown\":\"## Queue Metrics\"}},{\"type\":\"metric\",\"width\":12,\"height\":6,\"x\":0,\"y\":22,\"properties\":{\"view\":\"timeSeries\",\"title\":\"Queue: ",
              {
                "Fn::GetAtt": [
                  "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                  "Outputs.deepraceronawsApiStackApiWorkflowJobQueue01EC220CQueueName"
                ]
              },
              " - Messages\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"AWS/SQS\",\"ApproximateNumberOfMessagesVisible\",\"QueueName\",\"",
              {
                "Fn::GetAtt": [
                  "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                  "Outputs.deepraceronawsApiStackApiWorkflowJobQueue01EC220CQueueName"
                ]
              },
              "\",{\"label\":\"Visible\",\"stat\":\"Maximum\"}],[\"AWS/SQS\",\"ApproximateNumberOfMessagesNotVisible\",\"QueueName\",\"",
              {
                "Fn::GetAtt": [
                  "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                  "Outputs.deepraceronawsApiStackApiWorkflowJobQueue01EC220CQueueName"
                ]
              },
              "\",{\"label\":\"In Flight\",\"stat\":\"Maximum\"}]],\"yAxis\":{}}},{\"type\":\"text\",\"width\":24,\"height\":1,\"x\":0,\"y\":28,\"properties\":{\"markdown\":\"## API Performance\"}},{\"type\":\"metric\",\"width\":12,\"height\":6,\"x\":0,\"y\":29,\"properties\":{\"view\":\"timeSeries\",\"title\":\"API Request Count\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"AWS/ApiGateway\",\"Count\",\"ApiName\",\"",
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndyApi\",{\"stat\":\"SampleCount\"}]],\"yAxis\":{}}},{\"type\":\"metric\",\"width\":12,\"height\":6,\"x\":12,\"y\":29,\"properties\":{\"view\":\"timeSeries\",\"title\":\"API Latency\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"AWS/ApiGateway\",\"Latency\",\"ApiName\",\"",
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndyApi\"]],\"yAxis\":{}}},{\"type\":\"metric\",\"width\":12,\"height\":6,\"x\":0,\"y\":35,\"properties\":{\"view\":\"timeSeries\",\"title\":\"API 4XX Errors\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"AWS/ApiGateway\",\"4XXError\",\"ApiName\",\"",
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndyApi\",{\"stat\":\"Sum\"}]],\"yAxis\":{}}},{\"type\":\"metric\",\"width\":12,\"height\":6,\"x\":12,\"y\":35,\"properties\":{\"view\":\"timeSeries\",\"title\":\"API 5XX Errors\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"AWS/ApiGateway\",\"5XXError\",\"ApiName\",\"",
              {
                "Ref": "Namespace"
              },
              "-DeepRacerIndyApi\",{\"stat\":\"Sum\"}]],\"yAxis\":{}}},{\"type\":\"text\",\"width\":24,\"height\":1,\"x\":0,\"y\":41,\"properties\":{\"markdown\":\"## Database Performance\"}},{\"type\":\"metric\",\"width\":12,\"height\":6,\"x\":0,\"y\":42,\"properties\":{\"view\":\"timeSeries\",\"title\":\"DynamoDB Read Capacity\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"AWS/DynamoDB\",\"ConsumedReadCapacityUnits\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\"}]],\"yAxis\":{}}},{\"type\":\"metric\",\"width\":12,\"height\":6,\"x\":12,\"y\":42,\"properties\":{\"view\":\"timeSeries\",\"title\":\"DynamoDB Write Capacity\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"AWS/DynamoDB\",\"ConsumedWriteCapacityUnits\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\"}]],\"yAxis\":{}}},{\"type\":\"metric\",\"width\":12,\"height\":6,\"x\":0,\"y\":48,\"properties\":{\"view\":\"timeSeries\",\"title\":\"DynamoDB User Errors\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"AWS/DynamoDB\",\"UserErrors\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\"}]],\"yAxis\":{}}},{\"type\":\"metric\",\"width\":12,\"height\":6,\"x\":12,\"y\":48,\"properties\":{\"view\":\"timeSeries\",\"title\":\"DynamoDB System Errors\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[{\"label\":\"Sum of errors across all operations\",\"expression\":\"getitem + batchgetitem + scan + query + getrecords + putitem + deleteitem + updateitem + batchwriteitem + transactwriteitems + transactgetitems + executetransaction + batchexecutestatement + executestatement\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"GetItem\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"getitem\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"BatchGetItem\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"batchgetitem\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"Scan\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"scan\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"Query\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"query\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"GetRecords\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"getrecords\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"PutItem\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"putitem\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"DeleteItem\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"deleteitem\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"UpdateItem\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"updateitem\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"BatchWriteItem\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"batchwriteitem\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"TransactWriteItems\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"transactwriteitems\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"TransactGetItems\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"transactgetitems\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"ExecuteTransaction\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"executetransaction\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"BatchExecuteStatement\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"batchexecutestatement\"}],[\"AWS/DynamoDB\",\"SystemErrors\",\"Operation\",\"ExecuteStatement\",\"TableName\",\"",
              {
                "Ref": "DynamoDBTable7400F6BB"
              },
              "\",{\"accountId\":\"",
              {
                "Ref": "AWS::AccountId"
              },
              "\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"stat\":\"Sum\",\"visible\":false,\"id\":\"executestatement\"}]],\"yAxis\":{}}},{\"type\":\"text\",\"width\":24,\"height\":1,\"x\":0,\"y\":54,\"properties\":{\"markdown\":\"## Email\"}},{\"type\":\"metric\",\"width\":8,\"height\":3,\"x\":0,\"y\":55,\"properties\":{\"view\":\"singleValue\",\"title\":\"Daily authentication email count\",\"region\":\"",
              {
                "Ref": "AWS::Region"
              },
              "\",\"metrics\":[[\"DeepRacerOnAWS/Email\",\"TransactionalEmailSent\",\"Namespace\",\"",
              {
                "Ref": "Namespace"
              },
              "\",{\"label\":\"Number of authentication emails sent today.\",\"period\":86400,\"stat\":\"Sum\"}]],\"setPeriodToTimeRange\":true}}",
              {
                "Fn::If": [
                  "IsSesEnabled",
                  {
                    "Fn::Join": [
                      "",
                      [
                        ",{\"type\":\"alarm\",\"width\":24,\"height\":3,\"properties\":{\"title\":\"SES Alarm Status\",\"alarms\":[\"",
                        {
                          "Fn::Join": [
                            "\",\"",
                            [
                              {
                                "Fn::GetAtt": [
                                  "UserPoolEmailVolumeAnomalyAlarm13AA4C91",
                                  "Arn"
                                ]
                              },
                              {
                                "Fn::GetAtt": [
                                  "UserPoolSesBounceRateAlarmDB4AACA1",
                                  "Arn"
                                ]
                              },
                              {
                                "Fn::GetAtt": [
                                  "UserPoolSesComplaintRateAlarm3DF4D832",
                                  "Arn"
                                ]
                              }
                            ]
                          ]
                        },
                        "\"]}}"
                      ]
                    ]
                  },
                  ""
                ]
              },
              "]}"
            ]
          ]
        },
        "DashboardName": {
          "Fn::Join": [
            "",
            [
              {
                "Ref": "Namespace"
              },
              "-deepracer-monitoring-",
              {
                "Ref": "AWS::Region"
              }
            ]
          ]
        }
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/MonitoringDashboard/Dashboard/Resource"
      }
    },
    "CDKMetadata": {
      "Type": "AWS::CDK::Metadata",
      "Properties": {
        "Analytics": "v2:deflate64:H4sIAAAAAAAA/21US28bOQz+LbnLauIcit7WtZu2QNp6Pd3s0ZA19JixRhyIlA1jMP99Ic3DTjcn8uNTfIhz3T58+qjv78yZZ7Y8zhzudFuIsUe13Pu1CaYGgZDAJjpIdEm+REHyypx525YXb2oqd7r9bXYOXubJ5qujnXFZ0Cl+1O3naI8gSTVwPVmTQ3u5igfcg8+GoVPO1LvS6DY9B0KNzCn1cu+forf5GRPz5QReCorBwg/TNOirZPe+9NlcILxAyNEK9JUDoSlmp8DOdfvS2GT7sl6qdcCTESjizvd1XLkNRYFc61V+lS2YyaLJDyzAxoBy+RooNtn4jeAnyJnCcWFd0t2gPuZVcBtzSvmuulOmaSz5PVa5hYumcWgnzy/+hIF8DV6G0e6xiiHr14H22Ne0gsbRJVkVEoxAlUf2jVigfOMzNvSNzzjDracSXln/zGSaGppatxvqM2V63YqeSyu0bQ0zCOtFIqqcout+WW7TWUexPBuxB90unAl1CnVlPNXGXVYgYIWCWhk+7MiEMr96BJ2yVHkU0u0/DGFNlIcy8SOzdDg07/+S7yV4QbmMzrc4FboQMfZQ/+Gfd6FTkNaWdTt+u0Q75ahi3T5TNa3QLf93hHBZwR493uwG24BNwk/oBEKnWKDZD+1n3RbRWoBSPRl0ankgtKD+NSiqECPww9gD+n61b/AfUbZi+Mj6OQ/6uz/REfox7AN5yav3K2CFfmEtMC/JSyCnNsANeYZvYEoIfB38+4oVsgTcxbG4W9wptgcoo4Og01sHoAJw/vtVahIn1dDgZWShejOoh6QTP52KN1brQCcsIaTTpPImFmKq4aT0Z3MKYrPndszPenROtr+iNFHGj+HSMdqaM1uHenHmpcN8nzr1cH+vH+7+SueZyeVCeWbJs4RohT/kuz31ecaPepnQU0K/qXjsVPp0+pU/nOZzPZ/r+7tXRpyF6AVr0Jue/gcLOfvGCAYAAA=="
      },
      "Metadata": {
        "aws:cdk:path": "deepracer-on-aws/CDKMetadata/Default"
      },
      "Condition": "CDKMetadataAvailable"
    }
  },
  "Mappings": {
    "LatestNodeRuntimeMap": {
      "af-south-1": {
        "value": "nodejs22.x"
      },
      "ap-east-1": {
        "value": "nodejs22.x"
      },
      "ap-east-2": {
        "value": "nodejs22.x"
      },
      "ap-northeast-1": {
        "value": "nodejs22.x"
      },
      "ap-northeast-2": {
        "value": "nodejs22.x"
      },
      "ap-northeast-3": {
        "value": "nodejs22.x"
      },
      "ap-south-1": {
        "value": "nodejs22.x"
      },
      "ap-south-2": {
        "value": "nodejs22.x"
      },
      "ap-southeast-1": {
        "value": "nodejs22.x"
      },
      "ap-southeast-2": {
        "value": "nodejs22.x"
      },
      "ap-southeast-3": {
        "value": "nodejs22.x"
      },
      "ap-southeast-4": {
        "value": "nodejs22.x"
      },
      "ap-southeast-5": {
        "value": "nodejs22.x"
      },
      "ap-southeast-7": {
        "value": "nodejs22.x"
      },
      "ca-central-1": {
        "value": "nodejs22.x"
      },
      "ca-west-1": {
        "value": "nodejs22.x"
      },
      "cn-north-1": {
        "value": "nodejs22.x"
      },
      "cn-northwest-1": {
        "value": "nodejs22.x"
      },
      "eu-central-1": {
        "value": "nodejs22.x"
      },
      "eu-central-2": {
        "value": "nodejs22.x"
      },
      "eu-isoe-west-1": {
        "value": "nodejs18.x"
      },
      "eu-north-1": {
        "value": "nodejs22.x"
      },
      "eu-south-1": {
        "value": "nodejs22.x"
      },
      "eu-south-2": {
        "value": "nodejs22.x"
      },
      "eu-west-1": {
        "value": "nodejs22.x"
      },
      "eu-west-2": {
        "value": "nodejs22.x"
      },
      "eu-west-3": {
        "value": "nodejs22.x"
      },
      "il-central-1": {
        "value": "nodejs22.x"
      },
      "me-central-1": {
        "value": "nodejs22.x"
      },
      "me-south-1": {
        "value": "nodejs22.x"
      },
      "mx-central-1": {
        "value": "nodejs22.x"
      },
      "sa-east-1": {
        "value": "nodejs22.x"
      },
      "us-east-1": {
        "value": "nodejs22.x"
      },
      "us-east-2": {
        "value": "nodejs22.x"
      },
      "us-gov-east-1": {
        "value": "nodejs22.x"
      },
      "us-gov-west-1": {
        "value": "nodejs22.x"
      },
      "us-iso-east-1": {
        "value": "nodejs18.x"
      },
      "us-iso-west-1": {
        "value": "nodejs18.x"
      },
      "us-isob-east-1": {
        "value": "nodejs18.x"
      },
      "us-isob-west-1": {
        "value": "nodejs18.x"
      },
      "us-west-1": {
        "value": "nodejs22.x"
      },
      "us-west-2": {
        "value": "nodejs22.x"
      }
    },
    "MetricsInfraAnonymizedData6566E64E": {
      "SendAnonymizedData": {
        "Data": "Yes"
      }
    }
  },
  "Outputs": {
    "UserPoolUserPoolIdC5F3DCB2": {
      "Value": {
        "Ref": "UserPool6D0DFADB"
      }
    },
    "UserPoolUserPoolClientIdFA5F5A35": {
      "Value": {
        "Ref": "UserPoolWebClientEB451012"
      }
    },
    "UserPoolIdentityPoolId3155995A": {
      "Value": {
        "Ref": "UserPoolIdentityPoolA58D72D6"
      }
    },
    "WebsiteUrlB509D73D": {
      "Value": {
        "Fn::Join": [
          "",
          [
            "https://",
            {
              "Fn::GetAtt": [
                "WebsiteCloudFrontToS3CloudFrontDistribution4313ED9C",
                "DomainName"
              ]
            }
          ]
        ]
      }
    },
    "ApiEndpoint": {
      "Value": {
        "Fn::Join": [
          "",
          [
            "https://",
            {
              "Fn::GetAtt": [
                "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                "Outputs.deepraceronawsApiStackApiBB0205FFRef"
              ]
            },
            ".execute-api.",
            {
              "Ref": "AWS::Region"
            },
            ".",
            {
              "Ref": "AWS::URLSuffix"
            },
            "/",
            {
              "Fn::GetAtt": [
                "ApiStackNestedStackApiStackNestedStackResource56E3B9D0",
                "Outputs.deepraceronawsApiStackApiDeploymentStageprod2937C774Ref"
              ]
            },
            "/"
          ]
        ]
      }
    }
  }
}