// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`golden snapshot 1`] = ` { "Mappings": { "DefaultCrNodeVersionMap": { "af-south-1": { "value": "nodejs16.x", }, "ap-east-1": { "value": "nodejs16.x", }, "ap-northeast-1": { "value": "nodejs16.x", }, "ap-northeast-2": { "value": "nodejs16.x", }, "ap-northeast-3": { "value": "nodejs16.x", }, "ap-south-1": { "value": "nodejs16.x", }, "ap-south-2": { "value": "nodejs16.x", }, "ap-southeast-1": { "value": "nodejs16.x", }, "ap-southeast-2": { "value": "nodejs16.x", }, "ap-southeast-3": { "value": "nodejs16.x", }, "ca-central-1": { "value": "nodejs16.x", }, "cn-north-1": { "value": "nodejs16.x", }, "cn-northwest-1": { "value": "nodejs16.x", }, "eu-central-1": { "value": "nodejs16.x", }, "eu-central-2": { "value": "nodejs16.x", }, "eu-north-1": { "value": "nodejs16.x", }, "eu-south-1": { "value": "nodejs16.x", }, "eu-south-2": { "value": "nodejs16.x", }, "eu-west-1": { "value": "nodejs16.x", }, "eu-west-2": { "value": "nodejs16.x", }, "eu-west-3": { "value": "nodejs16.x", }, "me-central-1": { "value": "nodejs16.x", }, "me-south-1": { "value": "nodejs16.x", }, "sa-east-1": { "value": "nodejs16.x", }, "us-east-1": { "value": "nodejs16.x", }, "us-east-2": { "value": "nodejs16.x", }, "us-gov-east-1": { "value": "nodejs16.x", }, "us-gov-west-1": { "value": "nodejs16.x", }, "us-iso-east-1": { "value": "nodejs14.x", }, "us-iso-west-1": { "value": "nodejs14.x", }, "us-isob-east-1": { "value": "nodejs14.x", }, "us-west-1": { "value": "nodejs16.x", }, "us-west-2": { "value": "nodejs16.x", }, }, "ServiceprincipalMap": { "af-south-1": { "states": "states.af-south-1.amazonaws.com", }, "ap-east-1": { "states": "states.ap-east-1.amazonaws.com", }, "ap-northeast-1": { "states": "states.ap-northeast-1.amazonaws.com", }, "ap-northeast-2": { "states": "states.ap-northeast-2.amazonaws.com", }, "ap-northeast-3": { "states": "states.ap-northeast-3.amazonaws.com", }, "ap-south-1": { "states": "states.ap-south-1.amazonaws.com", }, "ap-south-2": { "states": "states.ap-south-2.amazonaws.com", }, "ap-southeast-1": { "states": "states.ap-southeast-1.amazonaws.com", }, "ap-southeast-2": { "states": "states.ap-southeast-2.amazonaws.com", }, "ap-southeast-3": { "states": "states.ap-southeast-3.amazonaws.com", }, "ca-central-1": { "states": "states.ca-central-1.amazonaws.com", }, "cn-north-1": { "states": "states.cn-north-1.amazonaws.com", }, "cn-northwest-1": { "states": "states.cn-northwest-1.amazonaws.com", }, "eu-central-1": { "states": "states.eu-central-1.amazonaws.com", }, "eu-central-2": { "states": "states.eu-central-2.amazonaws.com", }, "eu-north-1": { "states": "states.eu-north-1.amazonaws.com", }, "eu-south-1": { "states": "states.eu-south-1.amazonaws.com", }, "eu-south-2": { "states": "states.eu-south-2.amazonaws.com", }, "eu-west-1": { "states": "states.eu-west-1.amazonaws.com", }, "eu-west-2": { "states": "states.eu-west-2.amazonaws.com", }, "eu-west-3": { "states": "states.eu-west-3.amazonaws.com", }, "me-central-1": { "states": "states.me-central-1.amazonaws.com", }, "me-south-1": { "states": "states.me-south-1.amazonaws.com", }, "sa-east-1": { "states": "states.sa-east-1.amazonaws.com", }, "us-east-1": { "states": "states.us-east-1.amazonaws.com", }, "us-east-2": { "states": "states.us-east-2.amazonaws.com", }, "us-gov-east-1": { "states": "states.us-gov-east-1.amazonaws.com", }, "us-gov-west-1": { "states": "states.us-gov-west-1.amazonaws.com", }, "us-iso-east-1": { "states": "states.amazonaws.com", }, "us-iso-west-1": { "states": "states.amazonaws.com", }, "us-isob-east-1": { "states": "states.amazonaws.com", }, "us-west-1": { "states": "states.us-west-1.amazonaws.com", }, "us-west-2": { "states": "states.us-west-2.amazonaws.com", }, }, }, "Outputs": { "ConstructHubDenyListSnapshotCommand3E133B03": { "Description": "Snapshot dev/ConstructHub/DenyList/Bucket", "Value": { "Fn::Join": [ "", [ "aws s3 sync s3://", { "Ref": "ConstructHubDenyListBucket1B3C2C2E", }, " s3://", { "Ref": "ConstructHubDenyListFailoverBucketBF1E05AD", }, ], ], }, }, "ConstructHubIngestionSnapshotCommand746AF5B0": { "Description": "Snapshot dev/ConstructHub/Ingestion/ConfigBucket", "Value": { "Fn::Join": [ "", [ "aws s3 sync s3://", { "Ref": "ConstructHubIngestionConfigBucket0F0ED0B6", }, " s3://", { "Ref": "ConstructHubIngestionFailoverConfigBucket079F82C3", }, ], ], }, }, "ConstructHubInventoryCanarySnapshotCommand6F498D77": { "Description": "Snapshot dev/ConstructHub/InventoryCanary/ScratchworkBucket", "Value": { "Fn::Join": [ "", [ "aws s3 sync s3://", { "Ref": "ConstructHubInventoryCanaryScratchworkBucketC185625E", }, " s3://", { "Ref": "ConstructHubInventoryCanaryFailoverScratchworkBucketE8015DAD", }, ], ], }, }, "ConstructHubLicenseListSnapshotCommandB9EA2EF4": { "Description": "Snapshot dev/ConstructHub/LicenseList/Bucket", "Value": { "Fn::Join": [ "", [ "aws s3 sync s3://", { "Ref": "ConstructHubLicenseListBucket9334047F", }, " s3://", { "Ref": "ConstructHubLicenseListFailoverBucketA96D2AAF", }, ], ], }, }, "ConstructHubMonitoringWatchfulWatchfulDashboard75D318D0": { "Value": { "Fn::Join": [ "", [ "https://console.aws.amazon.com/cloudwatch/home?region=", { "Ref": "AWS::Region", }, "#dashboards:name=", { "Ref": "ConstructHubMonitoringWatchfulDashboardB8493D55", }, ], ], }, }, "ConstructHubSnapshotCommandDD3886DA": { "Description": "Snapshot dev/ConstructHub/PackageData", "Value": { "Fn::Join": [ "", [ "aws s3 sync s3://", { "Ref": "ConstructHubPackageDataDC5EF35E", }, " s3://", { "Ref": "ConstructHubFailoverPackageDataBA7D3B85", }, ], ], }, }, "ConstructHubSourcesSnapshotCommandB1EF760F": { "Description": "Snapshot dev/ConstructHub/Sources/NpmJs--StagingBucket", "Value": { "Fn::Join": [ "", [ "aws s3 sync s3://", { "Ref": "ConstructHubSourcesNpmJsStagingBucketB286F0E6", }, " s3://", { "Ref": "ConstructHubSourcesFailoverNpmJsStagingBucketF46C2C42", }, ], ], }, }, "ConstructHubWebAppDomainNameDC10F8DD": { "Export": { "Name": "ConstructHubDomainName", }, "Value": { "Fn::GetAtt": [ "ConstructHubWebAppDistribution1F181DC9", "DomainName", ], }, }, "ConstructHubWebAppSnapshotCommandC5AF418E": { "Description": "Snapshot dev/ConstructHub/WebApp/WebsiteBucket", "Value": { "Fn::Join": [ "", [ "aws s3 sync s3://", { "Ref": "ConstructHubWebAppWebsiteBucket4B2B9DB2", }, " s3://", { "Ref": "ConstructHubWebAppFailoverWebsiteBucketE69CC2C7", }, ], ], }, }, }, "Parameters": { "BootstrapVersion": { "Default": "/cdk-bootstrap/hnb659fds/version", "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]", "Type": "AWS::SSM::Parameter::Value", }, }, "Resources": { "AWS679f53fac002430cb0da5b7982bd22872D164C4C": { "DependsOn": [ "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", ], "Properties": { "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "f9346b940b724b094a16ca051c017799995fa93df6da38a0539bf7c000fee50a.zip", }, "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", "Arn", ], }, "Runtime": { "Fn::FindInMap": [ "DefaultCrNodeVersionMap", { "Ref": "AWS::Region", }, "value", ], }, "Timeout": 120, }, "Type": "AWS::Lambda::Function", }, "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "AppRegistryAssociation": { "Properties": { "Application": { "Fn::GetAtt": [ "ConstructHubApplication64E14E14", "Id", ], }, "Resource": { "Ref": "AWS::StackId", }, "ResourceType": "CFN_STACK", }, "Type": "AWS::ServiceCatalogAppRegistry::ResourceAssociation", }, "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691": { "DependsOn": [ "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", ], "Properties": { "Code": { "ZipFile": "import boto3 # type: ignore import json import logging import urllib.request s3 = boto3.client("s3") EVENTBRIDGE_CONFIGURATION = 'EventBridgeConfiguration' CONFIGURATION_TYPES = ["TopicConfigurations", "QueueConfigurations", "LambdaFunctionConfigurations"] def handler(event: dict, context): response_status = "SUCCESS" error_message = "" try: props = event["ResourceProperties"] bucket = props["BucketName"] notification_configuration = props["NotificationConfiguration"] request_type = event["RequestType"] managed = props.get('Managed', 'true').lower() == 'true' stack_id = event['StackId'] if managed: config = handle_managed(request_type, notification_configuration) else: config = handle_unmanaged(bucket, stack_id, request_type, notification_configuration) put_bucket_notification_configuration(bucket, config) except Exception as e: logging.exception("Failed to put bucket notification configuration") response_status = "FAILED" error_message = f"Error: {str(e)}. " finally: submit_response(event, context, response_status, error_message) def handle_managed(request_type, notification_configuration): if request_type == 'Delete': return {} return notification_configuration def handle_unmanaged(bucket, stack_id, request_type, notification_configuration): external_notifications = find_external_notifications(bucket, stack_id) if request_type == 'Delete': return external_notifications def with_id(notification): notification['Id'] = f"{stack_id}-{hash(json.dumps(notification, sort_keys=True))}" return notification notifications = {} for t in CONFIGURATION_TYPES: external = external_notifications.get(t, []) incoming = [with_id(n) for n in notification_configuration.get(t, [])] notifications[t] = external + incoming if EVENTBRIDGE_CONFIGURATION in notification_configuration: notifications[EVENTBRIDGE_CONFIGURATION] = notification_configuration[EVENTBRIDGE_CONFIGURATION] elif EVENTBRIDGE_CONFIGURATION in external_notifications: notifications[EVENTBRIDGE_CONFIGURATION] = external_notifications[EVENTBRIDGE_CONFIGURATION] return notifications def find_external_notifications(bucket, stack_id): existing_notifications = get_bucket_notification_configuration(bucket) external_notifications = {} for t in CONFIGURATION_TYPES: external_notifications[t] = [n for n in existing_notifications.get(t, []) if not n['Id'].startswith(f"{stack_id}-")] if EVENTBRIDGE_CONFIGURATION in existing_notifications: external_notifications[EVENTBRIDGE_CONFIGURATION] = existing_notifications[EVENTBRIDGE_CONFIGURATION] return external_notifications def get_bucket_notification_configuration(bucket): return s3.get_bucket_notification_configuration(Bucket=bucket) def put_bucket_notification_configuration(bucket, notification_configuration): s3.put_bucket_notification_configuration(Bucket=bucket, NotificationConfiguration=notification_configuration) def submit_response(event: dict, context, response_status: str, error_message: str): response_body = json.dumps( { "Status": response_status, "Reason": f"{error_message}See the details in CloudWatch Log Stream: {context.log_stream_name}", "PhysicalResourceId": event.get("PhysicalResourceId") or event["LogicalResourceId"], "StackId": event["StackId"], "RequestId": event["RequestId"], "LogicalResourceId": event["LogicalResourceId"], "NoEcho": False, } ).encode("utf-8") headers = {"content-type": "", "content-length": str(len(response_body))} try: req = urllib.request.Request(url=event["ResponseURL"], headers=headers, data=response_body, method="PUT") with urllib.request.urlopen(req) as response: print(response.read().decode("utf-8")) print("Status code: " + response.reason) except Exception as e: print("send(..) failed executing request.urlopen(..): " + str(e)) ", }, "Description": "AWS CloudFormation handler for "Custom::S3BucketNotifications" resources (@aws-cdk/aws-s3)", "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", "Arn", ], }, "Runtime": "python3.9", "Timeout": 300, }, "Type": "AWS::Lambda::Function", }, "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "s3:PutBucketNotification", "Effect": "Allow", "Resource": "*", }, ], "Version": "2012-10-17", }, "PolicyName": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", "Roles": [ { "Ref": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubApplication64E14E14": { "Properties": { "Name": "ConstructHub", }, "Type": "AWS::ServiceCatalogAppRegistry::Application", }, "ConstructHubBackendDashboardGraphs6A37B2BC": { "Properties": { "DashboardBody": { "Fn::Join": [ "", [ "{"start":"-P1W","periodOverride":"auto","widgets":[{"type":"text","width":24,"height":2,"x":0,"y":0,"properties":{"markdown":"# Catalog Overview\\n\\n[button:primary:Package Data](/s3/buckets/", { "Ref": "ConstructHubPackageDataDC5EF35E", }, ")\\n[button:Catalog Builder](/lambda/home#/functions/", { "Ref": "ConstructHubOrchestrationCatalogBuilder7C964951", }, ")\\n[button:Inventory Canary](/lambda/home#/functions/", { "Ref": "ConstructHubInventoryCanary63D899BC", }, ")\\n[button:Search Canary Log Group](/cloudwatch/home#logsV2:log-groups/log-group/$252Faws$252flambda$252f", { "Ref": "ConstructHubInventoryCanary63D899BC", }, "/log-events)"}},{"type":"metric","width":12,"height":6,"x":0,"y":2,"properties":{"view":"timeSeries","title":"Catalog Size","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","SubmoduleCount",{"label":"Submodules","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","PackageVersionCount",{"label":"Package Versions","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","PackageMajorVersionCount",{"label":"Package Majors","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","PackageCount",{"label":"Packages","period":900,"stat":"Maximum"}]],"yAxis":{"left":{"min":0}}}},{"type":"metric","width":12,"height":6,"x":12,"y":2,"properties":{"view":"timeSeries","title":"Catalog Issues","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","UnknownObjectCount",{"label":"Unknown","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingAssemblyCount",{"label":"Missing Assembly","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingPackageMetadataCount",{"label":"Missing Metadata","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingPackageTarballCount",{"label":"Missing Tarball","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","UninstallablePackageCount",{"label":"Uninstallable Package","period":900,"stat":"Maximum"}],["ConstructHub/CatalogBuilder","MissingConstructFrameworkCount",{"label":"No Construct Framework","period":900,"stat":"Maximum","yAxis":"right"}],["ConstructHub/CatalogBuilder","MissingConstructFrameworkVersionCount",{"label":"No Construct Framework Version","period":900,"stat":"Maximum","yAxis":"right"}]],"yAxis":{"left":{"min":0},"right":{"min":0}}}},{"type":"text","width":24,"height":2,"x":0,"y":8,"properties":{"markdown":"# Documentation Generation\\n\\n[button:primary:Transliterator Logs](/cloudwatch/home#logsV2:log-groups/log-group/", { "Fn::Join": [ "%252", { "Fn::Split": [ "/", { "Ref": "ConstructHubOrchestrationTransliteratorLogGroupEE16EE8B", }, ], }, ], }, ")\\n[button:Transliterator ECS Cluster](/ecs/home#/clusters/", { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, "/tasks)"}},{"type":"metric","width":12,"height":6,"x":0,"y":10,"properties":{"view":"timeSeries","title":"Fargate Resources","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/Usage","ResourceCount","Class","Standard/OnDemand","Resource","vCPU","Service","Fargate","Type","Resource",{"label":"Fargate vCPU Usage (On-Demand)","stat":"Maximum","id":"mFargateUsage"}],[{"label":"Fargate vCPU Quota (On-Demand)","expression":"SERVICE_QUOTA(mFargateUsage)"}],[{"label":"CPU Utilization","expression":"100 * FILL(mCpuUtilized, 0) / FILL(mCpuReserved, REPEAT)","yAxis":"right"}],["ECS/ContainerInsights","CpuReserved","ClusterName","", { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, "",{"stat":"Maximum","visible":false,"id":"mCpuReserved"}],["ECS/ContainerInsights","CpuUtilized","ClusterName","", { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, "",{"stat":"Maximum","visible":false,"id":"mCpuUtilized"}],[{"label":"Memory Utilization","expression":"100 * FILL(mMemoryUtilized, 0) / FILL(mMemoryReserved, REPEAT)","yAxis":"right"}],["ECS/ContainerInsights","MemoryReserved","ClusterName","", { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, "",{"stat":"Maximum","visible":false,"id":"mMemoryReserved"}],["ECS/ContainerInsights","MemoryUtilized","ClusterName","", { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, "",{"stat":"Maximum","visible":false,"id":"mMemoryUtilized"}]],"yAxis":{"left":{"min":0},"right":{"label":"Percent","min":0,"max":100,"showUnits":false}}}},{"type":"metric","width":12,"height":6,"x":12,"y":10,"properties":{"view":"timeSeries","title":"ECS Resources","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Received Bytes","expression":"FILL(m67cc14db3275d4a2af71847df2ebb376a00b015f62c4ff9d1aedb9bc615a6cf0, 0)"}],["ECS/ContainerInsights","NetworkRxBytes","ClusterName","", { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, "",{"label":"Received Bytes","stat":"Maximum","visible":false,"id":"m67cc14db3275d4a2af71847df2ebb376a00b015f62c4ff9d1aedb9bc615a6cf0"}],[{"label":"Transmitted Bytes","expression":"FILL(md6781afc8bf73de5587d36039d8226d1c0fe0b50a1c949759d3d8d8cd2e3f6d1, 0)"}],["ECS/ContainerInsights","NetworkTxBytes","ClusterName","", { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, "",{"label":"Transmitted Bytes","stat":"Maximum","visible":false,"id":"md6781afc8bf73de5587d36039d8226d1c0fe0b50a1c949759d3d8d8cd2e3f6d1"}],[{"label":"Task Count","expression":"FILL(mbb258976f5c025a7dff5289417a6b07619e000e4af1a427fecc57b31586fd6dd, 0)","yAxis":"right"}],["ECS/ContainerInsights","TaskCount","ClusterName","", { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, "",{"label":"Task Count","stat":"Sum","visible":false,"id":"mbb258976f5c025a7dff5289417a6b07619e000e4af1a427fecc57b31586fd6dd"}]],"yAxis":{"left":{"min":0},"right":{"min":0}}}},{"type":"metric","width":12,"height":6,"x":0,"y":16,"properties":{"view":"timeSeries","title":"ECS Task Monitor","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/EcsTaskMonitor","ActiveTaskCount",{"label":"Active Task Count","period":900}],["ConstructHub/EcsTaskMonitor","KilledTaskCount",{"label":"Killed Task Count","period":900,"stat":"Maximum"}],["ConstructHub/EcsTaskMonitor","ActiveTaskAge",{"label":"Active Task Age (Max)","period":900,"stat":"Maximum","yAxis":"right"}],["ConstructHub/EcsTaskMonitor","ActiveTaskAge",{"label":"Active Task Age (Avg)","period":900,"yAxis":"right"}],["ConstructHub/EcsTaskMonitor","ActiveTaskAge",{"label":"Active Task Age (Min)","period":900,"stat":"Minimum","yAxis":"right"}]],"yAxis":{"left":{"min":0},"right":{"min":0}}}},{"type":"text","width":24,"height":1,"x":0,"y":22,"properties":{"markdown":"## Language: typescript"}},{"type":"metric","width":12,"height":6,"x":0,"y":23,"properties":{"view":"pie","title":"Package Versions","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","SupportedPackageVersionCount","Language","typescript",{"color":"#2ca02c","label":"Available","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","CorruptAssemblyPackageVersionCount","Language","typescript",{"color":"#3542D7","label":"Corrupt Assembly","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","UnsupportedPackageVersionCount","Language","typescript",{"color":"#9467bd","label":"Unsupported","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingPackageVersionCount","Language","typescript",{"color":"#d62728","label":"Missing","period":900,"stat":"Maximum"}]],"yAxis":{"left":{"showUnits":false}}}},{"type":"metric","width":12,"height":6,"x":12,"y":23,"properties":{"view":"pie","title":"Package Version Submodules","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","SupportedSubmoduleCount","Language","typescript",{"color":"#2ca02c","label":"Available","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","CorruptAssemblySubmoduleCount","Language","typescript",{"color":"#3542D7","label":"Corrupt Assembly","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","UnsupportedSubmoduleCount","Language","typescript",{"color":"#9467bd","label":"Unsupported","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingSubmoduleCount","Language","typescript",{"color":"#d62728","label":"Missing","period":900,"stat":"Maximum"}]],"yAxis":{"left":{"showUnits":false}}}},{"type":"text","width":24,"height":1,"x":0,"y":29,"properties":{"markdown":"## Language: python"}},{"type":"metric","width":12,"height":6,"x":0,"y":30,"properties":{"view":"pie","title":"Package Versions","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","SupportedPackageVersionCount","Language","python",{"color":"#2ca02c","label":"Available","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","CorruptAssemblyPackageVersionCount","Language","python",{"color":"#3542D7","label":"Corrupt Assembly","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","UnsupportedPackageVersionCount","Language","python",{"color":"#9467bd","label":"Unsupported","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingPackageVersionCount","Language","python",{"color":"#d62728","label":"Missing","period":900,"stat":"Maximum"}]],"yAxis":{"left":{"showUnits":false}}}},{"type":"metric","width":12,"height":6,"x":12,"y":30,"properties":{"view":"pie","title":"Package Version Submodules","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","SupportedSubmoduleCount","Language","python",{"color":"#2ca02c","label":"Available","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","CorruptAssemblySubmoduleCount","Language","python",{"color":"#3542D7","label":"Corrupt Assembly","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","UnsupportedSubmoduleCount","Language","python",{"color":"#9467bd","label":"Unsupported","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingSubmoduleCount","Language","python",{"color":"#d62728","label":"Missing","period":900,"stat":"Maximum"}]],"yAxis":{"left":{"showUnits":false}}}},{"type":"text","width":24,"height":1,"x":0,"y":36,"properties":{"markdown":"## Language: java"}},{"type":"metric","width":12,"height":6,"x":0,"y":37,"properties":{"view":"pie","title":"Package Versions","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","SupportedPackageVersionCount","Language","java",{"color":"#2ca02c","label":"Available","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","CorruptAssemblyPackageVersionCount","Language","java",{"color":"#3542D7","label":"Corrupt Assembly","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","UnsupportedPackageVersionCount","Language","java",{"color":"#9467bd","label":"Unsupported","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingPackageVersionCount","Language","java",{"color":"#d62728","label":"Missing","period":900,"stat":"Maximum"}]],"yAxis":{"left":{"showUnits":false}}}},{"type":"metric","width":12,"height":6,"x":12,"y":37,"properties":{"view":"pie","title":"Package Version Submodules","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","SupportedSubmoduleCount","Language","java",{"color":"#2ca02c","label":"Available","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","CorruptAssemblySubmoduleCount","Language","java",{"color":"#3542D7","label":"Corrupt Assembly","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","UnsupportedSubmoduleCount","Language","java",{"color":"#9467bd","label":"Unsupported","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingSubmoduleCount","Language","java",{"color":"#d62728","label":"Missing","period":900,"stat":"Maximum"}]],"yAxis":{"left":{"showUnits":false}}}},{"type":"text","width":24,"height":1,"x":0,"y":43,"properties":{"markdown":"## Language: csharp"}},{"type":"metric","width":12,"height":6,"x":0,"y":44,"properties":{"view":"pie","title":"Package Versions","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","SupportedPackageVersionCount","Language","csharp",{"color":"#2ca02c","label":"Available","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","CorruptAssemblyPackageVersionCount","Language","csharp",{"color":"#3542D7","label":"Corrupt Assembly","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","UnsupportedPackageVersionCount","Language","csharp",{"color":"#9467bd","label":"Unsupported","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingPackageVersionCount","Language","csharp",{"color":"#d62728","label":"Missing","period":900,"stat":"Maximum"}]],"yAxis":{"left":{"showUnits":false}}}},{"type":"metric","width":12,"height":6,"x":12,"y":44,"properties":{"view":"pie","title":"Package Version Submodules","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","SupportedSubmoduleCount","Language","csharp",{"color":"#2ca02c","label":"Available","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","CorruptAssemblySubmoduleCount","Language","csharp",{"color":"#3542D7","label":"Corrupt Assembly","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","UnsupportedSubmoduleCount","Language","csharp",{"color":"#9467bd","label":"Unsupported","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingSubmoduleCount","Language","csharp",{"color":"#d62728","label":"Missing","period":900,"stat":"Maximum"}]],"yAxis":{"left":{"showUnits":false}}}},{"type":"text","width":24,"height":1,"x":0,"y":50,"properties":{"markdown":"## Language: go"}},{"type":"metric","width":12,"height":6,"x":0,"y":51,"properties":{"view":"pie","title":"Package Versions","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","SupportedPackageVersionCount","Language","go",{"color":"#2ca02c","label":"Available","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","CorruptAssemblyPackageVersionCount","Language","go",{"color":"#3542D7","label":"Corrupt Assembly","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","UnsupportedPackageVersionCount","Language","go",{"color":"#9467bd","label":"Unsupported","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingPackageVersionCount","Language","go",{"color":"#d62728","label":"Missing","period":900,"stat":"Maximum"}]],"yAxis":{"left":{"showUnits":false}}}},{"type":"metric","width":12,"height":6,"x":12,"y":51,"properties":{"view":"pie","title":"Package Version Submodules","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","SupportedSubmoduleCount","Language","go",{"color":"#2ca02c","label":"Available","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","CorruptAssemblySubmoduleCount","Language","go",{"color":"#3542D7","label":"Corrupt Assembly","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","UnsupportedSubmoduleCount","Language","go",{"color":"#9467bd","label":"Unsupported","period":900,"stat":"Maximum"}],["ConstructHub/Inventory","MissingSubmoduleCount","Language","go",{"color":"#d62728","label":"Missing","period":900,"stat":"Maximum"}]],"yAxis":{"left":{"showUnits":false}}}},{"type":"text","width":24,"height":2,"x":0,"y":57,"properties":{"markdown":"# dev/ConstructHub/Sources/NpmJs\\n\\n[button:primary:NpmJs Follower](/lambda/home#/functions/", { "Ref": "ConstructHubSourcesNpmJs15A77D2D", }, ")\\n[button:Marker Object](/s3/object/", { "Ref": "ConstructHubSourcesNpmJsStagingBucketB286F0E6", }, "?prefix=couchdb-last-transaction-id.2)\\n[button:Stager](/lambda/home#/functions/", { "Ref": "ConstructHubSourcesNpmJsStageAndNotify591C0CFA", }, ")\\n[button:Stager DLQ](/sqs/v2/home#/queues/https%3A%2F%2Fsqs.", { "Ref": "AWS::Region", }, ".amazonaws.com%2F", { "Ref": "AWS::AccountId", }, "%2F", { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "QueueName", ], }, ")"}},{"type":"metric","width":12,"height":6,"x":0,"y":59,"properties":{"view":"timeSeries","title":"Follower Health","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Invocations","expression":"FILL(m9ff955bd33652ecefb4dd9402064988aa5e418fcf59360156ff8c9e38dbde5e2, 0)"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubSourcesNpmJs15A77D2D", }, "",{"label":"Invocations","stat":"Sum","visible":false,"id":"m9ff955bd33652ecefb4dd9402064988aa5e418fcf59360156ff8c9e38dbde5e2"}],[{"label":"Errors","expression":"FILL(m3aa18789f406dc22d5fd69d6a8b1ae08cbc04aabfde21bee51e16796b37a2e55, 0)"}],["AWS/Lambda","Errors","FunctionName","", { "Ref": "ConstructHubSourcesNpmJs15A77D2D", }, "",{"label":"Errors","stat":"Sum","visible":false,"id":"m3aa18789f406dc22d5fd69d6a8b1ae08cbc04aabfde21bee51e16796b37a2e55"}],["ConstructHub/PackageSource/NpmJs/Follower","RemainingTime",{"label":"Remaining Time","stat":"Minimum","yAxis":"right"}]],"yAxis":{"left":{"min":0},"right":{"min":0}},"period":300}},{"type":"metric","width":12,"height":6,"x":12,"y":59,"properties":{"view":"timeSeries","title":"Stager Health","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Invocations","expression":"FILL(m9ff955bd33652ecefb4dd9402064988aa5e418fcf59360156ff8c9e38dbde5e2, 0)"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubSourcesNpmJsStageAndNotify591C0CFA", }, "",{"label":"Invocations","stat":"Sum","visible":false,"id":"m9ff955bd33652ecefb4dd9402064988aa5e418fcf59360156ff8c9e38dbde5e2"}],[{"label":"Errors","expression":"FILL(m3aa18789f406dc22d5fd69d6a8b1ae08cbc04aabfde21bee51e16796b37a2e55, 0)"}],["AWS/Lambda","Errors","FunctionName","", { "Ref": "ConstructHubSourcesNpmJsStageAndNotify591C0CFA", }, "",{"label":"Errors","stat":"Sum","visible":false,"id":"m3aa18789f406dc22d5fd69d6a8b1ae08cbc04aabfde21bee51e16796b37a2e55"}],["AWS/Lambda","Duration","FunctionName","", { "Ref": "ConstructHubSourcesNpmJsStageAndNotify591C0CFA", }, "",{"label":"Duration","yAxis":"right"}]],"yAxis":{"left":{"min":0},"right":{"min":0}},"period":300}},{"type":"metric","width":12,"height":6,"x":0,"y":65,"properties":{"view":"timeSeries","title":"CouchDB Follower","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Change Count","expression":"FILL(mf6a938229aec623f5cf21e3ae3401901e7f7c6ebd5774ab6ac6e74af83efd121, 0)"}],["ConstructHub/PackageSource/NpmJs/Follower","ChangeCount",{"label":"Change Count","stat":"Sum","visible":false,"id":"mf6a938229aec623f5cf21e3ae3401901e7f7c6ebd5774ab6ac6e74af83efd121"}],[{"label":"Unprocessable","expression":"FILL(m5b235d813bd8ded65d7de9a1345c9b49a8cf2af40e7e98ddbb8cb73e00783a8a, 0)"}],["ConstructHub/PackageSource/NpmJs/Follower","UnprocessableEntity",{"label":"Unprocessable","stat":"Sum","visible":false,"id":"m5b235d813bd8ded65d7de9a1345c9b49a8cf2af40e7e98ddbb8cb73e00783a8a"}],[{"label":"Lag to npmjs.com","expression":"FILL(m4d6c513faac55be4bca785e8587a9a145b65f5fe675318c9c5c52f3ada197b7b, REPEAT)","yAxis":"right"}],["ConstructHub/PackageSource/NpmJs/Follower","NpmJsChangeAge",{"label":"Lag to npmjs.com","stat":"Minimum","visible":false,"id":"m4d6c513faac55be4bca785e8587a9a145b65f5fe675318c9c5c52f3ada197b7b"}],[{"label":"Package Version Age","expression":"FILL(mec485aa83505431ed7a356970082cd4815c310504ff176dd3eeb241ae7bbf0c4, REPEAT)","yAxis":"right"}],["ConstructHub/PackageSource/NpmJs/Follower","PackageVersionAge",{"label":"Package Version Age","stat":"Maximum","visible":false,"id":"mec485aa83505431ed7a356970082cd4815c310504ff176dd3eeb241ae7bbf0c4"}]],"yAxis":{"left":{"min":0},"right":{"label":"Milliseconds","min":0,"showUnits":false}},"period":300}},{"type":"metric","width":12,"height":6,"x":12,"y":65,"properties":{"view":"timeSeries","title":"CouchDB Changes","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Last Sequence Number","expression":"FILL(mcc89a801dd7db60ea52e74b9851bd34a3899e7a26323ac98feb632cdf70c2500, REPEAT)"}],["ConstructHub/PackageSource/NpmJs/Follower","LastSeq",{"label":"Last Sequence Number","stat":"Maximum","visible":false,"id":"mcc89a801dd7db60ea52e74b9851bd34a3899e7a26323ac98feb632cdf70c2500"}]],"yAxis":{},"period":300}},{"type":"metric","width":12,"height":6,"x":0,"y":71,"properties":{"view":"timeSeries","title":"Stager Dead-Letter Queue","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Visible Messages","expression":"FILL(m96c7bb4160011a049b6b07c0feab8fb02e5a8d4aa466939592829f864dde6400, 0)"}],["AWS/SQS","ApproximateNumberOfMessagesVisible","QueueName","", { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "QueueName", ], }, "",{"label":"Visible Messages","stat":"Maximum","visible":false,"id":"m96c7bb4160011a049b6b07c0feab8fb02e5a8d4aa466939592829f864dde6400"}],[{"label":"Invisible Messages","expression":"FILL(mf74066283a392fc98a0cd7a405f2aa9b5af544d3a87542f06fff7fd069fd8578, 0)"}],["AWS/SQS","ApproximateNumberOfMessagesNotVisible","QueueName","", { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "QueueName", ], }, "",{"label":"Invisible Messages","stat":"Maximum","visible":false,"id":"mf74066283a392fc98a0cd7a405f2aa9b5af544d3a87542f06fff7fd069fd8578"}],["AWS/SQS","ApproximateAgeOfOldestMessage","QueueName","", { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "QueueName", ], }, "",{"label":"Oldest Message","stat":"Maximum","yAxis":"right"}]],"yAxis":{"left":{"min":0},"right":{"min":0}},"period":60}},{"type":"metric","width":12,"height":6,"x":12,"y":71,"properties":{"view":"timeSeries","title":"Package Canary","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/PackageCanary","DwellTime",{"label":"Dwell Time","stat":"Maximum"}],["ConstructHub/PackageCanary","TimeToCatalog",{"label":"Time to Catalog","stat":"Maximum"}],["ConstructHub/PackageCanary","TrackedVersionCount",{"label":"Tracked Version Count","stat":"Maximum","yAxis":"right"}]],"annotations":{"horizontal":[{"color":"#ff0000","label":"SLA (5 minutes)","value":300,"yAxis":"left"}]},"yAxis":{"left":{"min":0},"right":{"min":0}}}},{"type":"metric","width":12,"height":6,"x":0,"y":77,"properties":{"view":"timeSeries","title":"Observed lag of replicate.npmjs.com","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/PackageCanary","EstimatedNpmReplicaLag",{"label":"Replica lag (construct-hub-probe)","stat":"Maximum"}]],"annotations":{"horizontal":[{"color":"#ffa500","label":"5 minutes","value":300,"yAxis":"left"}]},"yAxis":{"left":{"min":0}}}},{"type":"text","width":24,"height":2,"x":0,"y":83,"properties":{"markdown":"# Ingestion Function\\n\\n[button:Ingestion Function](/lambda/home#/functions/", { "Ref": "ConstructHubIngestion407909CE", }, ")\\n[button:primary:Search Log Group](/cloudwatch/home#logsV2:log-groups/log-group/$252Faws$252flambda$252f", { "Ref": "ConstructHubIngestion407909CE", }, "/log-events)\\n[button:DLQ](/sqs/v2/home#/queues/https%3A%2F%2Fsqs.", { "Ref": "AWS::Region", }, ".amazonaws.com%2F", { "Ref": "AWS::AccountId", }, "%2F", { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "QueueName", ], }, ")"}},{"type":"metric","width":12,"height":6,"x":0,"y":85,"properties":{"view":"timeSeries","title":"Function Health","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Invocations","expression":"FILL(m9ff955bd33652ecefb4dd9402064988aa5e418fcf59360156ff8c9e38dbde5e2, 0)"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubIngestion407909CE", }, "",{"label":"Invocations","stat":"Sum","visible":false,"id":"m9ff955bd33652ecefb4dd9402064988aa5e418fcf59360156ff8c9e38dbde5e2"}],[{"label":"Errors","expression":"FILL(m3aa18789f406dc22d5fd69d6a8b1ae08cbc04aabfde21bee51e16796b37a2e55, 0)"}],["AWS/Lambda","Errors","FunctionName","", { "Ref": "ConstructHubIngestion407909CE", }, "",{"label":"Errors","stat":"Sum","visible":false,"id":"m3aa18789f406dc22d5fd69d6a8b1ae08cbc04aabfde21bee51e16796b37a2e55"}]],"yAxis":{"left":{"min":0}},"period":60}},{"type":"metric","width":12,"height":6,"x":12,"y":85,"properties":{"view":"timeSeries","title":"Input Queue","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/SQS","ApproximateNumberOfMessagesVisible","QueueName","", { "Fn::GetAtt": [ "ConstructHubIngestionQueue1AD94CA3", "QueueName", ], }, "",{"label":"Visible Messages","period":60,"stat":"Maximum"}],["AWS/SQS","ApproximateNumberOfMessagesNotVisible","QueueName","", { "Fn::GetAtt": [ "ConstructHubIngestionQueue1AD94CA3", "QueueName", ], }, "",{"label":"Hidden Messages","period":60,"stat":"Maximum"}],["AWS/SQS","ApproximateAgeOfOldestMessage","QueueName","", { "Fn::GetAtt": [ "ConstructHubIngestionQueue1AD94CA3", "QueueName", ], }, "",{"label":"Oldest Message Age","period":60,"stat":"Maximum","yAxis":"right"}]],"annotations":{"horizontal":[{"color":"#ffa500","label":"10 Minutes","value":600,"yAxis":"right"}]},"yAxis":{"left":{"min":0},"right":{"min":0}},"period":60}},{"type":"metric","width":12,"height":6,"x":0,"y":91,"properties":{"view":"timeSeries","title":"Input Quality","region":"", { "Ref": "AWS::Region", }, "","stacked":true,"metrics":[[{"label":"Invalid Assemblies","expression":"FILL(m0c5f10aa73687a21aa44b8985d19311246bca6c2cd1b2256b9f3e78c71e94fa3, 0)"}],["ConstructHub/Ingestion","InvalidAssembly",{"label":"Invalid Assemblies","stat":"Sum","visible":false,"id":"m0c5f10aa73687a21aa44b8985d19311246bca6c2cd1b2256b9f3e78c71e94fa3"}],[{"label":"Invalid Tarball","expression":"FILL(m3a39d9b0bf974255f27dc95e44c8574bdfce2b97e49a7504346a77c5c9f6a3e1, 0)"}],["ConstructHub/Ingestion","InvalidTarball",{"label":"Invalid Tarball","stat":"Sum","visible":false,"id":"m3a39d9b0bf974255f27dc95e44c8574bdfce2b97e49a7504346a77c5c9f6a3e1"}],[{"label":"Ineligible License","expression":"FILL(me19ae9c3f20ae715e3462f9402684a3817282218f36e69494a60bc251e3435a6, 0)"}],["ConstructHub/Ingestion","IneligibleLicense",{"label":"Ineligible License","stat":"Sum","visible":false,"id":"me19ae9c3f20ae715e3462f9402684a3817282218f36e69494a60bc251e3435a6"}],[{"label":"Mismatched Identity","expression":"FILL(m7c1d407f17f8d2452a0bf87ac06fdd032de385a2758254f4192d6e17ed40d44b, 0)"}],["ConstructHub/Ingestion","MismatchedIdentityRejections",{"label":"Mismatched Identity","stat":"Sum","visible":false,"id":"m7c1d407f17f8d2452a0bf87ac06fdd032de385a2758254f4192d6e17ed40d44b"}],[{"label":"Found License file","expression":"FILL(m7084dfec3c5bab86694d7ae438460f471c174a94bc67c9c9738e3ab60246b661, 0)"}],["ConstructHub/Ingestion","FoundLicenseFile",{"label":"Found License file","stat":"Sum","visible":false,"id":"m7084dfec3c5bab86694d7ae438460f471c174a94bc67c9c9738e3ab60246b661"}]],"yAxis":{"left":{"label":"Count","min":0,"showUnits":false}}}},{"type":"metric","width":12,"height":6,"x":12,"y":91,"properties":{"view":"timeSeries","title":"Dead Letters","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/SQS","ApproximateNumberOfMessagesVisible","QueueName","", { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "QueueName", ], }, "",{"label":"Visible Messages","stat":"Maximum"}],["AWS/SQS","ApproximateNumberOfMessagesNotVisible","QueueName","", { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "QueueName", ], }, "",{"label":"Invisible Messages","stat":"Maximum"}],["AWS/SQS","ApproximateAgeOfOldestMessage","QueueName","", { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "QueueName", ], }, "",{"label":"Oldest Message Age","stat":"Maximum","yAxis":"right"}]],"annotations":{"horizontal":[{"color":"#ff7f0e","label":"10 days","value":864000,"yAxis":"right"},{"color":"#ff0000","label":"14 days (DLQ Retention)","value":1209600,"yAxis":"right"}]},"yAxis":{"left":{"min":0},"right":{"min":0}},"period":60}},{"type":"text","width":24,"height":2,"x":0,"y":97,"properties":{"markdown":"# Orchestration\\n\\n[button:primary:State Machine](/states/home#/statemachines/view/", { "Ref": "ConstructHubOrchestration39161A46", }, ")\\n[button:DLQ](/sqs/v2/home#/queues/https%3A%2F%2Fsqs.", { "Ref": "AWS::Region", }, ".amazonaws.com%2F", { "Ref": "AWS::AccountId", }, "%2F", { "Fn::GetAtt": [ "ConstructHubOrchestrationDLQ9C6D9BD4", "QueueName", ], }, ")\\n[button:Redrive DLQ](/lambda/home#/functions/", { "Ref": "ConstructHubOrchestrationRedrive8DDBA67E", }, ")\\n[button:Regenerate All Documentation](/states/home#/statemachines/view/", { "Ref": "ConstructHubOrchestrationRegenerateAllDocumentationE9FAB254", }, ")"}},{"type":"metric","width":12,"height":6,"x":0,"y":99,"properties":{"view":"timeSeries","title":"State Machine Executions","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Started","expression":"FILL(m392141ff4cfa3bbe1889b2db42bcf20599513e199a0b9fb8dc736cde893c1d7c, 0)"}],["AWS/States","ExecutionsStarted","StateMachineArn","", { "Ref": "ConstructHubOrchestration39161A46", }, "",{"label":"Started","stat":"Sum","visible":false,"id":"m392141ff4cfa3bbe1889b2db42bcf20599513e199a0b9fb8dc736cde893c1d7c"}],[{"label":"Succeeded","expression":"FILL(md1b80634be6e2f057c84f44fab13979a6445395ea2dc357cd12d0ba9f504e6d1, 0)"}],["AWS/States","ExecutionsSucceeded","StateMachineArn","", { "Ref": "ConstructHubOrchestration39161A46", }, "",{"label":"Succeeded","stat":"Sum","visible":false,"id":"md1b80634be6e2f057c84f44fab13979a6445395ea2dc357cd12d0ba9f504e6d1"}],[{"label":"Aborted","expression":"FILL(m7c13255adf2b6d90baaa9e4e952e72ce260730c93b662336d01e3342f6255e08, 0)"}],["AWS/States","ExecutionsAborted","StateMachineArn","", { "Ref": "ConstructHubOrchestration39161A46", }, "",{"label":"Aborted","stat":"Sum","visible":false,"id":"m7c13255adf2b6d90baaa9e4e952e72ce260730c93b662336d01e3342f6255e08"}],[{"label":"Failed","expression":"FILL(m503cb5a7568675222eb2ac827982f88ad300c986505dabfafe1707080946e597, 0)"}],["AWS/States","ExecutionsFailed","StateMachineArn","", { "Ref": "ConstructHubOrchestration39161A46", }, "",{"label":"Failed","stat":"Sum","visible":false,"id":"m503cb5a7568675222eb2ac827982f88ad300c986505dabfafe1707080946e597"}],[{"label":"Throttled","expression":"FILL(m278670a6ffa3ce32fec8fcb73c1cfdc4c965389617e2387ab5852ebb00b2a81f, 0)"}],["AWS/States","ExecutionThrottled","StateMachineArn","", { "Ref": "ConstructHubOrchestration39161A46", }, "",{"label":"Throttled","stat":"Sum","visible":false,"id":"m278670a6ffa3ce32fec8fcb73c1cfdc4c965389617e2387ab5852ebb00b2a81f"}],[{"label":"Timed Out","expression":"FILL(m106d91118c893ec9037d16448722184f1ebdcca08a617e1f13758151a8c85a21, 0)"}],["AWS/States","ExecutionsTimedOut","StateMachineArn","", { "Ref": "ConstructHubOrchestration39161A46", }, "",{"label":"Timed Out","stat":"Sum","visible":false,"id":"m106d91118c893ec9037d16448722184f1ebdcca08a617e1f13758151a8c85a21"}],["AWS/States","ExecutionTime","StateMachineArn","", { "Ref": "ConstructHubOrchestration39161A46", }, "",{"label":"Duration","yAxis":"right"}]],"yAxis":{"left":{"min":0},"right":{"min":0}}}},{"type":"metric","width":12,"height":6,"x":12,"y":99,"properties":{"view":"timeSeries","title":"Dead Letter Queue","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/SQS","ApproximateNumberOfMessagesVisible","QueueName","", { "Fn::GetAtt": [ "ConstructHubOrchestrationDLQ9C6D9BD4", "QueueName", ], }, "",{"label":"Visible Messages","stat":"Maximum"}],["AWS/SQS","ApproximateNumberOfMessagesNotVisible","QueueName","", { "Fn::GetAtt": [ "ConstructHubOrchestrationDLQ9C6D9BD4", "QueueName", ], }, "",{"label":"Invisible Messages","stat":"Maximum"}],["AWS/SQS","ApproximateAgeOfOldestMessage","QueueName","", { "Fn::GetAtt": [ "ConstructHubOrchestrationDLQ9C6D9BD4", "QueueName", ], }, "",{"label":"Oldest Message Age","stat":"Maximum","yAxis":"right"}]],"annotations":{"horizontal":[{"color":"#ff7f0e","label":"10 days","value":864000,"yAxis":"right"},{"color":"#ff0000","label":"14 days (DLQ Retention)","value":1209600,"yAxis":"right"}]},"yAxis":{"left":{"min":0},"right":{"min":0}},"period":60}},{"type":"text","width":24,"height":2,"x":0,"y":105,"properties":{"markdown":"# Deny List\\n\\n[button:primary:Deny List Object](/s3/object/", { "Ref": "ConstructHubDenyListBucket1B3C2C2E", }, "?prefix=deny-list.json)\\n[button:Prune Function](/lambda/home#/functions/", { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, ")\\n[button:Prune Logs](/cloudwatch/home#logsV2:log-groups/log-group/$252Faws$252flambda$252f", { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, "/log-events)\\n[button:Delete Queue](/sqs/v2/home#/queues/https%3A%2F%2Fsqs.", { "Ref": "AWS::Region", }, ".amazonaws.com%2F", { "Ref": "AWS::AccountId", }, "%2F", { "Fn::GetAtt": [ "ConstructHubDenyListPruneDeleteQueueBBF60185", "QueueName", ], }, ")\\n[button:Delete Logs](/cloudwatch/home#logsV2:log-groups/log-group/$252Faws$252flambda$252f", { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, "/log-events)"}},{"type":"metric","width":12,"height":6,"x":0,"y":107,"properties":{"view":"timeSeries","title":"Deny List","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Rules","expression":"FILL(m41327b0edbbef1ca627d9503d1b9b9fab401700118519537b58e0557adee7e4f, REPEAT)"}],["ConstructHub/DenyList","DenyListRuleCount",{"label":"Rules","stat":"Maximum","visible":false,"id":"m41327b0edbbef1ca627d9503d1b9b9fab401700118519537b58e0557adee7e4f"}],["AWS/SQS","NumberOfMessagesDeleted","QueueName","", { "Fn::GetAtt": [ "ConstructHubDenyListPruneDeleteQueueBBF60185", "QueueName", ], }, "",{"label":"Deleted Files","stat":"Sum"}]],"yAxis":{"left":{"min":0}},"period":300}},{"type":"metric","width":12,"height":6,"x":12,"y":107,"properties":{"view":"timeSeries","title":"Prune Function Health","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Invocations","expression":"FILL(m9ff955bd33652ecefb4dd9402064988aa5e418fcf59360156ff8c9e38dbde5e2, 0)"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, "",{"label":"Invocations","stat":"Sum","visible":false,"id":"m9ff955bd33652ecefb4dd9402064988aa5e418fcf59360156ff8c9e38dbde5e2"}],[{"label":"Errors","expression":"FILL(m3aa18789f406dc22d5fd69d6a8b1ae08cbc04aabfde21bee51e16796b37a2e55, 0)"}],["AWS/Lambda","Errors","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, "",{"label":"Errors","stat":"Sum","visible":false,"id":"m3aa18789f406dc22d5fd69d6a8b1ae08cbc04aabfde21bee51e16796b37a2e55"}]],"yAxis":{"left":{"min":0}},"period":300}},{"type":"text","width":24,"height":2,"x":0,"y":113,"properties":{"markdown":"# Package Stats\\n\\n[button:primary:Package Stats Object](/s3/object/", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "?prefix=stats.json)\\n[button:Package Stats Function](/lambda/home#/functions/", { "Ref": "ConstructHubStats61DB07B1", }, ")\\n[button:Package Stats Logs](/cloudwatch/home#logsV2:log-groups/log-group/$252Faws$252flambda$252f", { "Ref": "ConstructHubStats61DB07B1", }, "/log-events)"}},{"type":"metric","width":12,"height":6,"x":0,"y":115,"properties":{"view":"timeSeries","title":"Number of Package Stats Recorded","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Packages with stats","expression":"FILL(m47411943a6e8f8e16a1dd905ff43cab11425b802c4d32615e081cab30c15f29f, REPEAT)"}],["ConstructHub/PackageStats","RegisteredPackagesWithStats",{"label":"Packages with stats","stat":"Maximum","visible":false,"id":"m47411943a6e8f8e16a1dd905ff43cab11425b802c4d32615e081cab30c15f29f"}]],"yAxis":{"left":{"min":0}}}},{"type":"metric","width":12,"height":6,"x":12,"y":115,"properties":{"view":"timeSeries","title":"Invocation Duration","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/Lambda","Duration","FunctionName","", { "Ref": "ConstructHubStats61DB07B1", }, "",{"label":"Duration"}]],"annotations":{"horizontal":[{"color":"#ffa500","label":"15 minutes (Lambda timeout)","value":900,"yAxis":"right"}]},"yAxis":{"left":{"min":0}}}},{"type":"text","width":24,"height":2,"x":0,"y":121,"properties":{"markdown":"# Version Tracker\\n\\n[button:primary:Versions Object](/s3/object/", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "?prefix=all-versions.json)\\n[button:Version Tracker Function](/lambda/home#/functions/", { "Ref": "ConstructHubVersionTrackerD5E8AEAE", }, ")\\n[button:Version Tracker Logs](/cloudwatch/home#logsV2:log-groups/log-group/$252Faws$252flambda$252f", { "Ref": "ConstructHubVersionTrackerD5E8AEAE", }, "/log-events)"}},{"type":"metric","width":12,"height":6,"x":0,"y":123,"properties":{"view":"timeSeries","title":"Number of Package Versions Recorded","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Package versions recorded","expression":"FILL(m343ebb2e5802fe223e549d8262d8d0c364846e0276426bc0a2d872e83bd8e63d, REPEAT)"}],["ConstructHub/VersionTracker","TrackedVersionsCount",{"label":"Package versions recorded","stat":"Maximum","visible":false,"id":"m343ebb2e5802fe223e549d8262d8d0c364846e0276426bc0a2d872e83bd8e63d"}]],"yAxis":{"left":{"min":0}}}},{"type":"metric","width":12,"height":6,"x":12,"y":123,"properties":{"view":"timeSeries","title":"Invocation Duration","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/Lambda","Duration","FunctionName","", { "Ref": "ConstructHubVersionTrackerD5E8AEAE", }, "",{"label":"Duration"}]],"annotations":{"horizontal":[{"color":"#ffa500","label":"1 minutes (Lambda timeout)","value":60,"yAxis":"right"}]},"yAxis":{"left":{"min":0}}}},{"type":"text","width":24,"height":2,"x":0,"y":129,"properties":{"markdown":"# Release Notes\\n\\n[button:primary:StateMachine](/states/home#/statemachines/view/", { "Ref": "ConstructHubReleaseNotesStateMachine8C711CC7", }, ")\\n[button:releaseNotesTrigger](/lambda/home#/functions/", { "Ref": "ConstructHubReleaseNotesReleaseNotesTriggerDD939C4F", }, ")\\n[button:generateReleaseNotes](/lambda/home#/functions/", { "Ref": "ConstructHubReleaseNotesGithubChangelogFetcher1616748C", }, ")\\n[button:updateFeed](/lambda/home#/functions/", { "Ref": "ConstructHubFeedBuilderReleaseNotesUpdateFeedBB0BA91D", }, ")\\n[button:queue](/sqs/v2/home#/queues/https%3A%2F%2Fsqs.", { "Ref": "AWS::Region", }, ".amazonaws.com%2F", { "Ref": "AWS::AccountId", }, "%2F", { "Fn::GetAtt": [ "ConstructHubReleaseNotesChangeLogFetchQueue2D5BA633", "QueueName", ], }, ")\\n[button:workerQueue](/sqs/v2/home#/queues/https%3A%2F%2Fsqs.", { "Ref": "AWS::Region", }, ".amazonaws.com%2F", { "Ref": "AWS::AccountId", }, "%2F", { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueCACEC29F", "QueueName", ], }, ")\\n[button:workerDLQ](/sqs/v2/home#/queues/https%3A%2F%2Fsqs.", { "Ref": "AWS::Region", }, ".amazonaws.com%2F", { "Ref": "AWS::AccountId", }, "%2F", { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueDLQ56BF53F1", "QueueName", ], }, ")"}},{"type":"metric","width":12,"height":6,"x":0,"y":131,"properties":{"view":"timeSeries","title":"Number of release Notes","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Packages with release notes","expression":"FILL(m7a7a3037972a088d52187e29766f681a9cb9642d00a12e818823d134184ff48d, REPEAT)"}],["ConstructHub/ReleaseNotes","PackageWithChangeLog",{"label":"Packages with release notes","stat":"Sum","visible":false,"id":"m7a7a3037972a088d52187e29766f681a9cb9642d00a12e818823d134184ff48d"}]],"yAxis":{"left":{"min":0}}}},{"type":"metric","width":12,"height":6,"x":12,"y":131,"properties":{"view":"timeSeries","title":"Release notes generation Errors","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/ReleaseNotes","AllErrors",{"label":"All Errors","stat":"Maximum"}],["ConstructHub/ReleaseNotes","UnknownError",{"label":"UnknownError","stat":"Maximum"}],["ConstructHub/ReleaseNotes","InvalidCredentials",{"label":"InvalidCredentials","stat":"Maximum"}],["ConstructHub/ReleaseNotes","RequestQuotaExhausted",{"label":"RequestQuotaExhausted","stat":"Maximum"}],["ConstructHub/ReleaseNotes","UnSupportedRepo",{"label":"UnSupportedRepo","stat":"Maximum"}],["ConstructHub/ReleaseNotes","InvalidPackageJson",{"label":"InvalidPackageJson","stat":"Maximum"}],["ConstructHub/ReleaseNotes","ChangelogFetchError",{"label":"ChangeLogFetchError","stat":"Maximum"}]],"yAxis":{}}},{"type":"metric","width":12,"height":6,"x":0,"y":137,"properties":{"view":"timeSeries","title":"GitHub API Rate Limits","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Limit","expression":"FILL(mcf810098fa7b0359cfa64484e165026013fa6611de36e48a68984a9615f7599d, REPEAT)"}],["ConstructHub/ReleaseNotes","GhLimitsLimit",{"label":"Limit","stat":"Maximum","visible":false,"id":"mcf810098fa7b0359cfa64484e165026013fa6611de36e48a68984a9615f7599d"}],[{"label":"Used","expression":"FILL(mc54991399581cec857a3c1773e2649cbfb65cef7ea4e459f2ada3ee31c60782e, REPEAT)"}],["ConstructHub/ReleaseNotes","GhLimitsUsed",{"label":"Used","stat":"Maximum","visible":false,"id":"mc54991399581cec857a3c1773e2649cbfb65cef7ea4e459f2ada3ee31c60782e"}],[{"label":"Remaining","expression":"FILL(m3c4202dbd25b40c6524935352f9d34858b3374ed5079dbd6aea164767195d54a, REPEAT)"}],["ConstructHub/ReleaseNotes","GhRateLimitsRemaining",{"label":"Remaining","stat":"Minimum","visible":false,"id":"m3c4202dbd25b40c6524935352f9d34858b3374ed5079dbd6aea164767195d54a"}]],"yAxis":{}}}]}", ], ], }, "DashboardName": "construct-hub-backend-graphs", }, "Type": "AWS::CloudWatch::Dashboard", }, "ConstructHubBackendDashboardReportsDFD170B1": { "Properties": { "DashboardBody": { "Fn::Join": [ "", [ "{"start":"-P1W","periodOverride":"auto","widgets":[{"type":"custom","width":24,"height":6,"x":0,"y":0,"properties":{"endpoint":"", { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2", "Arn", ], }, "","params":{"key":"uninstallable-objects/data.json","description":"These packages could not be installed. Note that currently they will also appear in the 'missing' documentation reports.\\n\\nThe specific error can be found in the package directory inside a file named 'uninstallable'\\n"},"title":"Package Versions Report | Uninstallable","updateOn":{"refresh":true,"resize":false,"timeRange":false}}},{"type":"custom","width":24,"height":6,"x":0,"y":6,"properties":{"endpoint":"", { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2", "Arn", ], }, "","params":{"key":"missing-objects/typescript-documentation.json","description":"These packages are missing typescript documentation.\\nApart from the uninstallable packages, this report should stay empty\\n\\nTo investigate inspect the orchestration DLQ.\\n"},"title":"Package Versions Report | Missing Documentation | _typescript_","updateOn":{"refresh":true,"resize":false,"timeRange":false}}},{"type":"custom","width":24,"height":6,"x":0,"y":12,"properties":{"endpoint":"", { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2", "Arn", ], }, "","params":{"key":"corruptassembly-objects/typescript.json","description":"These packages are missing typescript documentation because of a corrupted assembly.\\n\\nThe specific error can be found in the package directory inside files suffixed with '.corruptassembly'\\n"},"title":"Package Versions Report | Corrupt Assembly | _typescript_","updateOn":{"refresh":true,"resize":false,"timeRange":false}}},{"type":"custom","width":24,"height":6,"x":0,"y":18,"properties":{"endpoint":"", { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2", "Arn", ], }, "","params":{"key":"missing-objects/python-documentation.json","description":"These packages are missing python documentation.\\nApart from the uninstallable packages, this report should stay empty\\n\\nTo investigate inspect the orchestration DLQ.\\n"},"title":"Package Versions Report | Missing Documentation | _python_","updateOn":{"refresh":true,"resize":false,"timeRange":false}}},{"type":"custom","width":24,"height":6,"x":0,"y":24,"properties":{"endpoint":"", { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2", "Arn", ], }, "","params":{"key":"corruptassembly-objects/python.json","description":"These packages are missing python documentation because of a corrupted assembly.\\n\\nThe specific error can be found in the package directory inside files suffixed with '.corruptassembly'\\n"},"title":"Package Versions Report | Corrupt Assembly | _python_","updateOn":{"refresh":true,"resize":false,"timeRange":false}}},{"type":"custom","width":24,"height":6,"x":0,"y":30,"properties":{"endpoint":"", { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2", "Arn", ], }, "","params":{"key":"missing-objects/java-documentation.json","description":"These packages are missing java documentation.\\nApart from the uninstallable packages, this report should stay empty\\n\\nTo investigate inspect the orchestration DLQ.\\n"},"title":"Package Versions Report | Missing Documentation | _java_","updateOn":{"refresh":true,"resize":false,"timeRange":false}}},{"type":"custom","width":24,"height":6,"x":0,"y":36,"properties":{"endpoint":"", { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2", "Arn", ], }, "","params":{"key":"corruptassembly-objects/java.json","description":"These packages are missing java documentation because of a corrupted assembly.\\n\\nThe specific error can be found in the package directory inside files suffixed with '.corruptassembly'\\n"},"title":"Package Versions Report | Corrupt Assembly | _java_","updateOn":{"refresh":true,"resize":false,"timeRange":false}}},{"type":"custom","width":24,"height":6,"x":0,"y":42,"properties":{"endpoint":"", { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2", "Arn", ], }, "","params":{"key":"missing-objects/csharp-documentation.json","description":"These packages are missing csharp documentation.\\nApart from the uninstallable packages, this report should stay empty\\n\\nTo investigate inspect the orchestration DLQ.\\n"},"title":"Package Versions Report | Missing Documentation | _csharp_","updateOn":{"refresh":true,"resize":false,"timeRange":false}}},{"type":"custom","width":24,"height":6,"x":0,"y":48,"properties":{"endpoint":"", { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2", "Arn", ], }, "","params":{"key":"corruptassembly-objects/csharp.json","description":"These packages are missing csharp documentation because of a corrupted assembly.\\n\\nThe specific error can be found in the package directory inside files suffixed with '.corruptassembly'\\n"},"title":"Package Versions Report | Corrupt Assembly | _csharp_","updateOn":{"refresh":true,"resize":false,"timeRange":false}}},{"type":"custom","width":24,"height":6,"x":0,"y":54,"properties":{"endpoint":"", { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2", "Arn", ], }, "","params":{"key":"missing-objects/go-documentation.json","description":"These packages are missing go documentation.\\nApart from the uninstallable packages, this report should stay empty\\n\\nTo investigate inspect the orchestration DLQ.\\n"},"title":"Package Versions Report | Missing Documentation | _go_","updateOn":{"refresh":true,"resize":false,"timeRange":false}}},{"type":"custom","width":24,"height":6,"x":0,"y":60,"properties":{"endpoint":"", { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2", "Arn", ], }, "","params":{"key":"corruptassembly-objects/go.json","description":"These packages are missing go documentation because of a corrupted assembly.\\n\\nThe specific error can be found in the package directory inside files suffixed with '.corruptassembly'\\n"},"title":"Package Versions Report | Corrupt Assembly | _go_","updateOn":{"refresh":true,"resize":false,"timeRange":false}}}]}", ], ], }, "DashboardName": "construct-hub-backend-reports", }, "Type": "AWS::CloudWatch::Dashboard", }, "ConstructHubCodeArtifact1188409E": { "Properties": { "Description": "Proxy to npmjs.com for ConstructHub", "DomainName": { "Fn::GetAtt": [ "ConstructHubCodeArtifactDomainFC30B796", "Name", ], }, "RepositoryName": "c8ee88ce536499d20d7846c6677adca6490a3f89f9", "Upstreams": [ { "Fn::GetAtt": [ "ConstructHubCodeArtifactUpstreampublicnpmjs5122981E", "Name", ], }, { "Fn::GetAtt": [ "ConstructHubCodeArtifactPublishing143CC07C", "Name", ], }, ], }, "Type": "AWS::CodeArtifact::Repository", }, "ConstructHubCodeArtifactDescribeDomain6ABCBF4B": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubCodeArtifactDescribeDomainCustomResourcePolicy1A93C60C", ], "Properties": { "Create": { "Fn::Join": [ "", [ "{"service":"CodeArtifact","action":"describeDomain","parameters":{"domain":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainName", ], }, "","domainOwner":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainOwner", ], }, ""},"physicalResourceId":{"responsePath":"domain.s3BucketArn"}}", ], ], }, "InstallLatestAwsSdk": true, "ServiceToken": { "Fn::GetAtt": [ "AWS679f53fac002430cb0da5b7982bd22872D164C4C", "Arn", ], }, }, "Type": "Custom::CoreArtifactDomainDescription", "UpdateReplacePolicy": "Delete", }, "ConstructHubCodeArtifactDescribeDomainCustomResourcePolicy1A93C60C": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "codeartifact:DescribeDomain", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubCodeArtifactDomainFC30B796", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubCodeArtifactDescribeDomainCustomResourcePolicy1A93C60C", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubCodeArtifactDomainFC30B796": { "Properties": { "DomainName": "c8ee88ce536499d20d7846c6677adca6490a3f89f9", }, "Type": "AWS::CodeArtifact::Domain", }, "ConstructHubCodeArtifactGetEndpoint9A458FEF": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubCodeArtifactGetEndpointCustomResourcePolicy4FC951E9", ], "Properties": { "Create": { "Fn::Join": [ "", [ "{"service":"CodeArtifact","action":"getRepositoryEndpoint","parameters":{"domain":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainName", ], }, "","domainOwner":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainOwner", ], }, "","format":"npm","repository":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "Name", ], }, ""},"physicalResourceId":{"responsePath":"repositoryEndpoint"}}", ], ], }, "InstallLatestAwsSdk": true, "ServiceToken": { "Fn::GetAtt": [ "AWS679f53fac002430cb0da5b7982bd22872D164C4C", "Arn", ], }, "Update": { "Fn::Join": [ "", [ "{"service":"CodeArtifact","action":"getRepositoryEndpoint","parameters":{"domain":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainName", ], }, "","domainOwner":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainOwner", ], }, "","format":"npm","repository":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "Name", ], }, ""},"physicalResourceId":{"responsePath":"repositoryEndpoint"}}", ], ], }, }, "Type": "Custom::CodeArtifactNpmRepositoryEndpoint", "UpdateReplacePolicy": "Delete", }, "ConstructHubCodeArtifactGetEndpointCustomResourcePolicy4FC951E9": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "codeartifact:GetRepositoryEndpoint", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubCodeArtifactGetEndpointCustomResourcePolicy4FC951E9", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubCodeArtifactGetPublishingEndpoint6394DEF7": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubCodeArtifactGetPublishingEndpointCustomResourcePolicyE039B00F", ], "Properties": { "Create": { "Fn::Join": [ "", [ "{"service":"CodeArtifact","action":"getRepositoryEndpoint","parameters":{"domain":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainName", ], }, "","domainOwner":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainOwner", ], }, "","format":"npm","repository":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifactPublishing143CC07C", "Name", ], }, ""},"physicalResourceId":{"responsePath":"repositoryEndpoint"}}", ], ], }, "InstallLatestAwsSdk": true, "ServiceToken": { "Fn::GetAtt": [ "AWS679f53fac002430cb0da5b7982bd22872D164C4C", "Arn", ], }, "Update": { "Fn::Join": [ "", [ "{"service":"CodeArtifact","action":"getRepositoryEndpoint","parameters":{"domain":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainName", ], }, "","domainOwner":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainOwner", ], }, "","format":"npm","repository":"", { "Fn::GetAtt": [ "ConstructHubCodeArtifactPublishing143CC07C", "Name", ], }, ""},"physicalResourceId":{"responsePath":"repositoryEndpoint"}}", ], ], }, }, "Type": "Custom::CodeArtifactNpmRepositoryEndpoint", "UpdateReplacePolicy": "Delete", }, "ConstructHubCodeArtifactGetPublishingEndpointCustomResourcePolicyE039B00F": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "codeartifact:GetRepositoryEndpoint", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubCodeArtifactPublishing143CC07C", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubCodeArtifactGetPublishingEndpointCustomResourcePolicyE039B00F", "Roles": [ { "Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubCodeArtifactPublishing143CC07C": { "Properties": { "Description": "Publishing repository", "DomainName": { "Fn::GetAtt": [ "ConstructHubCodeArtifactDomainFC30B796", "Name", ], }, "RepositoryName": "c8ee88ce536499d20d7846c6677adca6490a3f89f9-publish-overlay", }, "Type": "AWS::CodeArtifact::Repository", }, "ConstructHubCodeArtifactUpstreampublicnpmjs5122981E": { "Properties": { "Description": "Upstream with external connection to public:npmjs", "DomainName": { "Fn::GetAtt": [ "ConstructHubCodeArtifactDomainFC30B796", "Name", ], }, "ExternalConnections": [ "public:npmjs", ], "RepositoryName": "c8ee88ce536499d20d7846c6677adca6490a3f89f9-npmjs", }, "Type": "AWS::CodeArtifact::Repository", }, "ConstructHubDenyListBucket1B3C2C2E": { "DeletionPolicy": "Delete", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256", }, }, ], }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "aws-cdk:auto-delete-objects", "Value": "true", }, { "Key": "aws-cdk:cr-owned:181e12cb", "Value": "true", }, ], "VersioningConfiguration": { "Status": "Enabled", }, }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Delete", }, "ConstructHubDenyListBucketAllowBucketNotificationsTodevConstructHubDenyListPrunePruneHandler8F0BBF5E2222C5D6": { "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { "Fn::GetAtt": [ "ConstructHubDenyListPrunePruneHandler30B33551", "Arn", ], }, "Principal": "s3.amazonaws.com", "SourceAccount": { "Ref": "AWS::AccountId", }, "SourceArn": { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, }, "Type": "AWS::Lambda::Permission", }, "ConstructHubDenyListBucketAutoDeleteObjectsCustomResource997A3642": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubDenyListBucketPolicyA1878E10", ], "Properties": { "BucketName": { "Ref": "ConstructHubDenyListBucket1B3C2C2E", }, "ServiceToken": { "Fn::GetAtt": [ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "Arn", ], }, }, "Type": "Custom::S3AutoDeleteObjects", "UpdateReplacePolicy": "Delete", }, "ConstructHubDenyListBucketDeploymentAwsCliLayerEAC3D4DA": { "Properties": { "Content": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "e2277687077a2abf9ae1af1cc9565e6715e2ebb62f79ec53aa75a1af9298f642.zip", }, "Description": "/opt/awscli/aws", }, "Type": "AWS::Lambda::LayerVersion", }, "ConstructHubDenyListBucketDeploymentCustomResourceF835956B": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubDenyListBucketNotifications2269EB2A", ], "Properties": { "DestinationBucketName": { "Ref": "ConstructHubDenyListBucket1B3C2C2E", }, "Prune": true, "RetainOnDelete": true, "ServiceToken": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "Arn", ], }, "SourceBucketNames": [ { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, ], "SourceObjectKeys": [ "6f1f07e70de63d5afdbcab762f8f867a2aedb494b30cd360d5deb518d3914263.zip", ], }, "Type": "Custom::CDKBucketDeployment", "UpdateReplacePolicy": "Delete", }, "ConstructHubDenyListBucketNotifications2269EB2A": { "DependsOn": [ "ConstructHubDenyListBucketAllowBucketNotificationsTodevConstructHubDenyListPrunePruneHandler8F0BBF5E2222C5D6", ], "Properties": { "BucketName": { "Ref": "ConstructHubDenyListBucket1B3C2C2E", }, "Managed": true, "NotificationConfiguration": { "LambdaFunctionConfigurations": [ { "Events": [ "s3:ObjectCreated:*", ], "Filter": { "Key": { "FilterRules": [ { "Name": "suffix", "Value": "deny-list.json", }, { "Name": "prefix", "Value": "deny-list.json", }, ], }, }, "LambdaFunctionArn": { "Fn::GetAtt": [ "ConstructHubDenyListPrunePruneHandler30B33551", "Arn", ], }, }, ], }, "ServiceToken": { "Fn::GetAtt": [ "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", "Arn", ], }, }, "Type": "Custom::S3BucketNotifications", }, "ConstructHubDenyListBucketPolicyA1878E10": { "Properties": { "Bucket": { "Ref": "ConstructHubDenyListBucket1B3C2C2E", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, "/*", ], ], }, ], }, { "Action": [ "s3:GetBucket*", "s3:List*", "s3:DeleteObject*", ], "Effect": "Allow", "Principal": { "AWS": { "Fn::GetAtt": [ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Arn", ], }, }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubDenyListFailoverBucketAutoDeleteObjectsCustomResource5A026600": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubDenyListFailoverBucketPolicy3B552017", ], "Properties": { "BucketName": { "Ref": "ConstructHubDenyListFailoverBucketBF1E05AD", }, "ServiceToken": { "Fn::GetAtt": [ "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "Arn", ], }, }, "Type": "Custom::S3AutoDeleteObjects", "UpdateReplacePolicy": "Delete", }, "ConstructHubDenyListFailoverBucketBF1E05AD": { "DeletionPolicy": "Delete", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256", }, }, ], }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "aws-cdk:auto-delete-objects", "Value": "true", }, { "Key": "failover", "Value": "true", }, ], "VersioningConfiguration": { "Status": "Enabled", }, }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Delete", }, "ConstructHubDenyListFailoverBucketPolicy3B552017": { "Properties": { "Bucket": { "Ref": "ConstructHubDenyListFailoverBucketBF1E05AD", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubDenyListFailoverBucketBF1E05AD", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubDenyListFailoverBucketBF1E05AD", "Arn", ], }, "/*", ], ], }, ], }, { "Action": [ "s3:GetBucket*", "s3:List*", "s3:DeleteObject*", ], "Effect": "Allow", "Principal": { "AWS": { "Fn::GetAtt": [ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Arn", ], }, }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubDenyListFailoverBucketBF1E05AD", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubDenyListFailoverBucketBF1E05AD", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubDenyListPeriodicPruneA981153D": { "Properties": { "ScheduleExpression": "rate(5 minutes)", "State": "ENABLED", "Targets": [ { "Arn": { "Fn::GetAtt": [ "ConstructHubDenyListPrunePruneHandler30B33551", "Arn", ], }, "Id": "Target0", }, ], }, "Type": "AWS::Events::Rule", }, "ConstructHubDenyListPeriodicPruneAllowEventRuledevConstructHubDenyListPrunePruneHandler8F0BBF5E7B81288F": { "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { "Fn::GetAtt": [ "ConstructHubDenyListPrunePruneHandler30B33551", "Arn", ], }, "Principal": "events.amazonaws.com", "SourceArn": { "Fn::GetAtt": [ "ConstructHubDenyListPeriodicPruneA981153D", "Arn", ], }, }, "Type": "AWS::Lambda::Permission", }, "ConstructHubDenyListPruneDeleteQueueBBF60185": { "DeletionPolicy": "Delete", "Properties": { "VisibilityTimeout": 120, }, "Type": "AWS::SQS::Queue", "UpdateReplacePolicy": "Delete", }, "ConstructHubDenyListPrunePruneHandler30B33551": { "DependsOn": [ "ConstructHubDenyListPrunePruneHandlerServiceRoleDefaultPolicy416BC8DA", "ConstructHubDenyListPrunePruneHandlerServiceRole58BDE1FE", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "40c1b23d6eef0c3802c4474ff7b10603be8704d3bfbe5c2888fabd6ca458ec3c.zip", }, "Description": "backend/deny-list/prune-handler.lambda.ts", "Environment": { "Variables": { "DENY_LIST_BUCKET_NAME": { "Ref": "ConstructHubDenyListBucket1B3C2C2E", }, "DENY_LIST_OBJECT_KEY": "deny-list.json", "ON_CHANGE_FUNCTION_NAME": { "Fn::GetAtt": [ "ConstructHubOrchestrationCatalogBuilder7C964951", "Arn", ], }, "PACKAGE_DATA_BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "PACKAGE_DATA_KEY_PREFIX": "data/", "PRUNE_QUEUE_URL": { "Ref": "ConstructHubDenyListPruneDeleteQueueBBF60185", }, }, }, "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "ConstructHubDenyListPrunePruneHandlerServiceRole58BDE1FE", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 900, }, "Type": "AWS::Lambda::Function", }, "ConstructHubDenyListPrunePruneHandlerServiceRole58BDE1FE": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubDenyListPrunePruneHandlerServiceRoleDefaultPolicy416BC8DA": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "sqs:SendMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubDenyListPruneDeleteQueueBBF60185", "Arn", ], }, }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, "/*", ], ], }, ], }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubOrchestrationCatalogBuilder7C964951", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubOrchestrationCatalogBuilder7C964951", "Arn", ], }, ":*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubDenyListPrunePruneHandlerServiceRoleDefaultPolicy416BC8DA", "Roles": [ { "Ref": "ConstructHubDenyListPrunePruneHandlerServiceRole58BDE1FE", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B": { "DependsOn": [ "ConstructHubDenyListPrunePruneQueueHandlerServiceRoleDefaultPolicy8AA78393", "ConstructHubDenyListPrunePruneQueueHandlerServiceRoleC10AC418", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "2a51a5a459cb9e428c4bf5cc4d67b9f714c6e19d2bfb54d356feb44cbac46aa8.zip", }, "Description": "backend/deny-list/prune-queue-handler.lambda.ts", "Environment": { "Variables": { "PACKAGE_DATA_BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, }, }, "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "ConstructHubDenyListPrunePruneQueueHandlerServiceRoleC10AC418", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 60, }, "Type": "AWS::Lambda::Function", }, "ConstructHubDenyListPrunePruneQueueHandlerServiceRoleC10AC418": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubDenyListPrunePruneQueueHandlerServiceRoleDefaultPolicy8AA78393": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, }, { "Action": [ "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility", "sqs:GetQueueUrl", "sqs:DeleteMessage", "sqs:GetQueueAttributes", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubDenyListPruneDeleteQueueBBF60185", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubDenyListPrunePruneQueueHandlerServiceRoleDefaultPolicy8AA78393", "Roles": [ { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerServiceRoleC10AC418", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubDenyListPrunePruneQueueHandlerSqsEventSourcedevConstructHubDenyListPruneDeleteQueue5B9B1B667049B35D": { "Properties": { "EventSourceArn": { "Fn::GetAtt": [ "ConstructHubDenyListPruneDeleteQueueBBF60185", "Arn", ], }, "FunctionName": { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, }, "Type": "AWS::Lambda::EventSourceMapping", }, "ConstructHubFailoverPackageDataBA7D3B85": { "DeletionPolicy": "Retain", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256", }, }, ], }, "LifecycleConfiguration": { "Rules": [ { "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 1, }, "Status": "Enabled", }, { "NoncurrentVersionTransitions": [ { "StorageClass": "STANDARD_IA", "TransitionInDays": 31, }, ], "Status": "Enabled", }, { "ExpiredObjectDeleteMarker": true, "NoncurrentVersionExpiration": { "NoncurrentDays": 90, }, "Status": "Enabled", }, { "NoncurrentVersionExpiration": { "NoncurrentDays": 7, }, "Prefix": "catalog.json", "Status": "Enabled", }, ], }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "failover", "Value": "true", }, ], "VersioningConfiguration": { "Status": "Enabled", }, }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConstructHubFailoverPackageDataPolicy89BCDF76": { "Properties": { "Bucket": { "Ref": "ConstructHubFailoverPackageDataBA7D3B85", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubFailoverPackageDataBA7D3B85", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubFailoverPackageDataBA7D3B85", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubFeedBuilderReleaseNotesUpdateFeedBB0BA91D": { "DependsOn": [ "ConstructHubFeedBuilderReleaseNotesUpdateFeedServiceRoleDefaultPolicy5190869A", "ConstructHubFeedBuilderReleaseNotesUpdateFeedServiceRoleC857E364", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "775c6ccd2b62769327f37383625b55d4ee81c43502fcaf28650793dfd9947244.zip", }, "Description": "Release note RSS feed updater", "Environment": { "Variables": { "CATALOG_BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "CATALOG_OBJECT_KEY": "catalog.json", "CONSTRUCT_HUB_FEED_DESCRIPTION": "Latest Constructs in the construct hub", "CONSTRUCT_HUB_FEED_TITLE": "Latest constructs", "CONSTRUCT_HUB_URL": { "Fn::Join": [ "", [ "https://", { "Fn::GetAtt": [ "ConstructHubWebAppDistribution1F181DC9", "DomainName", ], }, ], ], }, "FEED_ENTRY_COUNT": "100", }, }, "Handler": "index.handler", "ReservedConcurrentExecutions": 1, "Role": { "Fn::GetAtt": [ "ConstructHubFeedBuilderReleaseNotesUpdateFeedServiceRoleC857E364", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 60, }, "Type": "AWS::Lambda::Function", }, "ConstructHubFeedBuilderReleaseNotesUpdateFeedServiceRoleC857E364": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubFeedBuilderReleaseNotesUpdateFeedServiceRoleDefaultPolicy5190869A": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/catalog.json", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/atom", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/rss", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/release-notes.md", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubFeedBuilderReleaseNotesUpdateFeedServiceRoleDefaultPolicy5190869A", "Roles": [ { "Ref": "ConstructHubFeedBuilderReleaseNotesUpdateFeedServiceRoleC857E364", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubIngestion407909CE": { "DependsOn": [ "ConstructHubIngestionServiceRoleDefaultPolicyC0D2B6F2", "ConstructHubIngestionServiceRole6380BAB6", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "70a169516f893fcb108feb911e2fee28e789f3c41279cbeb07dabca5deb6875d.zip", }, "Description": "[ConstructHub/Ingestion] Ingests new package versions into the Construct Hub", "Environment": { "Variables": { "AWS_EMF_ENVIRONMENT": "Local", "BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "CODE_ARTIFACT_DOMAIN_NAME": { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainName", ], }, "CODE_ARTIFACT_DOMAIN_OWNER": { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainOwner", ], }, "CODE_ARTIFACT_REPOSITORY_ENDPOINT": { "Fn::GetAtt": [ "ConstructHubCodeArtifactGetPublishingEndpoint6394DEF7", "repositoryEndpoint", ], }, "CONFIG_BUCKET_NAME": { "Ref": "ConstructHubIngestionConfigBucket0F0ED0B6", }, "CONFIG_FILE_KEY": "config.json", "RELEASE_NOTES_FETCH_QUEUE_URL": { "Ref": "ConstructHubReleaseNotesChangeLogFetchQueue2D5BA633", }, "STATE_MACHINE_ARN": { "Ref": "ConstructHubOrchestration39161A46", }, }, }, "Handler": "index.handler", "MemorySize": 10240, "Role": { "Fn::GetAtt": [ "ConstructHubIngestionServiceRole6380BAB6", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 900, "TracingConfig": { "Mode": "Active", }, }, "Type": "AWS::Lambda::Function", }, "ConstructHubIngestionConfigBucket0F0ED0B6": { "DeletionPolicy": "Retain", "Properties": { "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "aws-cdk:cr-owned:e7a34c7f", "Value": "true", }, ], "VersioningConfiguration": { "Status": "Enabled", }, }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConstructHubIngestionConfigBucketPolicyF096914C": { "Properties": { "Bucket": { "Ref": "ConstructHubIngestionConfigBucket0F0ED0B6", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubIngestionConfigBucket0F0ED0B6", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubIngestionConfigBucket0F0ED0B6", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubIngestionDLQ3E96A5F2": { "DeletionPolicy": "Delete", "Properties": { "KmsMasterKeyId": "alias/aws/sqs", "MessageRetentionPeriod": 1209600, "VisibilityTimeout": 900, }, "Type": "AWS::SQS::Queue", "UpdateReplacePolicy": "Delete", }, "ConstructHubIngestionDLQAlarm83BD1903": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The dead-letter queue for the Ingestion function is not empty! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to the queue: /sqs/v2/home#/queues/https%3A%2F%2Fsqs.", { "Ref": "AWS::Region", }, ".amazonaws.com%2F", { "Ref": "AWS::AccountId", }, "%2F", { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "QueueName", ], }, " Direct link to the function: /lambda/home#/functions/", { "Ref": "ConstructHubIngestion407909CE", }, ], ], }, "AlarmName": "dev/ConstructHub/Ingestion/DLQNotEmpty", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "EvaluationPeriods": 1, "Metrics": [ { "Expression": "m1 + m2", "Id": "expr_1", }, { "Id": "m1", "MetricStat": { "Metric": { "Dimensions": [ { "Name": "QueueName", "Value": { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "QueueName", ], }, }, ], "MetricName": "ApproximateNumberOfMessagesVisible", "Namespace": "AWS/SQS", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, { "Id": "m2", "MetricStat": { "Metric": { "Dimensions": [ { "Name": "QueueName", "Value": { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "QueueName", ], }, }, ], "MetricName": "ApproximateNumberOfMessagesNotVisible", "Namespace": "AWS/SQS", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, ], "Threshold": 1, "TreatMissingData": "notBreaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubIngestionDeployIngestionConfigurationAwsCliLayerF77955C2": { "Properties": { "Content": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "e2277687077a2abf9ae1af1cc9565e6715e2ebb62f79ec53aa75a1af9298f642.zip", }, "Description": "/opt/awscli/aws", }, "Type": "AWS::Lambda::LayerVersion", }, "ConstructHubIngestionDeployIngestionConfigurationCustomResourceD7F243C1": { "DeletionPolicy": "Delete", "Properties": { "DestinationBucketName": { "Ref": "ConstructHubIngestionConfigBucket0F0ED0B6", }, "Prune": true, "ServiceToken": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "Arn", ], }, "SourceBucketNames": [ { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, ], "SourceObjectKeys": [ "b32de5d6fb92c01b03e93e387691b3f444ac4e9800273abf834874c427c640f0.zip", ], }, "Type": "Custom::CDKBucketDeployment", "UpdateReplacePolicy": "Delete", }, "ConstructHubIngestionFailoverConfigBucket079F82C3": { "DeletionPolicy": "Retain", "Properties": { "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "failover", "Value": "true", }, ], "VersioningConfiguration": { "Status": "Enabled", }, }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConstructHubIngestionFailoverConfigBucketPolicyD45F3F6D": { "Properties": { "Bucket": { "Ref": "ConstructHubIngestionFailoverConfigBucket079F82C3", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubIngestionFailoverConfigBucket079F82C3", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubIngestionFailoverConfigBucket079F82C3", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubIngestionFailureAlarm9D0028DD": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The Ingestion function is failing! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to the function: /lambda/home#/functions/", { "Ref": "ConstructHubIngestion407909CE", }, ], ], }, "AlarmName": "dev/ConstructHub/Ingestion/Failure", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubIngestion407909CE", }, }, ], "EvaluationPeriods": 2, "MetricName": "Errors", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 1, "TreatMissingData": "notBreaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubIngestionLogRetention98263C90": { "Properties": { "LogGroupName": { "Fn::Join": [ "", [ "/aws/lambda/", { "Ref": "ConstructHubIngestion407909CE", }, ], ], }, "RetentionInDays": 7, "ServiceToken": { "Fn::GetAtt": [ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "Arn", ], }, }, "Type": "Custom::LogRetention", }, "ConstructHubIngestionQueue1AD94CA3": { "DeletionPolicy": "Delete", "Properties": { "KmsMasterKeyId": "alias/aws/sqs", "MessageRetentionPeriod": 1209600, "RedrivePolicy": { "deadLetterTargetArn": { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "Arn", ], }, "maxReceiveCount": 5, }, "VisibilityTimeout": 900, }, "Type": "AWS::SQS::Queue", "UpdateReplacePolicy": "Delete", }, "ConstructHubIngestionReprocessQueueADCE803E": { "DeletionPolicy": "Delete", "Properties": { "KmsMasterKeyId": "alias/aws/sqs", "MessageRetentionPeriod": 1209600, "RedrivePolicy": { "deadLetterTargetArn": { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "Arn", ], }, "maxReceiveCount": 5, }, "VisibilityTimeout": 900, }, "Type": "AWS::SQS::Queue", "UpdateReplacePolicy": "Delete", }, "ConstructHubIngestionReprocessWorkflowFunction47A2DE6E": { "DependsOn": [ "ConstructHubIngestionReprocessWorkflowFunctionServiceRoleDefaultPolicyF528A135", "ConstructHubIngestionReprocessWorkflowFunctionServiceRoleA59056B1", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "5313622eb68996f7f4b8efdaa3ca51ca699b99c5931354465d174b969bb99bf5.zip", }, "Description": "[ConstructHub/Ingestion/ReIngest] The function used to reprocess packages through ingestion", "Environment": { "Variables": { "BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "QUEUE_URL": { "Ref": "ConstructHubIngestionReprocessQueueADCE803E", }, "REPROCESS_AGE_MILLIS": "7776000000", }, }, "Handler": "index.handler", "MemorySize": 10240, "Role": { "Fn::GetAtt": [ "ConstructHubIngestionReprocessWorkflowFunctionServiceRoleA59056B1", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 180, "TracingConfig": { "Mode": "Active", }, }, "Type": "AWS::Lambda::Function", }, "ConstructHubIngestionReprocessWorkflowFunctionServiceRoleA59056B1": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubIngestionReprocessWorkflowFunctionServiceRoleDefaultPolicyF528A135": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", ], "Effect": "Allow", "Resource": "*", }, { "Action": [ "sqs:SendMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubIngestionReprocessQueueADCE803E", "Arn", ], }, }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/metadata.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/package.tgz", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubIngestionReprocessWorkflowFunctionServiceRoleDefaultPolicyF528A135", "Roles": [ { "Ref": "ConstructHubIngestionReprocessWorkflowFunctionServiceRoleA59056B1", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubIngestionReprocessWorkflowStateMachine3708141C": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubIngestionReprocessWorkflowStateMachineRoleDefaultPolicy3A21E747", "ConstructHubIngestionReprocessWorkflowStateMachineRoleA07E1479", ], "Properties": { "DefinitionString": { "Fn::Join": [ "", [ "{"StartAt":"Has a ContinuationToken?","States":{"Has a ContinuationToken?":{"Type":"Choice","Choices":[{"Variable":"$.ContinuationToken","IsPresent":true,"Next":"S3.ListObjectsV2(NextPage)"}],"Default":"S3.ListObjectsV2(FirstPage)"},"S3.ListObjectsV2(FirstPage)":{"Next":"Is there more?","Retry":[{"ErrorEquals":["S3.SdkClientException"]}],"Type":"Task","ResultPath":"$.response","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:s3:listObjectsV2","Parameters":{"Bucket":"", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "","Prefix":"data/"}},"Is there more?":{"Type":"Choice","Choices":[{"Variable":"$.response.NextContinuationToken","IsPresent":true,"Next":"Give room for on-demand work"}],"Default":"Process Result"},"S3.ListObjectsV2(NextPage)":{"Next":"Is there more?","Retry":[{"ErrorEquals":["S3.SdkClientException"]}],"Type":"Task","ResultPath":"$.response","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:s3:listObjectsV2","Parameters":{"Bucket":"", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "","ContinuationToken.$":"$.ContinuationToken","Prefix":"data/"}},"Process Result":{"Type":"Map","ResultPath":null,"End":true,"Iterator":{"StartAt":"Is metadata object?","States":{"Is metadata object?":{"Type":"Choice","Choices":[{"Variable":"$.Key","StringMatches":"*/metadata.json","Next":"Send for reprocessing"}],"Default":"Nothing to do"},"Nothing to do":{"Type":"Succeed"},"Send for reprocessing":{"End":true,"Retry":[{"ErrorEquals":["Lambda.ServiceException","Lambda.AWSLambdaException","Lambda.SdkClientException"],"IntervalSeconds":2,"MaxAttempts":6,"BackoffRate":2},{"ErrorEquals":["Lambda.TooManyRequestsException"],"IntervalSeconds":60,"MaxAttempts":30,"BackoffRate":1.1}],"Type":"Task","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::lambda:invoke","Parameters":{"FunctionName":"", { "Fn::GetAtt": [ "ConstructHubIngestionReprocessWorkflowFunction47A2DE6E", "Arn", ], }, "","Payload.$":"$"}}}},"ItemsPath":"$.response.Contents"},"Continue as new":{"Next":"Process Result","Retry":[{"ErrorEquals":["StepFunctions.ExecutionLimitExceeded"]}],"Type":"Task","ResultPath":null,"Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::states:startExecution","Parameters":{"Input":{"ContinuationToken.$":"$.response.NextContinuationToken","AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$":"$$.Execution.Id"},"StateMachineArn":"arn:", { "Ref": "AWS::Partition", }, ":states:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":stateMachine:dev.ConstructHub.Ingestion.ReprocessWorkflow"}},"Give room for on-demand work":{"Type":"Wait","Seconds":15,"Next":"Continue as new"}},"TimeoutSeconds":3600}", ], ], }, "RoleArn": { "Fn::GetAtt": [ "ConstructHubIngestionReprocessWorkflowStateMachineRoleA07E1479", "Arn", ], }, "StateMachineName": "dev.ConstructHub.Ingestion.ReprocessWorkflow", }, "Type": "AWS::StepFunctions::StateMachine", "UpdateReplacePolicy": "Delete", }, "ConstructHubIngestionReprocessWorkflowStateMachineRoleA07E1479": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": { "Fn::FindInMap": [ "ServiceprincipalMap", { "Ref": "AWS::Region", }, "states", ], }, }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::IAM::Role", }, "ConstructHubIngestionReprocessWorkflowStateMachineRoleDefaultPolicy3A21E747": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "s3:ListBucket", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, }, { "Action": "states:StartExecution", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":states:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":stateMachine:dev.ConstructHub.Ingestion.ReprocessWorkflow", ], ], }, }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubIngestionReprocessWorkflowFunction47A2DE6E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubIngestionReprocessWorkflowFunction47A2DE6E", "Arn", ], }, ":*", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, ], }, { "Action": [ "sqs:SendMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubIngestionReprocessQueueADCE803E", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubIngestionReprocessWorkflowStateMachineRoleDefaultPolicy3A21E747", "Roles": [ { "Ref": "ConstructHubIngestionReprocessWorkflowStateMachineRoleA07E1479", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubIngestionServiceRole6380BAB6": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubIngestionServiceRoleDefaultPolicyC0D2B6F2": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", ], "Effect": "Allow", "Resource": "*", }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubIngestionConfigBucket0F0ED0B6", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubIngestionConfigBucket0F0ED0B6", "Arn", ], }, "/*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, ], }, { "Action": "sts:GetServiceBearerToken", "Condition": { "StringEquals": { "sts:AWSServiceName": "codeartifact.amazonaws.com", }, }, "Effect": "Allow", "Resource": "*", }, { "Action": [ "codeartifact:GetAuthorizationToken", "codeartifact:GetRepositoryEndpoint", "codeartifact:ReadFromRepository", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubCodeArtifactDomainFC30B796", "Arn", ], }, { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "Arn", ], }, { "Fn::GetAtt": [ "ConstructHubCodeArtifactPublishing143CC07C", "Arn", ], }, ], }, { "Action": [ "codeartifact:PublishPackageVersion", "codeartifact:PutPackageMetadata", ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":codeartifact:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":package/", { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainName", ], }, "/", { "Fn::GetAtt": [ "ConstructHubCodeArtifactPublishing143CC07C", "Name", ], }, "/npm/*", ], ], }, }, { "Action": "states:StartExecution", "Effect": "Allow", "Resource": { "Ref": "ConstructHubOrchestration39161A46", }, }, { "Action": [ "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility", "sqs:GetQueueUrl", "sqs:DeleteMessage", "sqs:GetQueueAttributes", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubIngestionQueue1AD94CA3", "Arn", ], }, }, { "Action": [ "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility", "sqs:GetQueueUrl", "sqs:DeleteMessage", "sqs:GetQueueAttributes", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "Arn", ], }, }, { "Action": [ "sqs:SendMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubReleaseNotesChangeLogFetchQueue2D5BA633", "Arn", ], }, }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/package.tgz", ], ], }, ], }, { "Action": [ "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility", "sqs:GetQueueUrl", "sqs:DeleteMessage", "sqs:GetQueueAttributes", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubIngestionReprocessQueueADCE803E", "Arn", ], }, }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsStagingBucketB286F0E6", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsStagingBucketB286F0E6", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubIngestionServiceRoleDefaultPolicyC0D2B6F2", "Roles": [ { "Ref": "ConstructHubIngestionServiceRole6380BAB6", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubIngestionSqsEventSourcedevConstructHubIngestionDLQ79BE912AA5AF0394": { "Properties": { "BatchSize": 1, "Enabled": false, "EventSourceArn": { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "Arn", ], }, "FunctionName": { "Ref": "ConstructHubIngestion407909CE", }, }, "Type": "AWS::Lambda::EventSourceMapping", }, "ConstructHubIngestionSqsEventSourcedevConstructHubIngestionQueue9A801AAF9844496F": { "Properties": { "BatchSize": 1, "EventSourceArn": { "Fn::GetAtt": [ "ConstructHubIngestionQueue1AD94CA3", "Arn", ], }, "FunctionName": { "Ref": "ConstructHubIngestion407909CE", }, }, "Type": "AWS::Lambda::EventSourceMapping", }, "ConstructHubIngestionSqsEventSourcedevConstructHubIngestionReprocessQueueF70FBCD54436FF12": { "Properties": { "BatchSize": 1, "EventSourceArn": { "Fn::GetAtt": [ "ConstructHubIngestionReprocessQueueADCE803E", "Arn", ], }, "FunctionName": { "Ref": "ConstructHubIngestion407909CE", }, }, "Type": "AWS::Lambda::EventSourceMapping", }, "ConstructHubInventoryCanary63D899BC": { "DependsOn": [ "ConstructHubInventoryCanaryServiceRoleDefaultPolicy144783F1", "ConstructHubInventoryCanaryServiceRole7684EDDE", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "957702772cac71543b0966605311e70f9e02064770a9652360200baed2003c9c.zip", }, "Description": "[ConstructHub/Inventory] A canary that periodically inspects the list of indexed packages", "Environment": { "Variables": { "AWS_EMF_ENVIRONMENT": "Local", "PACKAGE_DATA_BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "SCRATCHWORK_BUCKET_NAME": { "Ref": "ConstructHubInventoryCanaryScratchworkBucketC185625E", }, }, }, "Handler": "index.handler", "MemorySize": 10240, "Role": { "Fn::GetAtt": [ "ConstructHubInventoryCanaryServiceRole7684EDDE", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 900, }, "Type": "AWS::Lambda::Function", }, "ConstructHubInventoryCanaryFailoverScratchworkBucketE8015DAD": { "DeletionPolicy": "Delete", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256", }, }, ], }, "LifecycleConfiguration": { "Rules": [ { "ExpirationInDays": 30, "Status": "Enabled", }, ], }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "failover", "Value": "true", }, ], }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Delete", }, "ConstructHubInventoryCanaryFailoverScratchworkBucketPolicy6E5D67F4": { "Properties": { "Bucket": { "Ref": "ConstructHubInventoryCanaryFailoverScratchworkBucketE8015DAD", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubInventoryCanaryFailoverScratchworkBucketE8015DAD", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubInventoryCanaryFailoverScratchworkBucketE8015DAD", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubInventoryCanaryFailures5BDA8051": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The inventory canary is failing! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to function: /lambda/home#/functions/", { "Ref": "ConstructHubInventoryCanary63D899BC", }, ], ], }, "AlarmName": "dev/ConstructHub/InventoryCanary/Failures", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubInventoryCanary63D899BC", }, }, ], "EvaluationPeriods": 2, "MetricName": "Errors", "Namespace": "AWS/Lambda", "Period": 900, "Statistic": "Sum", "Threshold": 1, }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubInventoryCanaryLogRetention8B1B5364": { "Properties": { "LogGroupName": { "Fn::Join": [ "", [ "/aws/lambda/", { "Ref": "ConstructHubInventoryCanary63D899BC", }, ], ], }, "RetentionInDays": 7, "ServiceToken": { "Fn::GetAtt": [ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "Arn", ], }, }, "Type": "Custom::LogRetention", }, "ConstructHubInventoryCanaryNotRunningAF44D71C": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The inventory canary is not running! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to function: /lambda/home#/functions/", { "Ref": "ConstructHubInventoryCanary63D899BC", }, ], ], }, "AlarmName": "dev/ConstructHub/InventoryCanary/NotRunning", "ComparisonOperator": "LessThanThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubInventoryCanary63D899BC", }, }, ], "EvaluationPeriods": 1, "MetricName": "Invocations", "Namespace": "AWS/Lambda", "Period": 900, "Statistic": "Sum", "Threshold": 1, }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubInventoryCanaryScheduleRule79F2F8D8": { "DependsOn": [ "ConstructHubInventoryCanaryServiceRoleDefaultPolicy144783F1", ], "Properties": { "ScheduleExpression": "rate(15 minutes)", "State": "ENABLED", "Targets": [ { "Arn": { "Ref": "ConstructHubInventoryCanaryStateMachineAA2D2A3A", }, "Id": "Target0", "Input": "{"comment":"Scheduled event from cron job.","result":{}}", "RetryPolicy": { "MaximumRetryAttempts": 3, }, "RoleArn": { "Fn::GetAtt": [ "ConstructHubInventoryCanaryStateMachineEventsRole8AD19655", "Arn", ], }, }, ], }, "Type": "AWS::Events::Rule", }, "ConstructHubInventoryCanaryScratchworkBucketC185625E": { "DeletionPolicy": "Delete", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256", }, }, ], }, "LifecycleConfiguration": { "Rules": [ { "ExpirationInDays": 30, "Status": "Enabled", }, ], }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Delete", }, "ConstructHubInventoryCanaryScratchworkBucketPolicy51913ABF": { "Properties": { "Bucket": { "Ref": "ConstructHubInventoryCanaryScratchworkBucketC185625E", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubInventoryCanaryScratchworkBucketC185625E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubInventoryCanaryScratchworkBucketC185625E", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubInventoryCanaryServiceRole7684EDDE": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubInventoryCanaryServiceRoleDefaultPolicy144783F1": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/missing-objects/*-documentation.json", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/corruptassembly-objects/*.json", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/uninstallable-objects/data.json", ], ], }, ], }, { "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": [ "ConstructHubInventoryCanaryScratchworkBucketC185625E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubInventoryCanaryScratchworkBucketC185625E", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubInventoryCanaryServiceRoleDefaultPolicy144783F1", "Roles": [ { "Ref": "ConstructHubInventoryCanaryServiceRole7684EDDE", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubInventoryCanaryStateMachineAA2D2A3A": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubInventoryCanaryStateMachineRoleDefaultPolicy6F9D94C1", "ConstructHubInventoryCanaryStateMachineRole9D5D502F", ], "Properties": { "DefinitionString": { "Fn::Join": [ "", [ "{"StartAt":"Process for 15 minutes.","States":{"Process for 15 minutes.":{"Next":"Remaining items to process?","Retry":[{"ErrorEquals":["Lambda.ServiceException","Lambda.AWSLambdaException","Lambda.SdkClientException"],"IntervalSeconds":2,"MaxAttempts":6,"BackoffRate":2}],"Type":"Task","InputPath":"$.result","ResultPath":"$.result","Resource":"", { "Fn::GetAtt": [ "ConstructHubInventoryCanary63D899BC", "Arn", ], }, ""},"Remaining items to process?":{"Type":"Choice","Choices":[{"Variable":"$.result.continuationObjectKey","IsPresent":true,"Next":"Process for 15 minutes."}],"Default":"Success"},"Success":{"Type":"Succeed"}},"TimeoutSeconds":21600}", ], ], }, "RoleArn": { "Fn::GetAtt": [ "ConstructHubInventoryCanaryStateMachineRole9D5D502F", "Arn", ], }, "TracingConfiguration": { "Enabled": true, }, }, "Type": "AWS::StepFunctions::StateMachine", "UpdateReplacePolicy": "Delete", }, "ConstructHubInventoryCanaryStateMachineEventsRole8AD19655": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com", }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::IAM::Role", }, "ConstructHubInventoryCanaryStateMachineEventsRoleDefaultPolicyE2B4E72C": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "states:StartExecution", "Effect": "Allow", "Resource": { "Ref": "ConstructHubInventoryCanaryStateMachineAA2D2A3A", }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubInventoryCanaryStateMachineEventsRoleDefaultPolicyE2B4E72C", "Roles": [ { "Ref": "ConstructHubInventoryCanaryStateMachineEventsRole8AD19655", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubInventoryCanaryStateMachineRole9D5D502F": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": { "Fn::FindInMap": [ "ServiceprincipalMap", { "Ref": "AWS::Region", }, "states", ], }, }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::IAM::Role", }, "ConstructHubInventoryCanaryStateMachineRoleDefaultPolicy6F9D94C1": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", "xray:GetSamplingRules", "xray:GetSamplingTargets", ], "Effect": "Allow", "Resource": "*", }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubInventoryCanary63D899BC", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubInventoryCanary63D899BC", "Arn", ], }, ":*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubInventoryCanaryStateMachineRoleDefaultPolicy6F9D94C1", "Roles": [ { "Ref": "ConstructHubInventoryCanaryStateMachineRole9D5D502F", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubLicenseListAwsCliLayer59592811": { "Properties": { "Content": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "e2277687077a2abf9ae1af1cc9565e6715e2ebb62f79ec53aa75a1af9298f642.zip", }, "Description": "/opt/awscli/aws", }, "Type": "AWS::Lambda::LayerVersion", }, "ConstructHubLicenseListBucket9334047F": { "DeletionPolicy": "Retain", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256", }, }, ], }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "aws-cdk:cr-owned:e51f6386", "Value": "true", }, ], "VersioningConfiguration": { "Status": "Enabled", }, }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConstructHubLicenseListBucketPolicy817F92CD": { "Properties": { "Bucket": { "Ref": "ConstructHubLicenseListBucket9334047F", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubLicenseListBucket9334047F", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubLicenseListBucket9334047F", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubLicenseListCustomResource323F0FD4": { "DeletionPolicy": "Delete", "Properties": { "DestinationBucketName": { "Ref": "ConstructHubLicenseListBucket9334047F", }, "Prune": true, "RetainOnDelete": true, "ServiceToken": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "Arn", ], }, "SourceBucketNames": [ { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, ], "SourceObjectKeys": [ "6854d23da8a48ceaea76fcdd5aae5fc68d1b0c20cb011569ccddbb1b6ddcb68d.zip", ], }, "Type": "Custom::CDKBucketDeployment", "UpdateReplacePolicy": "Delete", }, "ConstructHubLicenseListFailoverBucketA96D2AAF": { "DeletionPolicy": "Retain", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256", }, }, ], }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "failover", "Value": "true", }, ], "VersioningConfiguration": { "Status": "Enabled", }, }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConstructHubLicenseListFailoverBucketPolicy7F222A76": { "Properties": { "Bucket": { "Ref": "ConstructHubLicenseListFailoverBucketA96D2AAF", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubLicenseListFailoverBucketA96D2AAF", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubLicenseListFailoverBucketA96D2AAF", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubMonitoringHighSeverityDashboard8761DBAC": { "Properties": { "DashboardBody": { "Fn::Join": [ "", [ "{"widgets":[{"type":"metric","width":24,"height":6,"x":0,"y":0,"properties":{"view":"timeSeries","title":"Catalog Size Shrunk","region":"", { "Ref": "AWS::Region", }, "","annotations":{"alarms":["", { "Fn::GetAtt": [ "ConstructHubOrchestrationCatalogBuilderShrinkingCatalogAlarm48329E25", "Arn", ], }, ""]},"yAxis":{}}},{"type":"metric","width":24,"height":6,"x":0,"y":6,"properties":{"view":"timeSeries","title":"Backend Orchestration Failed","region":"", { "Ref": "AWS::Region", }, "","annotations":{"alarms":["", { "Fn::GetAtt": [ "ConstructHubOrchestrationOrchestrationFailed5AF50838", "Arn", ], }, ""]},"yAxis":{}}},{"type":"metric","width":24,"height":6,"x":0,"y":12,"properties":{"view":"timeSeries","title":"ReleaseNotes generation Failure","region":"", { "Ref": "AWS::Region", }, "","annotations":{"alarms":["", { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesGenerationFailure04ABD01D", "Arn", ], }, ""]},"yAxis":{}}},{"type":"metric","width":24,"height":6,"x":0,"y":18,"properties":{"view":"timeSeries","title":"ReleaseNotes Github credential invalid","region":"", { "Ref": "AWS::Region", }, "","annotations":{"alarms":["", { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesInvalidGitHubCredentialsE84D7534", "Arn", ], }, ""]},"yAxis":{}}},{"type":"metric","width":24,"height":6,"x":0,"y":24,"properties":{"view":"timeSeries","title":"Ingestion failures","region":"", { "Ref": "AWS::Region", }, "","annotations":{"alarms":["", { "Fn::GetAtt": [ "ConstructHubIngestionFailureAlarm9D0028DD", "Arn", ], }, ""]},"yAxis":{}}},{"type":"metric","width":24,"height":6,"x":0,"y":30,"properties":{"view":"timeSeries","title":"Home Page Canary","region":"", { "Ref": "AWS::Region", }, "","annotations":{"alarms":["", { "Fn::GetAtt": [ "ConstructHubMonitoringWebCanaryHomePageErrorsE7BB4002", "Arn", ], }, ""]},"yAxis":{}}},{"type":"metric","width":24,"height":6,"x":0,"y":36,"properties":{"view":"timeSeries","title":"NpmJs/Follower Not Running","region":"", { "Ref": "AWS::Region", }, "","annotations":{"alarms":["", { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsFollowerNotRunningCEAF0E1E", "Arn", ], }, ""]},"yAxis":{}}},{"type":"metric","width":24,"height":6,"x":0,"y":42,"properties":{"view":"timeSeries","title":"NpmJs Follower Canary is not running or fails","region":"", { "Ref": "AWS::Region", }, "","annotations":{"alarms":["", { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsCanaryNotRunningOrFailing62A8E2F6", "Arn", ], }, ""]},"yAxis":{}}}]}", ], ], }, }, "Type": "AWS::CloudWatch::Dashboard", }, "ConstructHubMonitoringWatchfulDashboardB8493D55": { "Properties": { "DashboardBody": { "Fn::Join": [ "", [ "{"widgets":[{"type":"text","width":24,"height":2,"x":0,"y":0,"properties":{"markdown":"# Deny List - Prune Function\\n\\n[button:AWS Lambda Console](https://console.aws.amazon.com/lambda/home?region=", { "Ref": "AWS::Region", }, "#/functions/", { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, "?tab=graph) [button:CloudWatch Logs](https://console.aws.amazon.com/cloudwatch/home?region=", { "Ref": "AWS::Region", }, "#logEventViewer:group=/aws/lambda/", { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, ")"}},{"type":"metric","width":6,"height":6,"x":0,"y":2,"properties":{"view":"timeSeries","title":"Invocations/5min","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, "",{"stat":"Sum"}]],"yAxis":{}}},{"type":"metric","width":6,"height":6,"x":6,"y":2,"properties":{"view":"timeSeries","title":"Errors/5min","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/Lambda","Errors","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, "",{"stat":"Sum"}]],"annotations":{"horizontal":[{"label":"Errors > 0 for 3 datapoints within 15 minutes","value":0,"yAxis":"left"}]},"yAxis":{}}},{"type":"metric","width":6,"height":6,"x":12,"y":2,"properties":{"view":"timeSeries","title":"Throttles/5min","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/Lambda","Throttles","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, "",{"stat":"Sum"}]],"annotations":{"horizontal":[{"label":"Throttles > 0 for 3 datapoints within 15 minutes","value":0,"yAxis":"left"}]},"yAxis":{}}},{"type":"metric","width":6,"height":6,"x":18,"y":2,"properties":{"view":"timeSeries","title":"Duration/5min","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/Lambda","Duration","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, "",{"label":"p99","stat":"p99"}]],"annotations":{"horizontal":[{"label":"p99 > 720000 for 3 datapoints within 15 minutes","value":720000,"yAxis":"left"}]},"yAxis":{}}},{"type":"text","width":24,"height":2,"x":0,"y":8,"properties":{"markdown":"# Deny List - Prune Delete Function\\n\\n[button:AWS Lambda Console](https://console.aws.amazon.com/lambda/home?region=", { "Ref": "AWS::Region", }, "#/functions/", { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, "?tab=graph) [button:CloudWatch Logs](https://console.aws.amazon.com/cloudwatch/home?region=", { "Ref": "AWS::Region", }, "#logEventViewer:group=/aws/lambda/", { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, ")"}},{"type":"metric","width":6,"height":6,"x":0,"y":10,"properties":{"view":"timeSeries","title":"Invocations/5min","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, "",{"stat":"Sum"}]],"yAxis":{}}},{"type":"metric","width":6,"height":6,"x":6,"y":10,"properties":{"view":"timeSeries","title":"Errors/5min","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/Lambda","Errors","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, "",{"stat":"Sum"}]],"annotations":{"horizontal":[{"label":"Errors > 0 for 3 datapoints within 15 minutes","value":0,"yAxis":"left"}]},"yAxis":{}}},{"type":"metric","width":6,"height":6,"x":12,"y":10,"properties":{"view":"timeSeries","title":"Throttles/5min","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/Lambda","Throttles","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, "",{"stat":"Sum"}]],"annotations":{"horizontal":[{"label":"Throttles > 0 for 3 datapoints within 15 minutes","value":0,"yAxis":"left"}]},"yAxis":{}}},{"type":"metric","width":6,"height":6,"x":18,"y":10,"properties":{"view":"timeSeries","title":"Duration/5min","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/Lambda","Duration","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, "",{"label":"p99","stat":"p99"}]],"annotations":{"horizontal":[{"label":"p99 > 48000 for 3 datapoints within 15 minutes","value":48000,"yAxis":"left"}]},"yAxis":{}}}]}", ], ], }, }, "Type": "AWS::CloudWatch::Dashboard", }, "ConstructHubMonitoringWatchfuldevConstructHubDenyListPrunePruneHandler8F0BBF5EDurationAlarm073AF5CE": { "Properties": { "AlarmActions": [], "AlarmDescription": "p99 latency >= 720s (80%)", "ComparisonOperator": "GreaterThanThreshold", "EvaluationPeriods": 3, "Metrics": [ { "Id": "m1", "Label": "p99", "MetricStat": { "Metric": { "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, }, ], "MetricName": "Duration", "Namespace": "AWS/Lambda", }, "Period": 300, "Stat": "p99", }, "ReturnData": true, }, ], "Threshold": 720000, }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubMonitoringWatchfuldevConstructHubDenyListPrunePruneHandler8F0BBF5EErrorsAlarm615741A8": { "Properties": { "AlarmActions": [], "AlarmDescription": "Over 0 errors per minute", "ComparisonOperator": "GreaterThanThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, }, ], "EvaluationPeriods": 3, "MetricName": "Errors", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 0, }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubMonitoringWatchfuldevConstructHubDenyListPrunePruneHandler8F0BBF5EThrottlesAlarm310F7D39": { "Properties": { "AlarmActions": [], "AlarmDescription": "Over 0 throttles per minute", "ComparisonOperator": "GreaterThanThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, }, ], "EvaluationPeriods": 3, "MetricName": "Throttles", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 0, }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubMonitoringWatchfuldevConstructHubDenyListPrunePruneQueueHandlerB847E57CDurationAlarm09AF9418": { "Properties": { "AlarmActions": [], "AlarmDescription": "p99 latency >= 48s (80%)", "ComparisonOperator": "GreaterThanThreshold", "EvaluationPeriods": 3, "Metrics": [ { "Id": "m1", "Label": "p99", "MetricStat": { "Metric": { "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, }, ], "MetricName": "Duration", "Namespace": "AWS/Lambda", }, "Period": 300, "Stat": "p99", }, "ReturnData": true, }, ], "Threshold": 48000, }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubMonitoringWatchfuldevConstructHubDenyListPrunePruneQueueHandlerB847E57CErrorsAlarmCAA191E1": { "Properties": { "AlarmActions": [], "AlarmDescription": "Over 0 errors per minute", "ComparisonOperator": "GreaterThanThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, }, ], "EvaluationPeriods": 3, "MetricName": "Errors", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 0, }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubMonitoringWatchfuldevConstructHubDenyListPrunePruneQueueHandlerB847E57CThrottlesAlarm19D4ADCD": { "Properties": { "AlarmActions": [], "AlarmDescription": "Over 0 throttles per minute", "ComparisonOperator": "GreaterThanThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, }, ], "EvaluationPeriods": 3, "MetricName": "Throttles", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 0, }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubMonitoringWebCanaryHomePageErrorsE7BB4002": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "80% error rate for https://", { "Fn::GetAtt": [ "ConstructHubWebAppDistribution1F181DC9", "DomainName", ], }, " (Home Page)", ], ], }, "ComparisonOperator": "GreaterThanOrEqualToThreshold", "EvaluationPeriods": 1, "Metrics": [ { "Id": "m1", "Label": { "Fn::Join": [ "", [ "https://", { "Fn::GetAtt": [ "ConstructHubWebAppDistribution1F181DC9", "DomainName", ], }, " Errors", ], ], }, "MetricStat": { "Metric": { "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubMonitoringWebCanaryHomePageHttpGetFunctionF27ADDC8", }, }, ], "MetricName": "Errors", "Namespace": "AWS/Lambda", }, "Period": 300, "Stat": "Sum", }, "ReturnData": true, }, ], "Threshold": 4, "TreatMissingData": "breaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubMonitoringWebCanaryHomePageHttpGetFunctionF27ADDC8": { "DependsOn": [ "ConstructHubMonitoringWebCanaryHomePageHttpGetFunctionServiceRole9AAAD93C", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "50d88b530262992a85b311f387a8993b6e60a15303291e27dce77e006e487769.zip", }, "Description": { "Fn::Join": [ "", [ "HTTP GET https://", { "Fn::GetAtt": [ "ConstructHubWebAppDistribution1F181DC9", "DomainName", ], }, ": Home Page", ], ], }, "Environment": { "Variables": { "URL": { "Fn::Join": [ "", [ "https://", { "Fn::GetAtt": [ "ConstructHubWebAppDistribution1F181DC9", "DomainName", ], }, ], ], }, }, }, "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "ConstructHubMonitoringWebCanaryHomePageHttpGetFunctionServiceRole9AAAD93C", "Arn", ], }, "Runtime": "nodejs16.x", }, "Type": "AWS::Lambda::Function", }, "ConstructHubMonitoringWebCanaryHomePageHttpGetFunctionServiceRole9AAAD93C": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubMonitoringWebCanaryHomePageRuleAllowEventRuledevConstructHubMonitoringWebCanaryHomePageHttpGetFunction62E39E56A2CA6F6B": { "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { "Fn::GetAtt": [ "ConstructHubMonitoringWebCanaryHomePageHttpGetFunctionF27ADDC8", "Arn", ], }, "Principal": "events.amazonaws.com", "SourceArn": { "Fn::GetAtt": [ "ConstructHubMonitoringWebCanaryHomePageRuleE14F9F4E", "Arn", ], }, }, "Type": "AWS::Lambda::Permission", }, "ConstructHubMonitoringWebCanaryHomePageRuleE14F9F4E": { "Properties": { "ScheduleExpression": "rate(1 minute)", "State": "ENABLED", "Targets": [ { "Arn": { "Fn::GetAtt": [ "ConstructHubMonitoringWebCanaryHomePageHttpGetFunctionF27ADDC8", "Arn", ], }, "Id": "Target0", }, ], }, "Type": "AWS::Events::Rule", }, "ConstructHubOrchestration39161A46": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubOrchestrationRoleDefaultPolicyEACD181F", "ConstructHubOrchestrationRoleF4CF6987", "ConstructHubVPCIGW935F4C28", ], "Properties": { "DefinitionString": { "Fn::Join": [ "", [ "{"StartAt":"Track Execution Infos","States":{"Track Execution Infos":{"Type":"Pass","ResultPath":"$.$TaskExecution","InputPath":"$$.Execution","Parameters":{"Id.$":"$.Id","Name.$":"$.Name","RoleArn.$":"$.RoleArn","StartTime.$":"$.StartTime"},"Next":"Prepare doc-gen ECS Command"},"Prepare doc-gen ECS Command":{"Type":"Pass","ResultPath":"$.docGen","Parameters":{"command.$":"States.Array(States.JsonToString($))"},"Next":"Generate docs"},"Generate docs":{"Next":"Check whether catalog needs udpating","Retry":[{"ErrorEquals":["jsii-docgen.NoSpaceLeftOnDevice"],"MaxAttempts":0},{"ErrorEquals":["ECS.AmazonECSException","ECS.InvalidParameterException","jsii-docgen.NpmError.E429","jsii-codgen.NpmError.EPROTO"],"IntervalSeconds":60,"MaxAttempts":45,"BackoffRate":1.1},{"ErrorEquals":["jsii-docgen.NpmError.ETARGET"],"IntervalSeconds":300,"MaxAttempts":3,"BackoffRate":2},{"ErrorEquals":["States.Timeout"],"MaxAttempts":5},{"ErrorEquals":["States.ALL"],"MaxAttempts":3}],"Catch":[{"ErrorEquals":["UnprocessablePackageError"],"Next":"Ignore"},{"ErrorEquals":["States.Timeout"],"ResultPath":"$.error","Next":"Send to Dead Letter Queue"},{"ErrorEquals":["ECS.AmazonECSException","ECS.InvalidParameterException"],"ResultPath":"$.error","Next":"Send to Dead Letter Queue"},{"ErrorEquals":["States.TaskFailed"],"ResultPath":"$.error","Next":"Send to Dead Letter Queue"},{"ErrorEquals":["States.ALL"],"ResultPath":"$.error","Next":"Send to Dead Letter Queue"}],"Type":"Task","TimeoutSeconds":7200,"HeartbeatSeconds":600,"InputPath":"$.docGen.command","ResultPath":"$.docGenOutput","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::ecs:runTask.waitForTaskToken","Parameters":{"Cluster":"", { "Fn::GetAtt": [ "ConstructHubOrchestrationCluster3D6F0081", "Arn", ], }, "","TaskDefinition":"devConstructHubOrchestrationTransliteratorTaskDefinitionBB251CCC","NetworkConfiguration":{"AwsvpcConfiguration":{"Subnets":["", { "Ref": "ConstructHubVPCIsolatedSubnet1SubnetEA28FD1A", }, "","", { "Ref": "ConstructHubVPCIsolatedSubnet2Subnet483D4302", }, ""],"SecurityGroups":["", { "Fn::GetAtt": [ "ConstructHubOrchestrationGeneratedocsSecurityGroupC584DAC2", "GroupId", ], }, ""]}},"Overrides":{"ContainerOverrides":[{"Name":"Resource","Command.$":"$","Environment":[{"Name":"SFN_TASK_TOKEN","Value.$":"$$.Task.Token"},{"Name":"RUN_LSOF_ON_HEARTBEAT","Value":""}]}]},"LaunchType":"FARGATE","PlatformVersion":"1.4.0"}},"Check whether catalog needs udpating":{"Next":"Is catalog update needed?","Retry":[{"ErrorEquals":["Lambda.ServiceException","Lambda.AWSLambdaException","Lambda.SdkClientException"],"IntervalSeconds":2,"MaxAttempts":6,"BackoffRate":2},{"ErrorEquals":["Lambda.TooManyRequestsException","Lambda.Unknown"],"IntervalSeconds":60,"MaxAttempts":30,"BackoffRate":1.1}],"Catch":[{"ErrorEquals":["Lambda.TooManyRequestsException","Lambda.Unknown"],"ResultPath":"$.error","Next":"Send to Dead Letter Queue"},{"ErrorEquals":["States.TaskFailed"],"ResultPath":"$.error","Next":"Send to Dead Letter Queue"},{"ErrorEquals":["States.ALL"],"ResultPath":"$.error","Next":"Send to Dead Letter Queue"}],"Type":"Task","ResultPath":"$.catalogNeedsUpdating","Resource":"", { "Fn::GetAtt": [ "ConstructHubOrchestrationNeedsCatalogUpdate5D7370DC", "Arn", ], }, ""},"Is catalog update needed?":{"Type":"Choice","Choices":[{"Variable":"$.catalogNeedsUpdating","BooleanEquals":true,"Next":"Add to catalog.json"}],"Default":"Done"},"Done":{"Type":"Succeed"},"Add to catalog.json":{"End":true,"Retry":[{"ErrorEquals":["Lambda.ServiceException","Lambda.AWSLambdaException","Lambda.SdkClientException"],"IntervalSeconds":2,"MaxAttempts":6,"BackoffRate":2},{"ErrorEquals":["Lambda.TooManyRequestsException"],"IntervalSeconds":60,"MaxAttempts":30,"BackoffRate":1.1}],"Catch":[{"ErrorEquals":["Lambda.TooManyRequestsException"],"ResultPath":"$.error","Next":"Send to Dead Letter Queue"},{"ErrorEquals":["States.TaskFailed"],"ResultPath":"$.error","Next":"Send to Dead Letter Queue"},{"ErrorEquals":["States.ALL"],"ResultPath":"$.error","Next":"Send to Dead Letter Queue"}],"Type":"Task","ResultPath":"$.catalogBuilderOutput","ResultSelector":{"ETag.$":"$.Payload.ETag","VersionId.$":"$.Payload.VersionId"},"Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::lambda:invoke","Parameters":{"FunctionName":"", { "Fn::GetAtt": [ "ConstructHubOrchestrationCatalogBuilder7C964951", "Arn", ], }, "","Payload.$":"$"}},"Send to Dead Letter Queue":{"Next":"Sent to DLQ","Type":"Task","ResultPath":null,"Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::sqs:sendMessage","Parameters":{"QueueUrl":"", { "Ref": "ConstructHubOrchestrationDLQ9C6D9BD4", }, "","MessageBody.$":"$"}},"Sent to DLQ":{"Type":"Succeed"},"Ignore":{"Type":"Pass","End":true}},"TimeoutSeconds":86400}", ], ], }, "RoleArn": { "Fn::GetAtt": [ "ConstructHubOrchestrationRoleF4CF6987", "Arn", ], }, "StateMachineName": "dev.ConstructHub.Orchestration", "TracingConfiguration": { "Enabled": true, }, }, "Type": "AWS::StepFunctions::StateMachine", "UpdateReplacePolicy": "Delete", }, "ConstructHubOrchestrationCatalogBuilder7C964951": { "DependsOn": [ "ConstructHubOrchestrationCatalogBuilderServiceRoleDefaultPolicyDA5D5AA5", "ConstructHubOrchestrationCatalogBuilderServiceRole851C750C", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "12099a1169774f05a22c04fda0e6048362355cada589112c092c6cb985dd9a50.zip", }, "Description": { "Fn::Join": [ "", [ "Creates the catalog.json object in ", { "Ref": "ConstructHubPackageDataDC5EF35E", }, ], ], }, "Environment": { "Variables": { "AWS_EMF_ENVIRONMENT": "Local", "BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "DENY_LIST_BUCKET_NAME": { "Ref": "ConstructHubDenyListBucket1B3C2C2E", }, "DENY_LIST_OBJECT_KEY": "deny-list.json", "FEED_BUILDER_FUNCTION_NAME": { "Ref": "ConstructHubFeedBuilderReleaseNotesUpdateFeedBB0BA91D", }, }, }, "Handler": "index.handler", "MemorySize": 10240, "ReservedConcurrentExecutions": 1, "Role": { "Fn::GetAtt": [ "ConstructHubOrchestrationCatalogBuilderServiceRole851C750C", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 900, "TracingConfig": { "Mode": "PassThrough", }, }, "Type": "AWS::Lambda::Function", }, "ConstructHubOrchestrationCatalogBuilderLogRetention04ED6996": { "Properties": { "LogGroupName": { "Fn::Join": [ "", [ "/aws/lambda/", { "Ref": "ConstructHubOrchestrationCatalogBuilder7C964951", }, ], ], }, "RetentionInDays": 7, "ServiceToken": { "Fn::GetAtt": [ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "Arn", ], }, }, "Type": "Custom::LogRetention", }, "ConstructHubOrchestrationCatalogBuilderServiceRole851C750C": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubOrchestrationCatalogBuilderServiceRoleDefaultPolicyDA5D5AA5": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", ], "Effect": "Allow", "Resource": "*", }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":lambda:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":function:*", ], ], }, }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubFeedBuilderReleaseNotesUpdateFeedBB0BA91D", "Arn", ], }, }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, "/*", ], ], }, ], }, { "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": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubOrchestrationCatalogBuilderServiceRoleDefaultPolicyDA5D5AA5", "Roles": [ { "Ref": "ConstructHubOrchestrationCatalogBuilderServiceRole851C750C", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubOrchestrationCatalogBuilderShrinkingCatalogAlarm48329E25": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The number of packages registered in the catalog.json object has shrunk by more than 5 elements. There might be a mass extinction event going on. This should be investigated as soon as possible. Catalog.json: /s3/object/", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "?prefix=catalog.json Catalog Builder: /lambda/home#/functions/", { "Ref": "ConstructHubOrchestrationCatalogBuilder7C964951", }, " RUNBOOK: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md", ], ], }, "AlarmName": "dev/ConstructHub/Orchestration/CatalogBuilder/ShrinkingCatalog", "ComparisonOperator": "LessThanThreshold", "EvaluationPeriods": 1, "Metrics": [ { "Expression": "DIFF(FILL(m1, REPEAT))", "Id": "expr_1", }, { "Id": "m1", "MetricStat": { "Metric": { "MetricName": "RegisteredPackages", "Namespace": "ConstructHub/CatalogBuilder", }, "Period": 900, "Stat": "Maximum", }, "ReturnData": false, }, ], "Threshold": -5, }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubOrchestrationCluster3D6F0081": { "Properties": { "ClusterSettings": [ { "Name": "containerInsights", "Value": "enabled", }, ], }, "Type": "AWS::ECS::Cluster", }, "ConstructHubOrchestrationCluster4C9C8AA6": { "Properties": { "CapacityProviders": [ "FARGATE", "FARGATE_SPOT", ], "Cluster": { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, "DefaultCapacityProviderStrategy": [], }, "Type": "AWS::ECS::ClusterCapacityProviderAssociations", }, "ConstructHubOrchestrationClusterMonitorB0D4B645": { "DependsOn": [ "ConstructHubOrchestrationClusterMonitorServiceRoleDefaultPolicy258B6050", "ConstructHubOrchestrationClusterMonitorServiceRoleA4055F89", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "05b335ff79de21a14711f32e1d2421b0e2b3dd9701ccc31b36c17cfd256643d0.zip", }, "Description": { "Fn::Join": [ "", [ "[dev/ConstructHub/Orchestration/Cluster/Monitor] Monitors tasks on the ECS cluster ", { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, ], ], }, "Environment": { "Variables": { "CLUSTER_NAME": { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, "TIMEOUT_MILLIS": "7800000", }, }, "Handler": "index.handler", "ReservedConcurrentExecutions": 1, "Role": { "Fn::GetAtt": [ "ConstructHubOrchestrationClusterMonitorServiceRoleA4055F89", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 900, }, "Type": "AWS::Lambda::Function", }, "ConstructHubOrchestrationClusterMonitorSchedule4950645D": { "Properties": { "Description": "Periodically runs the ECS Task Monitor (dev/ConstructHub/Orchestration/Cluster/Monitor)", "ScheduleExpression": "rate(15 minutes)", "State": "ENABLED", "Targets": [ { "Arn": { "Fn::GetAtt": [ "ConstructHubOrchestrationClusterMonitorB0D4B645", "Arn", ], }, "Id": "Target0", }, ], }, "Type": "AWS::Events::Rule", }, "ConstructHubOrchestrationClusterMonitorScheduleAllowEventRuledevConstructHubOrchestrationClusterMonitor4990E760DBA143C5": { "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { "Fn::GetAtt": [ "ConstructHubOrchestrationClusterMonitorB0D4B645", "Arn", ], }, "Principal": "events.amazonaws.com", "SourceArn": { "Fn::GetAtt": [ "ConstructHubOrchestrationClusterMonitorSchedule4950645D", "Arn", ], }, }, "Type": "AWS::Lambda::Permission", }, "ConstructHubOrchestrationClusterMonitorServiceRoleA4055F89": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubOrchestrationClusterMonitorServiceRoleDefaultPolicy258B6050": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "ecs:ListTasks", "Condition": { "ArnEquals": { "ecs:cluster": { "Fn::GetAtt": [ "ConstructHubOrchestrationCluster3D6F0081", "Arn", ], }, }, }, "Effect": "Allow", "Resource": "*", }, { "Action": [ "ecs:DescribeTasks", "ecs:StopTask", ], "Condition": { "ArnEquals": { "ecs:cluster": { "Fn::GetAtt": [ "ConstructHubOrchestrationCluster3D6F0081", "Arn", ], }, }, }, "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":ecs:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":task/", { "Ref": "ConstructHubOrchestrationCluster3D6F0081", }, "/*", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubOrchestrationClusterMonitorServiceRoleDefaultPolicy258B6050", "Roles": [ { "Ref": "ConstructHubOrchestrationClusterMonitorServiceRoleA4055F89", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubOrchestrationDLQ9C6D9BD4": { "DeletionPolicy": "Delete", "Properties": { "KmsMasterKeyId": "alias/aws/sqs", "MessageRetentionPeriod": 1209600, "VisibilityTimeout": 900, }, "Type": "AWS::SQS::Queue", "UpdateReplacePolicy": "Delete", }, "ConstructHubOrchestrationDLQAlarm85EE7509": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "Backend orchestration dead-letter queue is not empty. RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to queue: /sqs/v2/home#/queues/https%3A%2F%2Fsqs.", { "Ref": "AWS::Region", }, ".amazonaws.com%2F", { "Ref": "AWS::AccountId", }, "%2F", { "Fn::GetAtt": [ "ConstructHubOrchestrationDLQ9C6D9BD4", "QueueName", ], }, " Warning: State Machines executions that sent messages to the DLQ will not show as "failed".", ], ], }, "AlarmName": "dev/ConstructHub/Orchestration/DLQ/NotEmpty", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "EvaluationPeriods": 1, "Metrics": [ { "Expression": "m1 + m2", "Id": "expr_1", "Label": "Dead-Letter Queue not empty", }, { "Id": "m1", "MetricStat": { "Metric": { "Dimensions": [ { "Name": "QueueName", "Value": { "Fn::GetAtt": [ "ConstructHubOrchestrationDLQ9C6D9BD4", "QueueName", ], }, }, ], "MetricName": "ApproximateNumberOfMessagesVisible", "Namespace": "AWS/SQS", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, { "Id": "m2", "MetricStat": { "Metric": { "Dimensions": [ { "Name": "QueueName", "Value": { "Fn::GetAtt": [ "ConstructHubOrchestrationDLQ9C6D9BD4", "QueueName", ], }, }, ], "MetricName": "ApproximateNumberOfMessagesNotVisible", "Namespace": "AWS/SQS", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, ], "Threshold": 1, }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubOrchestrationGeneratedocsSecurityGroupC584DAC2": { "Properties": { "GroupDescription": "dev/ConstructHub/Orchestration/Generate docs/SecurityGroup", "SecurityGroupEgress": [ { "CidrIp": "0.0.0.0/0", "Description": "Allow all outbound traffic by default", "IpProtocol": "-1", }, ], "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::SecurityGroup", }, "ConstructHubOrchestrationNeedsCatalogUpdate5D7370DC": { "DependsOn": [ "ConstructHubOrchestrationNeedsCatalogUpdateServiceRoleDefaultPolicy4B4DEDD9", "ConstructHubOrchestrationNeedsCatalogUpdateServiceRoleE6BF31C3", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "6d697d5dcd7fed2213041c245c0e615b20d1f611aae1a2c2676f7e7b9a8a3c73.zip", }, "Description": "[ConstructHub/Orchestration/NeedsCatalogUpdate] Determines whether a package version requires a catalog update", "Environment": { "Variables": { "CATALOG_BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "CATALOG_OBJECT_KEY": "catalog.json", }, }, "Handler": "index.handler", "MemorySize": 1024, "Role": { "Fn::GetAtt": [ "ConstructHubOrchestrationNeedsCatalogUpdateServiceRoleE6BF31C3", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 60, }, "Type": "AWS::Lambda::Function", }, "ConstructHubOrchestrationNeedsCatalogUpdateServiceRoleDefaultPolicy4B4DEDD9": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubOrchestrationNeedsCatalogUpdateServiceRoleDefaultPolicy4B4DEDD9", "Roles": [ { "Ref": "ConstructHubOrchestrationNeedsCatalogUpdateServiceRoleE6BF31C3", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubOrchestrationNeedsCatalogUpdateServiceRoleE6BF31C3": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubOrchestrationOrchestrationFailed5AF50838": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "Backend orchestration failed! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to state machine: /states/home#/statemachines/view/", { "Ref": "ConstructHubOrchestration39161A46", }, " Warning: messages that resulted in a failed exectuion will NOT be in the DLQ!", ], ], }, "AlarmName": "dev/ConstructHub/Orchestration/Resource/ExecutionsFailed", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "Dimensions": [ { "Name": "StateMachineArn", "Value": { "Ref": "ConstructHubOrchestration39161A46", }, }, ], "EvaluationPeriods": 1, "MetricName": "ExecutionsFailed", "Namespace": "AWS/States", "Period": 300, "Statistic": "Sum", "Threshold": 1, }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubOrchestrationRedrive8DDBA67E": { "DependsOn": [ "ConstructHubOrchestrationRedriveServiceRoleDefaultPolicyC018F436", "ConstructHubOrchestrationRedriveServiceRoleB84EFF33", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "4e47da675368a0c6c866de77c8b95f47b6bcc15439277d5dd46ad17c8f497811.zip", }, "Description": "[ConstructHub/Redrive] Manually redrives all messages from the backend dead letter queue", "Environment": { "Variables": { "QUEUE_URL": { "Ref": "ConstructHubOrchestrationDLQ9C6D9BD4", }, "STATE_MACHINE_ARN": { "Ref": "ConstructHubOrchestration39161A46", }, }, }, "Handler": "index.handler", "MemorySize": 1024, "Role": { "Fn::GetAtt": [ "ConstructHubOrchestrationRedriveServiceRoleB84EFF33", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 900, "TracingConfig": { "Mode": "Active", }, }, "Type": "AWS::Lambda::Function", }, "ConstructHubOrchestrationRedriveServiceRoleB84EFF33": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubOrchestrationRedriveServiceRoleDefaultPolicyC018F436": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", ], "Effect": "Allow", "Resource": "*", }, { "Action": "states:StartExecution", "Effect": "Allow", "Resource": { "Ref": "ConstructHubOrchestration39161A46", }, }, { "Action": [ "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility", "sqs:GetQueueUrl", "sqs:DeleteMessage", "sqs:GetQueueAttributes", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubOrchestrationDLQ9C6D9BD4", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubOrchestrationRedriveServiceRoleDefaultPolicyC018F436", "Roles": [ { "Ref": "ConstructHubOrchestrationRedriveServiceRoleB84EFF33", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubOrchestrationRegenerateAllDocumentationE9FAB254": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubOrchestrationRegenerateAllDocumentationRoleDefaultPolicy2F4FBD86", "ConstructHubOrchestrationRegenerateAllDocumentationRole1C7D3B5F", ], "Properties": { "DefinitionString": { "Fn::Join": [ "", [ "{"StartAt":"Get prefix page","States":{"Get prefix page":{"Type":"Choice","Choices":[{"Variable":"$.response.NextContinuationToken","IsPresent":true,"Next":"Next prefixes page"}],"Default":"First prefix page"},"Has more prefixes?":{"Type":"Choice","Choices":[{"Variable":"$.response.NextContinuationToken","IsPresent":true,"Next":"Get prefix page"}],"Default":"Done"},"For each prefix":{"Type":"Map","ResultPath":null,"Next":"Has more prefixes?","Iterator":{"StartAt":"Is this a @scope-- prefix?","States":{"Is this a @scope-- prefix?":{"Type":"Choice","Choices":[{"Variable":"$.Prefix","StringMatches":"data/@*","Next":"Get @scope page"}],"Default":"Process unscoped package"},"Process unscoped package":{"End":true,"Retry":[{"ErrorEquals":["StepFunctions.ExecutionLimitExceeded"]}],"Type":"Task","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::states:startExecution.sync:2","Parameters":{"Input":{"Prefix.$":"$.Prefix","AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$":"$$.Execution.Id"},"StateMachineArn":"", { "Ref": "ConstructHubOrchestrationRegenerateAllDocumentationPerPackage9CF0FFB7", }, ""}},"Get @scope page":{"Type":"Choice","Choices":[{"Variable":"$.response.NextContinuationToken","IsPresent":true,"Next":"Next @scope page"}],"Default":"First @scope page"},"Has more packages?":{"Type":"Choice","Choices":[{"Variable":"$.response.NextContinuationToken","IsPresent":true,"Next":"Get @scope page"}],"Default":"All Done"},"For each @scope--pkg":{"Type":"Map","ResultPath":null,"Next":"Has more packages?","Iterator":{"StartAt":"Process scoped package","States":{"Process scoped package":{"End":true,"Retry":[{"ErrorEquals":["StepFunctions.ExecutionLimitExceeded"]}],"Type":"Task","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::states:startExecution.sync:2","Parameters":{"Input":{"Prefix.$":"$.Prefix","AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$":"$$.Execution.Id"},"StateMachineArn":"", { "Ref": "ConstructHubOrchestrationRegenerateAllDocumentationPerPackage9CF0FFB7", }, ""}}}},"ItemsPath":"$.response.CommonPrefixes"},"First @scope page":{"Next":"For each @scope--pkg","Retry":[{"ErrorEquals":["S3.SdkClientException"]}],"Type":"Task","ResultPath":"$.response","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:s3:listObjectsV2","Parameters":{"Bucket":"", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "","Delimiter":"/","Prefix.$":"$.Prefix"}},"Next @scope page":{"Next":"For each @scope--pkg","Retry":[{"ErrorEquals":["S3.SdkClientException"]}],"Type":"Task","ResultPath":"$.response","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:s3:listObjectsV2","Parameters":{"Bucket":"", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "","ContinuationToken.$":"$.response.NextContinuationToken","Delimiter":"/","Prefix.$":"$.Prefix"}},"All Done":{"Type":"Succeed"}}},"ItemsPath":"$.response.CommonPrefixes"},"First prefix page":{"Next":"For each prefix","Retry":[{"ErrorEquals":["S3.SdkClientException"]}],"Type":"Task","ResultPath":"$.response","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:s3:listObjectsV2","Parameters":{"Bucket":"", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "","Delimiter":"/","Prefix":"data/"}},"Next prefixes page":{"Next":"For each prefix","Retry":[{"ErrorEquals":["S3.SdkClientException"]}],"Type":"Task","ResultPath":"$.response","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:s3:listObjectsV2","Parameters":{"Bucket":"", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "","ContinuationToken.$":"$.response.NextContinuationToken","Delimiter":"/","Prefix":"data/"}},"Done":{"Type":"Succeed"}},"TimeoutSeconds":14400}", ], ], }, "RoleArn": { "Fn::GetAtt": [ "ConstructHubOrchestrationRegenerateAllDocumentationRole1C7D3B5F", "Arn", ], }, "StateMachineName": "dev.ConstructHub.Orchestration.RegenerateAllDocumentation", "TracingConfiguration": { "Enabled": true, }, }, "Type": "AWS::StepFunctions::StateMachine", "UpdateReplacePolicy": "Delete", }, "ConstructHubOrchestrationRegenerateAllDocumentationPerPackage9CF0FFB7": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubOrchestrationRegenerateAllDocumentationPerPackageRoleDefaultPolicy001A4726", "ConstructHubOrchestrationRegenerateAllDocumentationPerPackageRoleD7CCFA73", ], "Properties": { "DefinitionString": { "Fn::Join": [ "", [ "{"StartAt":"Get package versions page","States":{"Get package versions page":{"Type":"Choice","Choices":[{"Variable":"$.response.NextContinuationToken","IsPresent":true,"Next":"Next versions page"}],"Default":"First versions page"},"Has more versions?":{"Type":"Choice","Choices":[{"Variable":"$.response.NextContinuationToken","IsPresent":true,"Next":"Get package versions page"}],"Default":"Success"},"For each key prefix":{"Type":"Map","ResultPath":null,"Next":"Has more versions?","Iterator":{"StartAt":"Start Orchestration Workflow","States":{"Start Orchestration Workflow":{"End":true,"Retry":[{"ErrorEquals":["StepFunctions.ExecutionLimitExceeded"]}],"Type":"Task","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::states:startExecution","Parameters":{"Input":{"bucket":"", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "","assembly":{"key.$":"States.Format('{}assembly.json', $.Prefix)"},"metadata":{"key.$":"States.Format('{}metadata.json', $.Prefix)"},"package":{"key.$":"States.Format('{}package.tgz', $.Prefix)"},"AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$":"$$.Execution.Id"},"StateMachineArn":"", { "Ref": "ConstructHubOrchestration39161A46", }, ""}}}},"ItemsPath":"$.response.CommonPrefixes"},"First versions page":{"Next":"For each key prefix","Retry":[{"ErrorEquals":["S3.SdkClientException"]}],"Type":"Task","ResultPath":"$.response","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:s3:listObjectsV2","Parameters":{"Bucket":"", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "","Delimiter":"/","Prefix.$":"$.Prefix"}},"Next versions page":{"Next":"For each key prefix","Retry":[{"ErrorEquals":["S3.SdkClientException"]}],"Type":"Task","ResultPath":"$.response","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:s3:listObjectsV2","Parameters":{"Bucket":"", { "Ref": "ConstructHubPackageDataDC5EF35E", }, "","ContinuationToken.$":"$.response.NextContinuationToken","Delimiter":"/","Prefix.$":"$.Prefix"}},"Success":{"Type":"Succeed"}},"TimeoutSeconds":3600}", ], ], }, "RoleArn": { "Fn::GetAtt": [ "ConstructHubOrchestrationRegenerateAllDocumentationPerPackageRoleD7CCFA73", "Arn", ], }, "TracingConfiguration": { "Enabled": true, }, }, "Type": "AWS::StepFunctions::StateMachine", "UpdateReplacePolicy": "Delete", }, "ConstructHubOrchestrationRegenerateAllDocumentationPerPackageRoleD7CCFA73": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": { "Fn::FindInMap": [ "ServiceprincipalMap", { "Ref": "AWS::Region", }, "states", ], }, }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::IAM::Role", }, "ConstructHubOrchestrationRegenerateAllDocumentationPerPackageRoleDefaultPolicy001A4726": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", "xray:GetSamplingRules", "xray:GetSamplingTargets", ], "Effect": "Allow", "Resource": "*", }, { "Action": "s3:ListBucket", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, }, { "Action": "states:StartExecution", "Effect": "Allow", "Resource": { "Ref": "ConstructHubOrchestration39161A46", }, }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubOrchestrationRegenerateAllDocumentationPerPackageRoleDefaultPolicy001A4726", "Roles": [ { "Ref": "ConstructHubOrchestrationRegenerateAllDocumentationPerPackageRoleD7CCFA73", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubOrchestrationRegenerateAllDocumentationRole1C7D3B5F": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": { "Fn::FindInMap": [ "ServiceprincipalMap", { "Ref": "AWS::Region", }, "states", ], }, }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::IAM::Role", }, "ConstructHubOrchestrationRegenerateAllDocumentationRoleDefaultPolicy2F4FBD86": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", "xray:GetSamplingRules", "xray:GetSamplingTargets", ], "Effect": "Allow", "Resource": "*", }, { "Action": "s3:ListBucket", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, }, { "Action": "states:StartExecution", "Effect": "Allow", "Resource": { "Ref": "ConstructHubOrchestrationRegenerateAllDocumentationPerPackage9CF0FFB7", }, }, { "Action": [ "states:DescribeExecution", "states:StopExecution", ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":states:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":execution:", { "Fn::Select": [ 6, { "Fn::Split": [ ":", { "Ref": "ConstructHubOrchestrationRegenerateAllDocumentationPerPackage9CF0FFB7", }, ], }, ], }, "*", ], ], }, }, { "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule", ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":events:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":rule/StepFunctionsGetEventsForStepFunctionsExecutionRule", ], ], }, }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubOrchestrationRegenerateAllDocumentationRoleDefaultPolicy2F4FBD86", "Roles": [ { "Ref": "ConstructHubOrchestrationRegenerateAllDocumentationRole1C7D3B5F", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubOrchestrationRoleDefaultPolicyEACD181F": { "DependsOn": [ "ConstructHubVPCIGW935F4C28", ], "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", "xray:GetSamplingRules", "xray:GetSamplingTargets", ], "Effect": "Allow", "Resource": "*", }, { "Action": "ecs:RunTask", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Fn::Select": [ 1, { "Fn::Split": [ ":", { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinition45CDA566", }, ], }, ], }, ":", { "Fn::Select": [ 2, { "Fn::Split": [ ":", { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinition45CDA566", }, ], }, ], }, ":", { "Fn::Select": [ 3, { "Fn::Split": [ ":", { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinition45CDA566", }, ], }, ], }, ":", { "Fn::Select": [ 4, { "Fn::Split": [ ":", { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinition45CDA566", }, ], }, ], }, ":", { "Fn::Select": [ 0, { "Fn::Split": [ "/", { "Fn::Select": [ 5, { "Fn::Split": [ ":", { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinition45CDA566", }, ], }, ], }, ], }, ], }, "/", { "Fn::Select": [ 1, { "Fn::Split": [ "/", { "Fn::Select": [ 5, { "Fn::Split": [ ":", { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinition45CDA566", }, ], }, ], }, ], }, ], }, ], ], }, }, { "Action": [ "ecs:StopTask", "ecs:DescribeTasks", ], "Effect": "Allow", "Resource": "*", }, { "Action": "iam:PassRole", "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A", "Arn", ], }, { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorTaskDefinitionExecutionRoleB2DBF946", "Arn", ], }, ], }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubOrchestrationNeedsCatalogUpdate5D7370DC", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubOrchestrationNeedsCatalogUpdate5D7370DC", "Arn", ], }, ":*", ], ], }, ], }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubOrchestrationCatalogBuilder7C964951", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubOrchestrationCatalogBuilder7C964951", "Arn", ], }, ":*", ], ], }, ], }, { "Action": "sqs:SendMessage", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubOrchestrationDLQ9C6D9BD4", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubOrchestrationRoleDefaultPolicyEACD181F", "Roles": [ { "Ref": "ConstructHubOrchestrationRoleF4CF6987", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubOrchestrationRoleF4CF6987": { "DependsOn": [ "ConstructHubVPCIGW935F4C28", ], "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": { "Fn::FindInMap": [ "ServiceprincipalMap", { "Ref": "AWS::Region", }, "states", ], }, }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::IAM::Role", }, "ConstructHubOrchestrationTransliteratorLogGroupEE16EE8B": { "DeletionPolicy": "Retain", "Properties": { "RetentionInDays": 7, }, "Type": "AWS::Logs::LogGroup", "UpdateReplacePolicy": "Retain", }, "ConstructHubOrchestrationTransliteratorTaskDefinition45CDA566": { "Properties": { "ContainerDefinitions": [ { "Environment": [ { "Name": "HEADER_SPAN", "Value": "true", }, { "Name": "AWS_EMF_ENVIRONMENT", "Value": "Local", }, { "Name": "CODE_ARTIFACT_API_ENDPOINT", "Value": { "Fn::Select": [ 1, { "Fn::Split": [ ":", { "Fn::Select": [ 0, { "Fn::GetAtt": [ "ConstructHubVPCCodeArtifactAPI954CFDE1", "DnsEntries", ], }, ], }, ], }, ], }, }, { "Name": "CODE_ARTIFACT_DOMAIN_NAME", "Value": { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainName", ], }, }, { "Name": "CODE_ARTIFACT_DOMAIN_OWNER", "Value": { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "DomainOwner", ], }, }, { "Name": "CODE_ARTIFACT_REPOSITORY_ENDPOINT", "Value": { "Fn::GetAtt": [ "ConstructHubCodeArtifactGetEndpoint9A458FEF", "repositoryEndpoint", ], }, }, ], "Essential": true, "Image": { "Fn::Sub": "\${AWS::AccountId}.dkr.ecr.\${AWS::Region}.\${AWS::URLSuffix}/cdk-hnb659fds-container-assets-\${AWS::AccountId}-\${AWS::Region}:4b0ec6ddf1722a780ad48a43cfebe3455eaf00b8091e1dad3ccd95dcbbe23464", }, "LogConfiguration": { "LogDriver": "awslogs", "Options": { "awslogs-group": { "Ref": "ConstructHubOrchestrationTransliteratorLogGroupEE16EE8B", }, "awslogs-region": { "Ref": "AWS::Region", }, "awslogs-stream-prefix": "transliterator", }, }, "Name": "Resource", "Ulimits": [ { "HardLimit": 65535, "Name": "nofile", "SoftLimit": 16384, }, ], }, ], "Cpu": "4096", "ExecutionRoleArn": { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorTaskDefinitionExecutionRoleB2DBF946", "Arn", ], }, "Family": "devConstructHubOrchestrationTransliteratorTaskDefinitionBB251CCC", "Memory": "8192", "NetworkMode": "awsvpc", "RequiresCompatibilities": [ "FARGATE", ], "RuntimePlatform": { "CpuArchitecture": "ARM64", "OperatingSystemFamily": "LINUX", }, "TaskRoleArn": { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A", "Arn", ], }, }, "Type": "AWS::ECS::TaskDefinition", }, "ConstructHubOrchestrationTransliteratorTaskDefinitionExecutionRoleB2DBF946": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com", }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::IAM::Role", }, "ConstructHubOrchestrationTransliteratorTaskDefinitionExecutionRoleDefaultPolicyBDBF6E5D": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":ecr:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":repository/", { "Fn::Sub": "cdk-hnb659fds-container-assets-\${AWS::AccountId}-\${AWS::Region}", }, ], ], }, }, { "Action": "ecr:GetAuthorizationToken", "Effect": "Allow", "Resource": "*", }, { "Action": [ "logs:CreateLogStream", "logs:PutLogEvents", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorLogGroupEE16EE8B", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubOrchestrationTransliteratorTaskDefinitionExecutionRoleDefaultPolicyBDBF6E5D", "Roles": [ { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinitionExecutionRoleB2DBF946", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com", }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::IAM::Role", }, "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleDefaultPolicyE0EED0F8": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "states:SendTaskFailure", "states:SendTaskHeartbeat", "states:SendTaskSuccess", ], "Effect": "Allow", "Resource": "*", }, { "Action": "sts:GetServiceBearerToken", "Condition": { "StringEquals": { "sts:AWSServiceName": "codeartifact.amazonaws.com", }, }, "Effect": "Allow", "Resource": "*", }, { "Action": [ "codeartifact:GetAuthorizationToken", "codeartifact:GetRepositoryEndpoint", "codeartifact:ReadFromRepository", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubCodeArtifactDomainFC30B796", "Arn", ], }, { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "Arn", ], }, { "Fn::GetAtt": [ "ConstructHubCodeArtifactPublishing143CC07C", "Arn", ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/assembly.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/package.tgz", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/uninstallable", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/uninstallable", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/uninstallable", ], ], }, }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*.not-supported", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*.corruptassembly", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*.corruptassembly", ], ], }, }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*.corruptassembly", ], ], }, }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*.not-supported", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*.corruptassembly", ], ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleDefaultPolicyE0EED0F8", "Roles": [ { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleOverflowPolicy1698632DE": { "Properties": { "Description": "Part of the policies for dev/ConstructHub/Orchestration/Transliterator/TaskDefinition/TaskRole", "Path": "/", "PolicyDocument": { "Statement": [ { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*.corruptassembly", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*.corruptassembly", ], ], }, }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*.not-supported", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*.not-supported", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*.corruptassembly", ], ], }, }, ], "Version": "2012-10-17", }, "Roles": [ { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A", }, ], }, "Type": "AWS::IAM::ManagedPolicy", }, "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleOverflowPolicy2BC794386": { "Properties": { "Description": "Part of the policies for dev/ConstructHub/Orchestration/Transliterator/TaskDefinition/TaskRole", "Path": "/", "PolicyDocument": { "Statement": [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*.corruptassembly", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*.corruptassembly", ], ], }, }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*.not-supported", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*.corruptassembly", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*.corruptassembly", ], ], }, }, ], "Version": "2012-10-17", }, "Roles": [ { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A", }, ], }, "Type": "AWS::IAM::ManagedPolicy", }, "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleOverflowPolicy33EB40C3E": { "Properties": { "Description": "Part of the policies for dev/ConstructHub/Orchestration/Transliterator/TaskDefinition/TaskRole", "Path": "/", "PolicyDocument": { "Statement": [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*.corruptassembly", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*.corruptassembly", ], ], }, }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*.not-supported", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:DeleteObject*", "s3:PutObject", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionTagging", "s3:Abort*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*.corruptassembly", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*.corruptassembly", ], ], }, }, ], "Version": "2012-10-17", }, "Roles": [ { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A", }, ], }, "Type": "AWS::IAM::ManagedPolicy", }, "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleOverflowPolicy41E18C6C9": { "Properties": { "Description": "Part of the policies for dev/ConstructHub/Orchestration/Transliterator/TaskDefinition/TaskRole", "Path": "/", "PolicyDocument": { "Statement": [ { "Action": "s3:DeleteObject*", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*.corruptassembly", ], ], }, }, ], "Version": "2012-10-17", }, "Roles": [ { "Ref": "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A", }, ], }, "Type": "AWS::IAM::ManagedPolicy", }, "ConstructHubOverviewDashboardOverviewDashboardlambdaServiceQuota29721FC0": { "Properties": { "AlarmDescription": "Lambda concurrent execution exceeded 70% of SERVICE_QUOTA RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Request a service quota increase for lambda functions", "ComparisonOperator": "GreaterThanThreshold", "EvaluationPeriods": 5, "Metrics": [ { "Expression": "mLambdaUsage / mLambdaQuota * 100", "Id": "expr_1", "Label": "Concurrent executions quota usage %", }, { "Id": "mLambdaUsage", "MetricStat": { "Metric": { "MetricName": "ConcurrentExecutions", "Namespace": "AWS/Lambda", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, { "Expression": "SERVICE_QUOTA(mLambdaUsage)", "Id": "mLambdaQuota", "ReturnData": false, }, ], "Threshold": 70, "TreatMissingData": "missing", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubOverviewDashboardOverviewdashboardF4B7B78C": { "Properties": { "DashboardBody": { "Fn::Join": [ "", [ "{"widgets":[{"type":"metric","width":12,"height":8,"x":0,"y":0,"properties":{"view":"timeSeries","title":"Lambda concurrent execution quota","region":"", { "Ref": "AWS::Region", }, "","metrics":[[{"label":"Concurrent executions quota usage %","expression":"mLambdaUsage / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","ConcurrentExecutions",{"stat":"Maximum","visible":false,"id":"mLambdaUsage"}],[{"expression":"SERVICE_QUOTA(mLambdaUsage)","visible":false,"id":"mLambdaQuota"}],[{"label":"PruneHandlerLambda quota usage %","expression":"m1 / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneHandler30B33551", }, "",{"label":"PruneHandlerLambda","stat":"Maximum","visible":false,"id":"m1"}],[{"expression":"SERVICE_QUOTA(mLambdaUsage)","visible":false,"id":"lambdaQuotaLimit"}],[{"label":"PruneQueueHandlerLambda quota usage %","expression":"m2 / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubDenyListPrunePruneQueueHandlerF7EB599B", }, "",{"label":"PruneQueueHandlerLambda","stat":"Maximum","visible":false,"id":"m2"}],[{"label":"updateFeedFunction quota usage %","expression":"m3 / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubFeedBuilderReleaseNotesUpdateFeedBB0BA91D", }, "",{"label":"updateFeedFunction","stat":"Maximum","visible":false,"id":"m3"}],[{"label":"CatalogBuilderLambda quota usage %","expression":"m4 / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubOrchestrationCatalogBuilder7C964951", }, "",{"label":"CatalogBuilderLambda","stat":"Maximum","visible":false,"id":"m4"}],[{"label":"NeedsCatalogUpdateLambda quota usage %","expression":"m5 / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubOrchestrationNeedsCatalogUpdate5D7370DC", }, "",{"label":"NeedsCatalogUpdateLambda","stat":"Maximum","visible":false,"id":"m5"}],[{"label":"releaseNotesTrigger quota usage %","expression":"m6 / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubReleaseNotesReleaseNotesTriggerDD939C4F", }, "",{"label":"releaseNotesTrigger","stat":"Maximum","visible":false,"id":"m6"}],[{"label":"releaseNoteGenerateForPackage quota usage %","expression":"m7 / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubReleaseNotesGithubChangelogFetcher1616748C", }, "",{"label":"releaseNoteGenerateForPackage","stat":"Maximum","visible":false,"id":"m7"}],[{"label":"IngestionLambda quota usage %","expression":"m8 / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubIngestion407909CE", }, "",{"label":"IngestionLambda","stat":"Maximum","visible":false,"id":"m8"}],[{"label":"NpmJsLambda quota usage %","expression":"m9 / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubSourcesNpmJs15A77D2D", }, "",{"label":"NpmJsLambda","stat":"Maximum","visible":false,"id":"m9"}],[{"label":"NpmJs-StageAndNotifyLambda quota usage %","expression":"m10 / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubSourcesNpmJsStageAndNotify591C0CFA", }, "",{"label":"NpmJs-StageAndNotifyLambda","stat":"Maximum","visible":false,"id":"m10"}],[{"label":"CanaryResourceLambda quota usage %","expression":"m11 / mLambdaQuota * 100","yAxis":"right"}],["AWS/Lambda","Invocations","FunctionName","", { "Ref": "ConstructHubInventoryCanary63D899BC", }, "",{"label":"CanaryResourceLambda","stat":"Maximum","visible":false,"id":"m11"}]],"annotations":{"horizontal":[{"value":70,"yAxis":"right"}]},"yAxis":{"right":{"label":"Quota Percent","min":0,"max":100}}}},{"type":"custom","width":12,"height":8,"x":0,"y":8,"properties":{"endpoint":"", { "Fn::GetAtt": [ "SQSDLQStatsWidgetHandlerfc176846044f5e56baf2c71723501885366DDBD5", "Arn", ], }, "","params":{"description":"","title":"SQS DLQ","emptyQueueMessage":"There are no messages in the DLQs. This is normal and no action is required.","nonEmptyQueueMessage":"There are some message in the DLQ. The table below lists the queues with non-empty DLQs. Please check the DLQs and re-drive the messages. Once the messages are re-driven, check the queue again as the metrics takes time to updated.","queues":{"", { "Fn::GetAtt": [ "ConstructHubOrchestrationDLQ9C6D9BD4", "QueueName", ], }, "":{"name":"Orchestration DLQ","queueName":"", { "Fn::GetAtt": [ "ConstructHubOrchestrationDLQ9C6D9BD4", "QueueName", ], }, "","reDriveFunctionArn":"", { "Fn::GetAtt": [ "ConstructHubOrchestrationRedrive8DDBA67E", "Arn", ], }, ""},"", { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueDLQ56BF53F1", "QueueName", ], }, "":{"name":"ReleaseNotesWorkerDLQ","queueName":"", { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueDLQ56BF53F1", "QueueName", ], }, ""},"", { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "QueueName", ], }, "":{"name":"Ingestion DLQ","queueName":"", { "Fn::GetAtt": [ "ConstructHubIngestionDLQ3E96A5F2", "QueueName", ], }, ""},"", { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "QueueName", ], }, "":{"name":"NPM JS Stager DLQ","queueName":"", { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "QueueName", ], }, ""}}},"title":"SQS DLQ","updateOn":{"refresh":true,"resize":false,"timeRange":false}}},{"type":"metric","width":12,"height":8,"x":0,"y":16,"properties":{"view":"timeSeries","title":"CloudFront Metrics","region":"", { "Ref": "AWS::Region", }, "","metrics":[["AWS/CloudFront","Requests","DistributionId","", { "Ref": "ConstructHubWebAppDistribution1F181DC9", }, "","Region","Global",{"region":"us-east-1"}],["AWS/CloudFront","4xxErrorRate","DistributionId","", { "Ref": "ConstructHubWebAppDistribution1F181DC9", }, "","Region","Global",{"region":"us-east-1","yAxis":"right"}],["AWS/CloudFront","5xxErrorRate","DistributionId","", { "Ref": "ConstructHubWebAppDistribution1F181DC9", }, "","Region","Global",{"region":"us-east-1","yAxis":"right"}]],"yAxis":{"left":{"label":"Requests count"},"right":{"label":"Request Percent","min":0,"max":100}}}},{"type":"metric","width":12,"height":8,"x":0,"y":24,"properties":{"view":"timeSeries","title":"Construct Hub Inventory","region":"", { "Ref": "AWS::Region", }, "","metrics":[["ConstructHub/Inventory","PackageCount",{"period":900,"stat":"Maximum"}],["ConstructHub/Inventory","PackageMajorVersionCount",{"period":900,"stat":"Maximum"}]],"yAxis":{"left":{"label":"Package count"}}}}]}", ], ], }, "DashboardName": "construct-hub-backend-overview", }, "Type": "AWS::CloudWatch::Dashboard", }, "ConstructHubPackageDataDC5EF35E": { "DeletionPolicy": "Retain", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ { "ServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256", }, }, ], }, "LifecycleConfiguration": { "Rules": [ { "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 1, }, "Status": "Enabled", }, { "NoncurrentVersionTransitions": [ { "StorageClass": "STANDARD_IA", "TransitionInDays": 31, }, ], "Status": "Enabled", }, { "ExpiredObjectDeleteMarker": true, "NoncurrentVersionExpiration": { "NoncurrentDays": 90, }, "Status": "Enabled", }, { "NoncurrentVersionExpiration": { "NoncurrentDays": 7, }, "Prefix": "catalog.json", "Status": "Enabled", }, ], }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "VersioningConfiguration": { "Status": "Enabled", }, }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConstructHubPackageDataPolicy4615475A": { "Properties": { "Bucket": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, ], }, { "Action": "s3:GetObject", "Effect": "Allow", "Principal": { "CanonicalUser": { "Fn::GetAtt": [ "ConstructHubWebAppDistributionOrigin2S3OriginDA7E7FF4", "S3CanonicalUserId", ], }, }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubPackageStatsFailures833C3D9B": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The package stats function failed! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to Lambda function: /lambda/home#/functions/", { "Ref": "ConstructHubStats61DB07B1", }, ], ], }, "AlarmName": "dev/ConstructHub/PackageStats/Failures", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubStats61DB07B1", }, }, ], "EvaluationPeriods": 1, "MetricName": "Errors", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 1, "TreatMissingData": "missing", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubReleaseNotesChangeLogFetchQueue2D5BA633": { "DeletionPolicy": "Delete", "Properties": { "KmsMasterKeyId": "alias/aws/sqs", "QueueName": "ChangeLogFetchQueue", "VisibilityTimeout": 300, }, "Type": "AWS::SQS::Queue", "UpdateReplacePolicy": "Delete", }, "ConstructHubReleaseNotesGithubChangelogFetcher1616748C": { "DependsOn": [ "ConstructHubReleaseNotesGithubChangelogFetcherServiceRoleDefaultPolicy6C70D043", "ConstructHubReleaseNotesGithubChangelogFetcherServiceRoleCAE3656D", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "fc97ddb79a2960e01db508a6e559ab85cd86de0e21f472a7dd39eaf042f71692.zip", }, "Description": "ReleaseNotes generator", "Environment": { "Variables": { "BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "GITHUB_TOKEN": "{{resolve:secretsmanager:arn:aws:secretsmanager:us-east-2:111111111:secret:some-secret-1aa11a:SecretString:::}}", }, }, "Handler": "index.handler", "MemorySize": 1024, "Role": { "Fn::GetAtt": [ "ConstructHubReleaseNotesGithubChangelogFetcherServiceRoleCAE3656D", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 600, }, "Type": "AWS::Lambda::Function", }, "ConstructHubReleaseNotesGithubChangelogFetcherServiceRoleCAE3656D": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubReleaseNotesGithubChangelogFetcherServiceRoleDefaultPolicy6C70D043": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/package.tgz", ], ], }, ], }, { "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": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/release-notes.md", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubReleaseNotesGithubChangelogFetcherServiceRoleDefaultPolicy6C70D043", "Roles": [ { "Ref": "ConstructHubReleaseNotesGithubChangelogFetcherServiceRoleCAE3656D", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubReleaseNotesReleaseNoteTasksE000B7BD": { "DependsOn": [ "ConstructHubReleaseNotesReleaseNoteTasksServiceRoleDefaultPolicyC788504D", "ConstructHubReleaseNotesReleaseNoteTasksServiceRole662376CD", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "1505f4f4176a2fdc9f425dd9c186eae904c1fe8a5a8f677fe927481b2662e93c.zip", }, "Description": "ReleaseNotes get message from the worker queue", "Environment": { "Variables": { "GITHUB_TOKEN": "{{resolve:secretsmanager:arn:aws:secretsmanager:us-east-2:111111111:secret:some-secret-1aa11a:SecretString:::}}", "SQS_QUEUE_URL": { "Ref": "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueCACEC29F", }, "STEP_FUNCTION_ARN": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":states:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":stateMachine:dev.ConstructHub.ReleaseNotes", ], ], }, }, }, "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNoteTasksServiceRole662376CD", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 300, }, "Type": "AWS::Lambda::Function", }, "ConstructHubReleaseNotesReleaseNoteTasksServiceRole662376CD": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubReleaseNotesReleaseNoteTasksServiceRoleDefaultPolicyC788504D": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "states:ListExecutions", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":states:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":stateMachine:dev.ConstructHub.ReleaseNotes", ], ], }, }, { "Action": [ "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility", "sqs:GetQueueUrl", "sqs:DeleteMessage", "sqs:GetQueueAttributes", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueCACEC29F", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubReleaseNotesReleaseNoteTasksServiceRoleDefaultPolicyC788504D", "Roles": [ { "Ref": "ConstructHubReleaseNotesReleaseNoteTasksServiceRole662376CD", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueCACEC29F": { "DeletionPolicy": "Delete", "Properties": { "KmsMasterKeyId": "alias/aws/sqs", "RedrivePolicy": { "deadLetterTargetArn": { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueDLQ56BF53F1", "Arn", ], }, "maxReceiveCount": 10, }, "VisibilityTimeout": 300, }, "Type": "AWS::SQS::Queue", "UpdateReplacePolicy": "Delete", }, "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueDLQ56BF53F1": { "DeletionPolicy": "Delete", "Properties": { "KmsMasterKeyId": "alias/aws/sqs", "VisibilityTimeout": 300, }, "Type": "AWS::SQS::Queue", "UpdateReplacePolicy": "Delete", }, "ConstructHubReleaseNotesReleaseNotesGenerationFailure04ABD01D": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "Release notes generation step function is failing! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to the function: /states/home#/statemachines/view/", { "Ref": "ConstructHubReleaseNotesStateMachine8C711CC7", }, ], ], }, "AlarmName": "dev/ConstructHub/ReleaseNotes/StateMachine / Failure", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "Dimensions": [ { "Name": "StateMachineArn", "Value": { "Ref": "ConstructHubReleaseNotesStateMachine8C711CC7", }, }, ], "EvaluationPeriods": 2, "MetricName": "ExecutionsFailed", "Namespace": "AWS/States", "Period": 300, "Statistic": "Sum", "Threshold": 1, "TreatMissingData": "notBreaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubReleaseNotesReleaseNotesGithubratelimitE863B9F0": { "Properties": { "AlarmDescription": "Release notes generation is nearing the GitHub rate limit! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Consider either using GitHub application.", "AlarmName": "dev/ConstructHub/ReleaseNotes / Github Rate Limit", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "EvaluationPeriods": 2, "Metrics": [ { "Expression": "100 * rateLimitUsed / rateLimitLimit", "Id": "expr_1", "Label": "GHT Rate limit Percent Used", }, { "Id": "rateLimitUsed", "MetricStat": { "Metric": { "MetricName": "GhLimitsUsed", "Namespace": "ConstructHub/ReleaseNotes", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, { "Id": "rateLimitLimit", "MetricStat": { "Metric": { "MetricName": "GhLimitsLimit", "Namespace": "ConstructHub/ReleaseNotes", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, ], "Threshold": 80, "TreatMissingData": "notBreaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubReleaseNotesReleaseNotesInvalidGitHubCredentialsE84D7534": { "Properties": { "AlarmDescription": "Release notes generation is failing due to Invalid GitHub token RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md ", "AlarmName": "dev/ConstructHub/ReleaseNotes/ ReleaseNotes / Invalid GitHub credential", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "EvaluationPeriods": 2, "MetricName": "InvalidCredentials", "Namespace": "ConstructHub/ReleaseNotes", "Period": 300, "Statistic": "Maximum", "Threshold": 1, "TreatMissingData": "notBreaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubReleaseNotesReleaseNotesTriggerDD939C4F": { "DependsOn": [ "ConstructHubReleaseNotesReleaseNotesTriggerServiceRoleDefaultPolicyB1F7B1F5", "ConstructHubReleaseNotesReleaseNotesTriggerServiceRoleD0FDE2B6", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "152ed1efb770c99408b01bb7491d050c277122e0aac5a4d4221dd0c24d41f958.zip", }, "Description": "backend/release-notes/release-notes-trigger.lambda.ts", "Environment": { "Variables": { "SFN_ARN": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":states:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":stateMachine:dev.ConstructHub.ReleaseNotes", ], ], }, "WORKER_QUEUE_URL": { "Ref": "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueCACEC29F", }, }, }, "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesTriggerServiceRoleD0FDE2B6", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 60, }, "Type": "AWS::Lambda::Function", }, "ConstructHubReleaseNotesReleaseNotesTriggerFailureFB225A5D": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "Release notes generation trigger function is failing! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to the function: /lambda/home#/functions/", { "Ref": "ConstructHubReleaseNotesReleaseNotesTriggerDD939C4F", }, ], ], }, "AlarmName": "dev/ConstructHub/ReleaseNotes/ReleaseNotesTrigger / Failure", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubReleaseNotesReleaseNotesTriggerDD939C4F", }, }, ], "EvaluationPeriods": 2, "MetricName": "Errors", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 1, "TreatMissingData": "notBreaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubReleaseNotesReleaseNotesTriggerServiceRoleD0FDE2B6": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubReleaseNotesReleaseNotesTriggerServiceRoleDefaultPolicyB1F7B1F5": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "sqs:SendMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueCACEC29F", "Arn", ], }, }, { "Action": [ "states:ListExecutions", "states:StartExecution", ], "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":states:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":stateMachine:dev.ConstructHub.ReleaseNotes", ], ], }, }, { "Action": [ "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility", "sqs:GetQueueUrl", "sqs:DeleteMessage", "sqs:GetQueueAttributes", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubReleaseNotesChangeLogFetchQueue2D5BA633", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubReleaseNotesReleaseNotesTriggerServiceRoleDefaultPolicyB1F7B1F5", "Roles": [ { "Ref": "ConstructHubReleaseNotesReleaseNotesTriggerServiceRoleD0FDE2B6", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubReleaseNotesReleaseNotesTriggerSqsEventSourcedevConstructHubReleaseNotesChangeLogFetchQueue6AF228FC60E4FC60": { "Properties": { "EventSourceArn": { "Fn::GetAtt": [ "ConstructHubReleaseNotesChangeLogFetchQueue2D5BA633", "Arn", ], }, "FunctionName": { "Ref": "ConstructHubReleaseNotesReleaseNotesTriggerDD939C4F", }, }, "Type": "AWS::Lambda::EventSourceMapping", }, "ConstructHubReleaseNotesStateMachine8C711CC7": { "DeletionPolicy": "Delete", "DependsOn": [ "ConstructHubReleaseNotesStateMachineRoleDefaultPolicy425D1E83", "ConstructHubReleaseNotesStateMachineRole0322C9EF", ], "Properties": { "DefinitionString": { "Fn::Join": [ "", [ "{"StartAt":"check service quota and get tasks from worker queue","States":{"check service quota and get tasks from worker queue":{"Next":"with result","Retry":[{"ErrorEquals":["Lambda.ServiceException","Lambda.AWSLambdaException","Lambda.SdkClientException"],"IntervalSeconds":2,"MaxAttempts":6,"BackoffRate":2}],"Type":"Task","Resource":"", { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNoteTasksE000B7BD", "Arn", ], }, ""},"with result":{"Type":"Choice","Choices":[{"Variable":"$.waitUntil","IsPresent":true,"Next":"wait and update"},{"Variable":"$.error.MaxConcurrentExecutionError","IsPresent":true,"Next":"Stopping this execution since Max concurrent execution has reached"},{"Variable":"$.messages","IsPresent":true,"Next":"with each package"}],"Default":"updateFeedAfterProcessing"},"updateFeedAfterProcessing":{"Next":"all done","Retry":[{"ErrorEquals":["Lambda.ServiceException","Lambda.AWSLambdaException","Lambda.SdkClientException"],"IntervalSeconds":2,"MaxAttempts":6,"BackoffRate":2}],"Type":"Task","Comment":"Update the RSS/Atom feed after processing all the items in the queue","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::lambda:invoke","Parameters":{"FunctionName":"", { "Fn::GetAtt": [ "ConstructHubFeedBuilderReleaseNotesUpdateFeedBB0BA91D", "Arn", ], }, "","Payload.$":"$"}},"all done":{"Type":"Succeed"},"wait and update":{"Type":"Parallel","Next":"Continue as new","Branches":[{"StartAt":"wait till service quota replenishes","States":{"wait till service quota replenishes":{"Type":"Wait","TimestampPath":"$.waitUntil","End":true}}},{"StartAt":"updateFeedTaskWhenWaitingForGHRateLimit","States":{"updateFeedTaskWhenWaitingForGHRateLimit":{"End":true,"Retry":[{"ErrorEquals":["Lambda.ServiceException","Lambda.AWSLambdaException","Lambda.SdkClientException"],"IntervalSeconds":2,"MaxAttempts":6,"BackoffRate":2}],"Type":"Task","Comment":"Update the RSS/Atom feed","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::lambda:invoke","Parameters":{"FunctionName":"", { "Fn::GetAtt": [ "ConstructHubFeedBuilderReleaseNotesUpdateFeedBB0BA91D", "Arn", ], }, "","Payload.$":"$"}}}}]},"Continue as new":{"Next":"done","Retry":[{"ErrorEquals":["StepFunctions.ExecutionLimitExceeded"]}],"Type":"Task","ResultPath":null,"Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::states:startExecution","Parameters":{"Input":{"AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$":"$$.Execution.Id"},"StateMachineArn":"arn:", { "Ref": "AWS::Partition", }, ":states:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":stateMachine:dev.ConstructHub.ReleaseNotes"}},"with each package":{"Type":"Map","Comment":"Fetch release notes for each package","Next":"Continue as new","Iterator":{"StartAt":"Generate Release notes for a package","States":{"Generate Release notes for a package":{"Next":"With result","Retry":[{"ErrorEquals":["Lambda.ServiceException","Lambda.AWSLambdaException","Lambda.SdkClientException"],"IntervalSeconds":2,"MaxAttempts":6,"BackoffRate":2}],"Type":"Task","InputPath":"$.Body","ResultPath":"$.result","Resource":"", { "Fn::GetAtt": [ "ConstructHubReleaseNotesGithubChangelogFetcher1616748C", "Arn", ], }, ""},"With result":{"Type":"Choice","Choices":[{"Variable":"$.result.error","StringEquals":"RequestQuotaExhausted","Next":"Make the message visible again for next iteration"},{"Variable":"$.result.error","StringEquals":"InvalidCredentials","Next":"Send message to DLQ when credentials are invalid"}],"Default":"remove the message from SQS"},"remove the message from SQS":{"End":true,"Type":"Task","ResultPath":"$.cleanup","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:sqs:deleteMessage","Parameters":{"QueueUrl":"", { "Ref": "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueCACEC29F", }, "","ReceiptHandle.$":"$.ReceiptHandle"}},"Make the message visible again for next iteration":{"End":true,"Type":"Task","Comment":"Make the message visible again so next iteration will consume it","ResultPath":"$.errorHandler","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:sqs:changeMessageVisibility","Parameters":{"QueueUrl":"", { "Ref": "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueCACEC29F", }, "","ReceiptHandle.$":"$.ReceiptHandle","VisibilityTimeout":0}},"Send message to DLQ when credentials are invalid":{"Next":"remove the message from SQS after sending to DLQ","Type":"Task","Comment":"Github credentials passed is invalid. Retrying wont help. Moving to DLQ","ResultPath":"$.errorHandler","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:sqs:sendMessage","Parameters":{"QueueUrl":"", { "Ref": "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueDLQ56BF53F1", }, "","MessageBody.$":"States.JsonToString($.Body)"}},"remove the message from SQS after sending to DLQ":{"End":true,"Type":"Task","ResultPath":"$.errorHandler","Resource":"arn:", { "Ref": "AWS::Partition", }, ":states:::aws-sdk:sqs:deleteMessage","Parameters":{"QueueUrl":"", { "Ref": "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueCACEC29F", }, "","ReceiptHandle.$":"$.ReceiptHandle"}}}},"ItemsPath":"$.messages"},"done":{"Type":"Succeed","Comment":"New instance started"},"Stopping this execution since Max concurrent execution has reached":{"Type":"Succeed"}},"TimeoutSeconds":86400}", ], ], }, "RoleArn": { "Fn::GetAtt": [ "ConstructHubReleaseNotesStateMachineRole0322C9EF", "Arn", ], }, "StateMachineName": "dev.ConstructHub.ReleaseNotes", "TracingConfiguration": { "Enabled": true, }, }, "Type": "AWS::StepFunctions::StateMachine", "UpdateReplacePolicy": "Delete", }, "ConstructHubReleaseNotesStateMachineRole0322C9EF": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": { "Fn::FindInMap": [ "ServiceprincipalMap", { "Ref": "AWS::Region", }, "states", ], }, }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::IAM::Role", }, "ConstructHubReleaseNotesStateMachineRoleDefaultPolicy425D1E83": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", "xray:GetSamplingRules", "xray:GetSamplingTargets", ], "Effect": "Allow", "Resource": "*", }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNoteTasksE000B7BD", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNoteTasksE000B7BD", "Arn", ], }, ":*", ], ], }, ], }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubFeedBuilderReleaseNotesUpdateFeedBB0BA91D", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubFeedBuilderReleaseNotesUpdateFeedBB0BA91D", "Arn", ], }, ":*", ], ], }, ], }, { "Action": "states:StartExecution", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":states:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":stateMachine:dev.ConstructHub.ReleaseNotes", ], ], }, }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubReleaseNotesGithubChangelogFetcher1616748C", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubReleaseNotesGithubChangelogFetcher1616748C", "Arn", ], }, ":*", ], ], }, ], }, { "Action": "sqs:deleteMessage", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueCACEC29F", "Arn", ], }, }, { "Action": "sqs:changeMessageVisibility", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueCACEC29F", "Arn", ], }, }, { "Action": "sqs:sendMessage", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubReleaseNotesReleaseNotesFetchWorkerQueueDLQ56BF53F1", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubReleaseNotesStateMachineRoleDefaultPolicy425D1E83", "Roles": [ { "Ref": "ConstructHubReleaseNotesStateMachineRole0322C9EF", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubSourcesFailoverNpmJsStagingBucketF46C2C42": { "DeletionPolicy": "Retain", "Properties": { "LifecycleConfiguration": { "Rules": [ { "ExpirationInDays": 30, "Prefix": "staged/", "Status": "Enabled", }, ], }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "failover", "Value": "true", }, ], }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConstructHubSourcesFailoverNpmJsStagingBucketPolicy00182F29": { "Properties": { "Bucket": { "Ref": "ConstructHubSourcesFailoverNpmJsStagingBucketF46C2C42", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubSourcesFailoverNpmJsStagingBucketF46C2C42", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubSourcesFailoverNpmJsStagingBucketF46C2C42", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubSourcesNpmJs15A77D2D": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", "ConstructHubSourcesNpmJsServiceRoleDefaultPolicy65FBFA22", "ConstructHubSourcesNpmJsServiceRoleAC3F7AA6", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "baf3ff41959209ef2482c51571d559837377adbb137b2793856899da4f8f32b2.zip", }, "Description": "[dev/ConstructHub/Sources/NpmJs] Periodically query npmjs.com index for new packages", "Environment": { "Variables": { "AWS_EMF_ENVIRONMENT": "Local", "BUCKET_NAME": { "Ref": "ConstructHubSourcesNpmJsStagingBucketB286F0E6", }, "DENY_LIST_BUCKET_NAME": { "Ref": "ConstructHubDenyListBucket1B3C2C2E", }, "DENY_LIST_OBJECT_KEY": "deny-list.json", "FUNCTION_NAME": { "Ref": "ConstructHubSourcesNpmJsStageAndNotify591C0CFA", }, "LICENSE_LIST_BUCKET_NAME": { "Ref": "ConstructHubLicenseListBucket9334047F", }, "LICENSE_LIST_OBJECT_KEY": "allowed-licenses.json", }, }, "Handler": "index.handler", "MemorySize": 10024, "ReservedConcurrentExecutions": 1, "Role": { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsServiceRoleAC3F7AA6", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 300, "TracingConfig": { "Mode": "Active", }, }, "Type": "AWS::Lambda::Function", }, "ConstructHubSourcesNpmJsCanary5558FC45": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", "ConstructHubSourcesNpmJsCanaryServiceRoleDefaultPolicy630F813B", "ConstructHubSourcesNpmJsCanaryServiceRoleC4CBCDA2", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "a88f962022459e4ed8fb0b4f30ce7f8b863a4095c05c6b17cb42d59287948e4d.zip", }, "Description": "[dev/ConstructHub/Sources/NpmJs/PackageCanary] Monitors construct-hub-probe versions availability", "Environment": { "Variables": { "AWS_EMF_ENVIRONMENT": "Local", "CONSTRUCT_HUB_BASE_URL": { "Fn::Join": [ "", [ "https://", { "Fn::GetAtt": [ "ConstructHubWebAppDistribution1F181DC9", "DomainName", ], }, ], ], }, "PACKAGE_CANARY_BUCKET_NAME": { "Ref": "ConstructHubSourcesNpmJsStagingBucketB286F0E6", }, "PACKAGE_NAME": "construct-hub-probe", }, }, "Handler": "index.handler", "MemorySize": 10024, "Role": { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsCanaryServiceRoleC4CBCDA2", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 300, }, "Type": "AWS::Lambda::Function", }, "ConstructHubSourcesNpmJsCanaryAlarmBE2B479E": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", ], "Properties": { "AlarmDescription": "New versions of construct-hub-probe have been published over 5 minutes ago and are still not visible in construct hub Runbook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md", "AlarmName": "dev/ConstructHub/Sources/NpmJs/Canary/SLA-Breached", "ComparisonOperator": "GreaterThanThreshold", "EvaluationPeriods": 2, "Metrics": [ { "Expression": "IF(FILL(mLag, REPEAT) < 900, MAX([mDwell, mTTC]))", "Id": "expr_1", }, { "Id": "mDwell", "MetricStat": { "Metric": { "MetricName": "DwellTime", "Namespace": "ConstructHub/PackageCanary", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, { "Id": "mTTC", "MetricStat": { "Metric": { "MetricName": "TimeToCatalog", "Namespace": "ConstructHub/PackageCanary", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, { "Id": "mLag", "MetricStat": { "Metric": { "MetricName": "EstimatedNpmReplicaLag", "Namespace": "ConstructHub/PackageCanary", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, ], "Threshold": 300, "TreatMissingData": "notBreaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubSourcesNpmJsCanaryFailingE338711F": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", ], "Properties": { "AlarmName": "dev/ConstructHub/Sources/NpmJs/Canary/Failing", "ComparisonOperator": "GreaterThanThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubSourcesNpmJsCanary5558FC45", }, }, ], "EvaluationPeriods": 2, "MetricName": "Errors", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 0, "TreatMissingData": "breaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubSourcesNpmJsCanaryGatewayErrorsDAA2E45C": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", ], "Properties": { "AlarmDescription": "The NpmJs package canary has been encountering consistent HTTP gateway errors when contacting npmjs servers for an hour or more. This means the canary has been unable to evaluate SLA compliance for that much time. It is probable that nothing can be done except for waiting for npm servers to come back online, but the situation should be checked to make sure there is not another problem. Runbook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md", "AlarmName": "dev/ConstructHub/Sources/NpmJs/Canary/GatewayErrors", "ComparisonOperator": "GreaterThanThreshold", "EvaluationPeriods": 60, "MetricName": "HttpGatewayErrors", "Namespace": "ConstructHub/PackageCanary", "Period": 300, "Statistic": "Minimum", "Threshold": 0, "TreatMissingData": "breaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubSourcesNpmJsCanaryNotRunningFCFBD0E6": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", ], "Properties": { "AlarmName": "dev/ConstructHub/Sources/NpmJs/Canary/NotRunning", "ComparisonOperator": "LessThanThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubSourcesNpmJsCanary5558FC45", }, }, ], "EvaluationPeriods": 2, "MetricName": "Invocations", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 1, "TreatMissingData": "breaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubSourcesNpmJsCanaryNotRunningOrFailing62A8E2F6": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", ], "Properties": { "AlarmDescription": "The NpmJs package canary is not running or is failing. This prevents alarming when this instance of ConstructHub falls out of SLA for new package ingestion! Runbook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md", "AlarmName": "dev/ConstructHub/Sources/NpmJs/Canary/NotRunningOrFailing", "AlarmRule": { "Fn::Join": [ "", [ "(ALARM("", { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsCanaryFailingE338711F", "Arn", ], }, "") OR ALARM("", { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsCanaryNotRunningFCFBD0E6", "Arn", ], }, ""))", ], ], }, }, "Type": "AWS::CloudWatch::CompositeAlarm", }, "ConstructHubSourcesNpmJsCanarySchedule4D94219F": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", "ConstructHubSourcesNpmJsCanaryServiceRoleDefaultPolicy630F813B", ], "Properties": { "Description": "Scheduled executions of the NpmJS package canary", "ScheduleExpression": "rate(5 minutes)", "State": "ENABLED", "Targets": [ { "Arn": { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsCanary5558FC45", "Arn", ], }, "Id": "Target0", }, ], }, "Type": "AWS::Events::Rule", }, "ConstructHubSourcesNpmJsCanaryScheduleAllowEventRuledevConstructHubSourcesNpmJsCanaryC48E9D5AD1BB0C82": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", "ConstructHubSourcesNpmJsCanaryServiceRoleDefaultPolicy630F813B", ], "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsCanary5558FC45", "Arn", ], }, "Principal": "events.amazonaws.com", "SourceArn": { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsCanarySchedule4D94219F", "Arn", ], }, }, "Type": "AWS::Lambda::Permission", }, "ConstructHubSourcesNpmJsCanaryServiceRoleC4CBCDA2": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", ], "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubSourcesNpmJsCanaryServiceRoleDefaultPolicy630F813B": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", ], "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": [ "ConstructHubSourcesNpmJsStagingBucketB286F0E6", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsStagingBucketB286F0E6", "Arn", ], }, "/package-canary/*.state.json", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubSourcesNpmJsCanaryServiceRoleDefaultPolicy630F813B", "Roles": [ { "Ref": "ConstructHubSourcesNpmJsCanaryServiceRoleC4CBCDA2", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubSourcesNpmJsFollowerFailures86BCBA0D": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The NpmJs follower function failed! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to Lambda function: /lambda/home#/functions/", { "Ref": "ConstructHubSourcesNpmJs15A77D2D", }, ], ], }, "AlarmName": "dev/ConstructHub/Sources/NpmJs/Follower/Failures", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubSourcesNpmJs15A77D2D", }, }, ], "EvaluationPeriods": 3, "MetricName": "Errors", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 1, "TreatMissingData": "missing", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubSourcesNpmJsFollowerNoChanges2CB08C93": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The NpmJs follower function is not discovering any changes from CouchDB! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to Lambda function: /lambda/home#/functions/", { "Ref": "ConstructHubSourcesNpmJs15A77D2D", }, ], ], }, "AlarmName": "dev/ConstructHub/Sources/NpmJs/Follower/NoChanges", "ComparisonOperator": "LessThanThreshold", "EvaluationPeriods": 288, "MetricName": "ChangeCount", "Namespace": "ConstructHub/PackageSource/NpmJs/Follower", "Period": 300, "Statistic": "Sum", "Threshold": 1, "TreatMissingData": "breaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubSourcesNpmJsFollowerNotRunningCEAF0E1E": { "DependsOn": [ "ConstructHubSourcesNpmJsScheduleAllowEventRuledevConstructHubSourcesNpmJs94EFF1D850C1F076", "ConstructHubSourcesNpmJsSchedule34031870", ], "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The NpmJs follower function is not running! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to Lambda function: /lambda/home#/functions/", { "Ref": "ConstructHubSourcesNpmJs15A77D2D", }, ], ], }, "AlarmName": "dev/ConstructHub/Sources/NpmJs/Follower/NotRunning", "ComparisonOperator": "LessThanThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubSourcesNpmJs15A77D2D", }, }, ], "EvaluationPeriods": 2, "MetricName": "Invocations", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 1, "TreatMissingData": "breaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubSourcesNpmJsSchedule34031870": { "DependsOn": [ "ConstructHubSourcesNpmJsFollowerFailures86BCBA0D", ], "Properties": { "Description": "dev/ConstructHub/Sources/NpmJs/Schedule", "ScheduleExpression": "rate(5 minutes)", "State": "ENABLED", "Targets": [ { "Arn": { "Fn::GetAtt": [ "ConstructHubSourcesNpmJs15A77D2D", "Arn", ], }, "Id": "Target0", }, ], }, "Type": "AWS::Events::Rule", }, "ConstructHubSourcesNpmJsScheduleAllowEventRuledevConstructHubSourcesNpmJs94EFF1D850C1F076": { "DependsOn": [ "ConstructHubSourcesNpmJsFollowerFailures86BCBA0D", ], "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { "Fn::GetAtt": [ "ConstructHubSourcesNpmJs15A77D2D", "Arn", ], }, "Principal": "events.amazonaws.com", "SourceArn": { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsSchedule34031870", "Arn", ], }, }, "Type": "AWS::Lambda::Permission", }, "ConstructHubSourcesNpmJsServiceRoleAC3F7AA6": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", ], "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubSourcesNpmJsServiceRoleDefaultPolicy65FBFA22": { "DependsOn": [ "ConstructHubLicenseListAwsCliLayer59592811", "ConstructHubLicenseListCustomResource323F0FD4", ], "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", ], "Effect": "Allow", "Resource": "*", }, { "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": [ "ConstructHubSourcesNpmJsStagingBucketB286F0E6", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsStagingBucketB286F0E6", "Arn", ], }, "/couchdb-last-transaction-id.2", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, "/*", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubLicenseListBucket9334047F", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubLicenseListBucket9334047F", "Arn", ], }, "/*", ], ], }, ], }, { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsStageAndNotify591C0CFA", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsStageAndNotify591C0CFA", "Arn", ], }, ":*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubSourcesNpmJsServiceRoleDefaultPolicy65FBFA22", "Roles": [ { "Ref": "ConstructHubSourcesNpmJsServiceRoleAC3F7AA6", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubSourcesNpmJsStageAndNotify591C0CFA": { "DependsOn": [ "ConstructHubSourcesNpmJsStageAndNotifyServiceRoleDefaultPolicyF7D8382F", "ConstructHubSourcesNpmJsStageAndNotifyServiceRoleD5BB5B50", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "32aa9eacdc7aaee2ff1f1305f61efbbaaf00d95a064cbc1403433a1aff4ce947.zip", }, "DeadLetterConfig": { "TargetArn": { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "Arn", ], }, }, "Description": "[dev/ConstructHub/Sources/NpmJS-StageAndNotify] Stages tarballs to S3 and notifies ConstructHub", "Environment": { "Variables": { "AWS_EMF_ENVIRONMENT": "Local", "BUCKET_NAME": { "Ref": "ConstructHubSourcesNpmJsStagingBucketB286F0E6", }, "DENY_LIST_BUCKET_NAME": { "Ref": "ConstructHubDenyListBucket1B3C2C2E", }, "DENY_LIST_OBJECT_KEY": "deny-list.json", "QUEUE_URL": { "Ref": "ConstructHubIngestionQueue1AD94CA3", }, }, }, "Handler": "index.handler", "MemorySize": 10024, "Role": { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsStageAndNotifyServiceRoleD5BB5B50", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 300, "TracingConfig": { "Mode": "Active", }, }, "Type": "AWS::Lambda::Function", }, "ConstructHubSourcesNpmJsStageAndNotifyEventInvokeConfigF58F658E": { "Properties": { "FunctionName": { "Ref": "ConstructHubSourcesNpmJsStageAndNotify591C0CFA", }, "MaximumRetryAttempts": 2, "Qualifier": "$LATEST", }, "Type": "AWS::Lambda::EventInvokeConfig", }, "ConstructHubSourcesNpmJsStageAndNotifyServiceRoleD5BB5B50": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubSourcesNpmJsStageAndNotifyServiceRoleDefaultPolicyF7D8382F": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "sqs:SendMessage", "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "Arn", ], }, }, { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", ], "Effect": "Allow", "Resource": "*", }, { "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": [ "ConstructHubSourcesNpmJsStagingBucketB286F0E6", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsStagingBucketB286F0E6", "Arn", ], }, "/*", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, "/*", ], ], }, ], }, { "Action": [ "sqs:SendMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubIngestionQueue1AD94CA3", "Arn", ], }, }, { "Action": [ "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility", "sqs:GetQueueUrl", "sqs:DeleteMessage", "sqs:GetQueueAttributes", ], "Effect": "Allow", "Resource": { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubSourcesNpmJsStageAndNotifyServiceRoleDefaultPolicyF7D8382F", "Roles": [ { "Ref": "ConstructHubSourcesNpmJsStageAndNotifyServiceRoleD5BB5B50", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubSourcesNpmJsStageAndNotifySqsEventSourcedevConstructHubSourcesStagerDLQ8B15A0A12A3B8A16": { "Properties": { "BatchSize": 1, "Enabled": false, "EventSourceArn": { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "Arn", ], }, "FunctionName": { "Ref": "ConstructHubSourcesNpmJsStageAndNotify591C0CFA", }, }, "Type": "AWS::Lambda::EventSourceMapping", }, "ConstructHubSourcesNpmJsStagingBucketB286F0E6": { "DeletionPolicy": "Retain", "Properties": { "LifecycleConfiguration": { "Rules": [ { "ExpirationInDays": 30, "Prefix": "staged/", "Status": "Enabled", }, ], }, "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConstructHubSourcesNpmJsStagingBucketPolicy06788ED9": { "Properties": { "Bucket": { "Ref": "ConstructHubSourcesNpmJsStagingBucketB286F0E6", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsStagingBucketB286F0E6", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubSourcesNpmJsStagingBucketB286F0E6", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubSourcesStagerDLQ80BD2600": { "DeletionPolicy": "Delete", "Properties": { "KmsMasterKeyId": "alias/aws/sqs", "MessageRetentionPeriod": 1209600, "VisibilityTimeout": 900, }, "Type": "AWS::SQS::Queue", "UpdateReplacePolicy": "Delete", }, "ConstructHubSourcesdevConstructHubSourcesNpmJsStagerDLQNotEmpty3777A4EA": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The NpmJS package stager is failing - its dead letter queue is not empty/n/nLink to the lambda function: /lambda/home#/functions/", { "Ref": "ConstructHubSourcesNpmJsStageAndNotify591C0CFA", }, "/nLink to the dead letter queue: /sqs/v2/home#/queues/https%3A%2F%2Fsqs.", { "Ref": "AWS::Region", }, ".amazonaws.com%2F", { "Ref": "AWS::AccountId", }, "%2F", { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "QueueName", ], }, "/n/nRunbook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md", ], ], }, "AlarmName": "dev/ConstructHub/Sources/NpmJs/Stager/DLQNotEmpty", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "EvaluationPeriods": 1, "Metrics": [ { "Expression": "mVisible + mHidden", "Id": "expr_1", }, { "Id": "mVisible", "MetricStat": { "Metric": { "Dimensions": [ { "Name": "QueueName", "Value": { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "QueueName", ], }, }, ], "MetricName": "ApproximateNumberOfMessagesVisible", "Namespace": "AWS/SQS", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, { "Id": "mHidden", "MetricStat": { "Metric": { "Dimensions": [ { "Name": "QueueName", "Value": { "Fn::GetAtt": [ "ConstructHubSourcesStagerDLQ80BD2600", "QueueName", ], }, }, ], "MetricName": "ApproximateNumberOfMessagesNotVisible", "Namespace": "AWS/SQS", }, "Period": 300, "Stat": "Maximum", }, "ReturnData": false, }, ], "Threshold": 1, "TreatMissingData": "notBreaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubStats61DB07B1": { "DependsOn": [ "ConstructHubStatsServiceRoleDefaultPolicyE1D7A4CA", "ConstructHubStatsServiceRole48DCA379", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "f5975676d6b4a30abe81f3da6d9e3bb4bad5b2c9117d2c6b5436abe65c2916e3.zip", }, "Description": { "Fn::Join": [ "", [ "Creates the stats.json object in ", { "Ref": "ConstructHubPackageDataDC5EF35E", }, ], ], }, "Environment": { "Variables": { "CATALOG_BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "CATALOG_OBJECT_KEY": "catalog.json", "STATS_BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "STATS_OBJECT_KEY": "stats.json", }, }, "Handler": "index.handler", "MemorySize": 256, "ReservedConcurrentExecutions": 1, "Role": { "Fn::GetAtt": [ "ConstructHubStatsServiceRole48DCA379", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 900, "TracingConfig": { "Mode": "PassThrough", }, }, "Type": "AWS::Lambda::Function", }, "ConstructHubStatsLogRetentionDD577705": { "Properties": { "LogGroupName": { "Fn::Join": [ "", [ "/aws/lambda/", { "Ref": "ConstructHubStats61DB07B1", }, ], ], }, "RetentionInDays": 7, "ServiceToken": { "Fn::GetAtt": [ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "Arn", ], }, }, "Type": "Custom::LogRetention", }, "ConstructHubStatsRuleAllowEventRuledevConstructHubStats61F2462D22B8F59B": { "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { "Fn::GetAtt": [ "ConstructHubStats61DB07B1", "Arn", ], }, "Principal": "events.amazonaws.com", "SourceArn": { "Fn::GetAtt": [ "ConstructHubStatsRuleEEDEC976", "Arn", ], }, }, "Type": "AWS::Lambda::Permission", }, "ConstructHubStatsRuleEEDEC976": { "Properties": { "ScheduleExpression": "rate(1 day)", "State": "ENABLED", "Targets": [ { "Arn": { "Fn::GetAtt": [ "ConstructHubStats61DB07B1", "Arn", ], }, "Id": "Target0", }, ], }, "Type": "AWS::Events::Rule", }, "ConstructHubStatsServiceRole48DCA379": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubStatsServiceRoleDefaultPolicyE1D7A4CA": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", ], "Effect": "Allow", "Resource": "*", }, { "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": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubStatsServiceRoleDefaultPolicyE1D7A4CA", "Roles": [ { "Ref": "ConstructHubStatsServiceRole48DCA379", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubVPC16ECCEA2": { "Properties": { "CidrBlock": "10.0.0.0/16", "EnableDnsHostnames": true, "EnableDnsSupport": true, "InstanceTenancy": "default", "Tags": [ { "Key": "Name", "Value": "dev/ConstructHub/VPC", }, ], }, "Type": "AWS::EC2::VPC", }, "ConstructHubVPCCloudWatchLogsDF3CC579": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "logs:CreateLogStream", "logs:PutLogEvents", ], "Effect": "Allow", "Principal": { "AWS": { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorTaskDefinitionExecutionRoleB2DBF946", "Arn", ], }, }, "Resource": [ { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":logs:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":log-group:", { "Ref": "ConstructHubOrchestrationTransliteratorLogGroupEE16EE8B", }, ], ], }, { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":logs:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":log-group:", { "Ref": "ConstructHubOrchestrationTransliteratorLogGroupEE16EE8B", }, ":log-stream:*", ], ], }, ], "Sid": "Allow-Logging", }, ], "Version": "2012-10-17", }, "PrivateDnsEnabled": true, "SecurityGroupIds": [ { "Fn::GetAtt": [ "ConstructHubVPCCloudWatchLogsSecurityGroupA76B1F47", "GroupId", ], }, ], "ServiceName": { "Fn::Join": [ "", [ "com.amazonaws.", { "Ref": "AWS::Region", }, ".logs", ], ], }, "SubnetIds": [ { "Ref": "ConstructHubVPCIsolatedSubnet1SubnetEA28FD1A", }, { "Ref": "ConstructHubVPCIsolatedSubnet2Subnet483D4302", }, ], "VpcEndpointType": "Interface", "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::VPCEndpoint", }, "ConstructHubVPCCloudWatchLogsSecurityGroupA76B1F47": { "Properties": { "GroupDescription": "dev/ConstructHub/VPC/CloudWatch.Logs/SecurityGroup", "SecurityGroupEgress": [ { "CidrIp": "0.0.0.0/0", "Description": "Allow all outbound traffic by default", "IpProtocol": "-1", }, ], "SecurityGroupIngress": [ { "CidrIp": { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, "Description": { "Fn::Join": [ "", [ "from ", { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, ":443", ], ], }, "FromPort": 443, "IpProtocol": "tcp", "ToPort": 443, }, ], "Tags": [ { "Key": "Name", "Value": "dev/ConstructHub/VPC", }, ], "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::SecurityGroup", }, "ConstructHubVPCCodeArtifactAPI954CFDE1": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "sts:GetServiceBearerToken", "Condition": { "StringEquals": { "sts:AWSServiceName": "codeartifact.amazonaws.com", }, }, "Effect": "Allow", "Principal": { "AWS": { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A", "Arn", ], }, }, "Resource": "*", }, { "Action": [ "codeartifact:GetAuthorizationToken", "codeartifact:GetRepositoryEndpoint", ], "Effect": "Allow", "Principal": { "AWS": { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A", "Arn", ], }, }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubCodeArtifactDomainFC30B796", "Arn", ], }, { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "Arn", ], }, ], }, ], "Version": "2012-10-17", }, "PrivateDnsEnabled": false, "SecurityGroupIds": [ { "Fn::GetAtt": [ "ConstructHubVPCCodeArtifactAPISecurityGroupBE06BEF9", "GroupId", ], }, ], "ServiceName": { "Fn::Join": [ "", [ "com.amazonaws.", { "Ref": "AWS::Region", }, ".codeartifact.api", ], ], }, "SubnetIds": [ { "Ref": "ConstructHubVPCIsolatedSubnet1SubnetEA28FD1A", }, { "Ref": "ConstructHubVPCIsolatedSubnet2Subnet483D4302", }, ], "VpcEndpointType": "Interface", "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::VPCEndpoint", }, "ConstructHubVPCCodeArtifactAPISecurityGroupBE06BEF9": { "Properties": { "GroupDescription": "dev/ConstructHub/VPC/CodeArtifact.API/SecurityGroup", "SecurityGroupEgress": [ { "CidrIp": "0.0.0.0/0", "Description": "Allow all outbound traffic by default", "IpProtocol": "-1", }, ], "SecurityGroupIngress": [ { "CidrIp": { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, "Description": { "Fn::Join": [ "", [ "from ", { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, ":443", ], ], }, "FromPort": 443, "IpProtocol": "tcp", "ToPort": 443, }, ], "Tags": [ { "Key": "Name", "Value": "dev/ConstructHub/VPC", }, ], "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::SecurityGroup", }, "ConstructHubVPCCodeArtifactBD6E076F": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "codeartifact:ReadFromRepository", "Effect": "Allow", "Principal": { "AWS": { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A", "Arn", ], }, }, "Resource": { "Fn::GetAtt": [ "ConstructHubCodeArtifact1188409E", "Arn", ], }, }, ], "Version": "2012-10-17", }, "PrivateDnsEnabled": true, "SecurityGroupIds": [ { "Fn::GetAtt": [ "ConstructHubVPCCodeArtifactSecurityGroupBCADE40D", "GroupId", ], }, ], "ServiceName": { "Fn::Join": [ "", [ "com.amazonaws.", { "Ref": "AWS::Region", }, ".codeartifact.repositories", ], ], }, "SubnetIds": [ { "Ref": "ConstructHubVPCIsolatedSubnet1SubnetEA28FD1A", }, { "Ref": "ConstructHubVPCIsolatedSubnet2Subnet483D4302", }, ], "VpcEndpointType": "Interface", "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::VPCEndpoint", }, "ConstructHubVPCCodeArtifactSecurityGroupBCADE40D": { "Properties": { "GroupDescription": "dev/ConstructHub/VPC/CodeArtifact/SecurityGroup", "SecurityGroupEgress": [ { "CidrIp": "0.0.0.0/0", "Description": "Allow all outbound traffic by default", "IpProtocol": "-1", }, ], "SecurityGroupIngress": [ { "CidrIp": { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, "Description": { "Fn::Join": [ "", [ "from ", { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, ":443", ], ], }, "FromPort": 443, "IpProtocol": "tcp", "ToPort": 443, }, ], "Tags": [ { "Key": "Name", "Value": "dev/ConstructHub/VPC", }, ], "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::SecurityGroup", }, "ConstructHubVPCECRAPI4A1FDD7F": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "ecr:GetAuthorizationToken", "Effect": "Allow", "Principal": { "AWS": { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorTaskDefinitionExecutionRoleB2DBF946", "Arn", ], }, }, "Resource": "*", "Sid": "Allow-ECR-ReadOnly", }, ], "Version": "2012-10-17", }, "PrivateDnsEnabled": true, "SecurityGroupIds": [ { "Fn::GetAtt": [ "ConstructHubVPCECRAPISecurityGroup8D2AF9AB", "GroupId", ], }, ], "ServiceName": { "Fn::Join": [ "", [ "com.amazonaws.", { "Ref": "AWS::Region", }, ".ecr.api", ], ], }, "SubnetIds": [ { "Ref": "ConstructHubVPCIsolatedSubnet1SubnetEA28FD1A", }, { "Ref": "ConstructHubVPCIsolatedSubnet2Subnet483D4302", }, ], "VpcEndpointType": "Interface", "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::VPCEndpoint", }, "ConstructHubVPCECRAPISecurityGroup8D2AF9AB": { "Properties": { "GroupDescription": "dev/ConstructHub/VPC/ECR.API/SecurityGroup", "SecurityGroupEgress": [ { "CidrIp": "0.0.0.0/0", "Description": "Allow all outbound traffic by default", "IpProtocol": "-1", }, ], "SecurityGroupIngress": [ { "CidrIp": { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, "Description": { "Fn::Join": [ "", [ "from ", { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, ":443", ], ], }, "FromPort": 443, "IpProtocol": "tcp", "ToPort": 443, }, ], "Tags": [ { "Key": "Name", "Value": "dev/ConstructHub/VPC", }, ], "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::SecurityGroup", }, "ConstructHubVPCECRDocker6B2F6942": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", ], "Effect": "Allow", "Principal": { "AWS": { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorTaskDefinitionExecutionRoleB2DBF946", "Arn", ], }, }, "Resource": { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":ecr:", { "Ref": "AWS::Region", }, ":", { "Ref": "AWS::AccountId", }, ":repository/*", ], ], }, "Sid": "Allow-ECR-ReadOnly", }, ], "Version": "2012-10-17", }, "PrivateDnsEnabled": true, "SecurityGroupIds": [ { "Fn::GetAtt": [ "ConstructHubVPCECRDockerSecurityGroup551A7124", "GroupId", ], }, ], "ServiceName": { "Fn::Join": [ "", [ "com.amazonaws.", { "Ref": "AWS::Region", }, ".ecr.dkr", ], ], }, "SubnetIds": [ { "Ref": "ConstructHubVPCIsolatedSubnet1SubnetEA28FD1A", }, { "Ref": "ConstructHubVPCIsolatedSubnet2Subnet483D4302", }, ], "VpcEndpointType": "Interface", "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::VPCEndpoint", }, "ConstructHubVPCECRDockerSecurityGroup551A7124": { "Properties": { "GroupDescription": "dev/ConstructHub/VPC/ECR.Docker/SecurityGroup", "SecurityGroupEgress": [ { "CidrIp": "0.0.0.0/0", "Description": "Allow all outbound traffic by default", "IpProtocol": "-1", }, ], "SecurityGroupIngress": [ { "CidrIp": { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, "Description": { "Fn::Join": [ "", [ "from ", { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, ":443", ], ], }, "FromPort": 443, "IpProtocol": "tcp", "ToPort": 443, }, ], "Tags": [ { "Key": "Name", "Value": "dev/ConstructHub/VPC", }, ], "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::SecurityGroup", }, "ConstructHubVPCIGW935F4C28": { "Properties": { "Tags": [ { "Key": "Name", "Value": "dev/ConstructHub/VPC", }, ], }, "Type": "AWS::EC2::InternetGateway", }, "ConstructHubVPCIsolatedSubnet1RouteTable750E6F36": { "Properties": { "Tags": [ { "Key": "Name", "Value": "dev/ConstructHub/VPC/IsolatedSubnet1", }, ], "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::RouteTable", }, "ConstructHubVPCIsolatedSubnet1RouteTableAssociation3F8E4C37": { "Properties": { "RouteTableId": { "Ref": "ConstructHubVPCIsolatedSubnet1RouteTable750E6F36", }, "SubnetId": { "Ref": "ConstructHubVPCIsolatedSubnet1SubnetEA28FD1A", }, }, "Type": "AWS::EC2::SubnetRouteTableAssociation", }, "ConstructHubVPCIsolatedSubnet1SubnetEA28FD1A": { "Properties": { "AvailabilityZone": { "Fn::Select": [ 0, { "Fn::GetAZs": "", }, ], }, "CidrBlock": "10.0.128.0/19", "MapPublicIpOnLaunch": false, "Tags": [ { "Key": "aws-cdk:subnet-name", "Value": "Isolated", }, { "Key": "aws-cdk:subnet-type", "Value": "Isolated", }, { "Key": "Name", "Value": "dev/ConstructHub/VPC/IsolatedSubnet1", }, ], "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::Subnet", }, "ConstructHubVPCIsolatedSubnet2RouteTable18129C5D": { "Properties": { "Tags": [ { "Key": "Name", "Value": "dev/ConstructHub/VPC/IsolatedSubnet2", }, ], "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::RouteTable", }, "ConstructHubVPCIsolatedSubnet2RouteTableAssociationF8AD0E0F": { "Properties": { "RouteTableId": { "Ref": "ConstructHubVPCIsolatedSubnet2RouteTable18129C5D", }, "SubnetId": { "Ref": "ConstructHubVPCIsolatedSubnet2Subnet483D4302", }, }, "Type": "AWS::EC2::SubnetRouteTableAssociation", }, "ConstructHubVPCIsolatedSubnet2Subnet483D4302": { "Properties": { "AvailabilityZone": { "Fn::Select": [ 1, { "Fn::GetAZs": "", }, ], }, "CidrBlock": "10.0.160.0/19", "MapPublicIpOnLaunch": false, "Tags": [ { "Key": "aws-cdk:subnet-name", "Value": "Isolated", }, { "Key": "aws-cdk:subnet-type", "Value": "Isolated", }, { "Key": "Name", "Value": "dev/ConstructHub/VPC/IsolatedSubnet2", }, ], "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::Subnet", }, "ConstructHubVPCS319E90CB6": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "s3:GetObject", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubCodeArtifactDescribeDomain6ABCBF4B", "domain.s3BucketArn", ], }, "/*", ], ], }, { "Fn::Join": [ "", [ "arn:aws:s3:::prod-", { "Ref": "AWS::Region", }, "-starport-layer-bucket/*", ], ], }, ], "Sid": "Allow-CodeArtifact-and-ECR", }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/assembly.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/package.tgz", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/uninstallable", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/uninstallable", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/uninstallable", ], ], }, }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*.not-supported", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*.corruptassembly", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-typescript.*.corruptassembly", ], ], }, }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-typescript.*.corruptassembly", ], ], }, }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*.not-supported", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*.corruptassembly", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-python.*.corruptassembly", ], ], }, }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-python.*.corruptassembly", ], ], }, }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*.not-supported", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*.corruptassembly", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-java.*.corruptassembly", ], ], }, }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-java.*.corruptassembly", ], ], }, }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*.not-supported", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*.corruptassembly", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-csharp.*.corruptassembly", ], ], }, }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-csharp.*.corruptassembly", ], ], }, }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*.not-supported", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*.not-supported", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*.corruptassembly", ], ], }, ], }, { "Action": [ "s3:Abort*", "s3:DeleteObject*", "s3:PutObject*", ], "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*.corruptassembly", ], ], }, ], }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-go.*.corruptassembly", ], ], }, }, { "Action": "s3:DeleteObject*", "Effect": "Allow", "Principal": { "AWS": "*", }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/data/*/docs-*-go.*.corruptassembly", ], ], }, }, ], "Version": "2012-10-17", }, "RouteTableIds": [ { "Ref": "ConstructHubVPCIsolatedSubnet1RouteTable750E6F36", }, { "Ref": "ConstructHubVPCIsolatedSubnet2RouteTable18129C5D", }, ], "ServiceName": { "Fn::Join": [ "", [ "com.amazonaws.", { "Ref": "AWS::Region", }, ".s3", ], ], }, "VpcEndpointType": "Gateway", "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::VPCEndpoint", }, "ConstructHubVPCStepFunctionsBE8464F5": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "states:SendTaskFailure", "states:SendTaskHeartbeat", "states:SendTaskSuccess", ], "Effect": "Allow", "Principal": { "AWS": { "Fn::GetAtt": [ "ConstructHubOrchestrationTransliteratorTaskDefinitionTaskRoleD060AB1A", "Arn", ], }, }, "Resource": "*", "Sid": "Allow-StepFunctions-Callbacks", }, ], "Version": "2012-10-17", }, "PrivateDnsEnabled": true, "SecurityGroupIds": [ { "Fn::GetAtt": [ "ConstructHubVPCStepFunctionsSecurityGroup1757018B", "GroupId", ], }, ], "ServiceName": { "Fn::Join": [ "", [ "com.amazonaws.", { "Ref": "AWS::Region", }, ".states", ], ], }, "SubnetIds": [ { "Ref": "ConstructHubVPCIsolatedSubnet1SubnetEA28FD1A", }, { "Ref": "ConstructHubVPCIsolatedSubnet2Subnet483D4302", }, ], "VpcEndpointType": "Interface", "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::VPCEndpoint", }, "ConstructHubVPCStepFunctionsSecurityGroup1757018B": { "Properties": { "GroupDescription": "dev/ConstructHub/VPC/StepFunctions/SecurityGroup", "SecurityGroupEgress": [ { "CidrIp": "0.0.0.0/0", "Description": "Allow all outbound traffic by default", "IpProtocol": "-1", }, ], "SecurityGroupIngress": [ { "CidrIp": { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, "Description": { "Fn::Join": [ "", [ "from ", { "Fn::GetAtt": [ "ConstructHubVPC16ECCEA2", "CidrBlock", ], }, ":443", ], ], }, "FromPort": 443, "IpProtocol": "tcp", "ToPort": 443, }, ], "Tags": [ { "Key": "Name", "Value": "dev/ConstructHub/VPC", }, ], "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::SecurityGroup", }, "ConstructHubVPCVPCGWDF75BD8E": { "Properties": { "InternetGatewayId": { "Ref": "ConstructHubVPCIGW935F4C28", }, "VpcId": { "Ref": "ConstructHubVPC16ECCEA2", }, }, "Type": "AWS::EC2::VPCGatewayAttachment", }, "ConstructHubVersionTrackerD5E8AEAE": { "DependsOn": [ "ConstructHubVersionTrackerServiceRoleDefaultPolicy4D5DE93F", "ConstructHubVersionTrackerServiceRole721EE863", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "da9aac145a89c005f6a8fe9326865bb2972ddaba0edca39cd0eb7437aa4556d2.zip", }, "Description": { "Fn::Join": [ "", [ "[dev/ConstructHub/VersionTracker] Creates the all-versions.json in ", { "Ref": "ConstructHubPackageDataDC5EF35E", }, ], ], }, "Environment": { "Variables": { "PACKAGE_DATA_BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "PACKAGE_DATA_KEY_PREFIX": "data/", "VERSION_TRACKER_BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "VERSION_TRACKER_OBJECT_KEY": "all-versions.json", }, }, "Handler": "index.handler", "MemorySize": 10240, "ReservedConcurrentExecutions": 1, "Role": { "Fn::GetAtt": [ "ConstructHubVersionTrackerServiceRole721EE863", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 300, "TracingConfig": { "Mode": "Active", }, }, "Type": "AWS::Lambda::Function", }, "ConstructHubVersionTrackerFailures00296806": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The version tracker function failed! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to Lambda function: /lambda/home#/functions/", { "Ref": "ConstructHubVersionTrackerD5E8AEAE", }, ], ], }, "AlarmName": "dev/ConstructHub/VersionTracker/Failures", "ComparisonOperator": "GreaterThanOrEqualToThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubVersionTrackerD5E8AEAE", }, }, ], "EvaluationPeriods": 3, "MetricName": "Errors", "Namespace": "AWS/Lambda", "Period": 300, "Statistic": "Sum", "Threshold": 1, "TreatMissingData": "missing", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubVersionTrackerLogRetention6BB4E813": { "Properties": { "LogGroupName": { "Fn::Join": [ "", [ "/aws/lambda/", { "Ref": "ConstructHubVersionTrackerD5E8AEAE", }, ], ], }, "RetentionInDays": 7, "ServiceToken": { "Fn::GetAtt": [ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", "Arn", ], }, }, "Type": "Custom::LogRetention", }, "ConstructHubVersionTrackerNotRunning2FBC5BDA": { "Properties": { "AlarmDescription": { "Fn::Join": [ "", [ "The version tracker function is not running! RunBook: https://github.com/cdklabs/construct-hub/blob/main/docs/operator-runbook.md Direct link to Lambda function: /lambda/home#/functions/", { "Ref": "ConstructHubVersionTrackerD5E8AEAE", }, ], ], }, "AlarmName": "dev/ConstructHub/VersionTracker/NotRunning", "ComparisonOperator": "LessThanThreshold", "Dimensions": [ { "Name": "FunctionName", "Value": { "Ref": "ConstructHubVersionTrackerD5E8AEAE", }, }, ], "EvaluationPeriods": 2, "MetricName": "Invocations", "Namespace": "AWS/Lambda", "Period": 60, "Statistic": "Sum", "Threshold": 1, "TreatMissingData": "breaching", }, "Type": "AWS::CloudWatch::Alarm", }, "ConstructHubVersionTrackerRuleAllowEventRuledevConstructHubVersionTrackerEE852993B699C72E": { "DependsOn": [ "ConstructHubVersionTrackerServiceRoleDefaultPolicy4D5DE93F", ], "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { "Fn::GetAtt": [ "ConstructHubVersionTrackerD5E8AEAE", "Arn", ], }, "Principal": "events.amazonaws.com", "SourceArn": { "Fn::GetAtt": [ "ConstructHubVersionTrackerRuleD147E5BF", "Arn", ], }, }, "Type": "AWS::Lambda::Permission", }, "ConstructHubVersionTrackerRuleD147E5BF": { "DependsOn": [ "ConstructHubVersionTrackerServiceRoleDefaultPolicy4D5DE93F", ], "Properties": { "ScheduleExpression": "rate(1 minute)", "State": "ENABLED", "Targets": [ { "Arn": { "Fn::GetAtt": [ "ConstructHubVersionTrackerD5E8AEAE", "Arn", ], }, "Id": "Target0", }, ], }, "Type": "AWS::Events::Rule", }, "ConstructHubVersionTrackerServiceRole721EE863": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "ConstructHubVersionTrackerServiceRoleDefaultPolicy4D5DE93F": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", ], "Effect": "Allow", "Resource": "*", }, { "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": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "ConstructHubVersionTrackerServiceRoleDefaultPolicy4D5DE93F", "Roles": [ { "Ref": "ConstructHubVersionTrackerServiceRole721EE863", }, ], }, "Type": "AWS::IAM::Policy", }, "ConstructHubWebAppAddHeadersFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c7E9FDB69": { "Properties": { "AutoPublish": true, "FunctionCode": ""use strict"; // @ts-ignore function handler(event) { var response = event.response; var headers = response.headers; headers['x-frame-options'] = { value: 'deny' }; headers['x-xss-protection'] = { value: '1; mode=block' }; headers['x-content-type-options'] = { value: 'nosniff' }; headers['strict-transport-security'] = { value: 'max-age=47304000; includeSubDomains', }; headers['content-security-policy'] = { value: [ "default-src 'self' 'unsafe-inline' https://*.awsstatic.com;", [ 'connect-src', "'self'", 'https://d2c-alpha.dse.marketing.aws.a2z.com', 'https://vs-alpha.aws.amazon.com', 'https://d2c-beta.dse.marketing.aws.a2z.com', 'https://vs-beta.aws.amazon.com', 'https://d2c-gamma.dse.marketing.aws.a2z.com', 'https://vs-gamma.aws.amazon.com', 'https://vs.aws.amazon.com', 'https://d2c.aws.amazon.com', 'https://*.shortbread.aws.dev', 'https://a0.awsstatic.com/', 'https://amazonwebservices.d2.sc.omtrdc.net', 'https://aws.demdex.net', 'https://dpm.demdex.net', 'https://cm.everesttech.net;', ].join(' '), 'frame-src https://aws.demdex.net https://dpm.demdex.net;', "img-src 'self' https://* https://a0.awsstatic.com/ https://amazonwebservices.d2.sc.omtrdc.net https://aws.demdex.net https://dpm.demdex.net https://cm.everesttech.net;", "object-src 'none';", "style-src 'self' 'unsafe-inline';", ].join(' '), }; return response; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UtZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViYXBwL3Jlc3BvbnNlLWZ1bmN0aW9uL3Jlc3BvbnNlLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFTQSxhQUFhO0FBQ2IsU0FBUyxPQUFPLENBQUMsS0FBeUI7SUFDeEMsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUM5QixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBRS9CLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQy9DLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO0lBQ3pELE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3pELE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxHQUFHO1FBQ3JDLEtBQUssRUFBRSxxQ0FBcUM7S0FDN0MsQ0FBQztJQUNGLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHO1FBQ25DLEtBQUssRUFBRTtZQUNMLDZEQUE2RDtZQUM3RDtnQkFDRSxhQUFhO2dCQUNiLFFBQVE7Z0JBQ1IsNkNBQTZDO2dCQUM3QyxpQ0FBaUM7Z0JBQ2pDLDRDQUE0QztnQkFDNUMsZ0NBQWdDO2dCQUNoQyw2Q0FBNkM7Z0JBQzdDLGlDQUFpQztnQkFDakMsMkJBQTJCO2dCQUMzQiw0QkFBNEI7Z0JBQzVCLDhCQUE4QjtnQkFDOUIsMkJBQTJCO2dCQUMzQiw0Q0FBNEM7Z0JBQzVDLHdCQUF3QjtnQkFDeEIsd0JBQXdCO2dCQUN4Qiw2QkFBNkI7YUFDOUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ1gsMERBQTBEO1lBQzFELHlLQUF5SztZQUN6SyxvQkFBb0I7WUFDcEIsbUNBQW1DO1NBQ3BDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztLQUNaLENBQUM7SUFFRixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIENsb3VkRnJvbnRSZXNwb25zZSB7XG4gIHJlc3BvbnNlOiBhbnk7XG4gIGhlYWRlcnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICB2YWx1ZTogc3RyaW5nO1xuICAgIH07XG4gIH07XG59XG5cbi8vIEB0cy1pZ25vcmVcbmZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IENsb3VkRnJvbnRSZXNwb25zZSkge1xuICB2YXIgcmVzcG9uc2UgPSBldmVudC5yZXNwb25zZTtcbiAgdmFyIGhlYWRlcnMgPSByZXNwb25zZS5oZWFkZXJzO1xuXG4gIGhlYWRlcnNbJ3gtZnJhbWUtb3B0aW9ucyddID0geyB2YWx1ZTogJ2RlbnknIH07XG4gIGhlYWRlcnNbJ3gteHNzLXByb3RlY3Rpb24nXSA9IHsgdmFsdWU6ICcxOyBtb2RlPWJsb2NrJyB9O1xuICBoZWFkZXJzWyd4LWNvbnRlbnQtdHlwZS1vcHRpb25zJ10gPSB7IHZhbHVlOiAnbm9zbmlmZicgfTtcbiAgaGVhZGVyc1snc3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSddID0ge1xuICAgIHZhbHVlOiAnbWF4LWFnZT00NzMwNDAwMDsgaW5jbHVkZVN1YkRvbWFpbnMnLFxuICB9O1xuICBoZWFkZXJzWydjb250ZW50LXNlY3VyaXR5LXBvbGljeSddID0ge1xuICAgIHZhbHVlOiBbXG4gICAgICBcImRlZmF1bHQtc3JjICdzZWxmJyAndW5zYWZlLWlubGluZScgaHR0cHM6Ly8qLmF3c3N0YXRpYy5jb207XCIsXG4gICAgICBbXG4gICAgICAgICdjb25uZWN0LXNyYycsXG4gICAgICAgIFwiJ3NlbGYnXCIsXG4gICAgICAgICdodHRwczovL2QyYy1hbHBoYS5kc2UubWFya2V0aW5nLmF3cy5hMnouY29tJyxcbiAgICAgICAgJ2h0dHBzOi8vdnMtYWxwaGEuYXdzLmFtYXpvbi5jb20nLFxuICAgICAgICAnaHR0cHM6Ly9kMmMtYmV0YS5kc2UubWFya2V0aW5nLmF3cy5hMnouY29tJyxcbiAgICAgICAgJ2h0dHBzOi8vdnMtYmV0YS5hd3MuYW1hem9uLmNvbScsXG4gICAgICAgICdodHRwczovL2QyYy1nYW1tYS5kc2UubWFya2V0aW5nLmF3cy5hMnouY29tJyxcbiAgICAgICAgJ2h0dHBzOi8vdnMtZ2FtbWEuYXdzLmFtYXpvbi5jb20nLFxuICAgICAgICAnaHR0cHM6Ly92cy5hd3MuYW1hem9uLmNvbScsXG4gICAgICAgICdodHRwczovL2QyYy5hd3MuYW1hem9uLmNvbScsXG4gICAgICAgICdodHRwczovLyouc2hvcnRicmVhZC5hd3MuZGV2JyxcbiAgICAgICAgJ2h0dHBzOi8vYTAuYXdzc3RhdGljLmNvbS8nLFxuICAgICAgICAnaHR0cHM6Ly9hbWF6b253ZWJzZXJ2aWNlcy5kMi5zYy5vbXRyZGMubmV0JyxcbiAgICAgICAgJ2h0dHBzOi8vYXdzLmRlbWRleC5uZXQnLFxuICAgICAgICAnaHR0cHM6Ly9kcG0uZGVtZGV4Lm5ldCcsXG4gICAgICAgICdodHRwczovL2NtLmV2ZXJlc3R0ZWNoLm5ldDsnLFxuICAgICAgXS5qb2luKCcgJyksXG4gICAgICAnZnJhbWUtc3JjIGh0dHBzOi8vYXdzLmRlbWRleC5uZXQgaHR0cHM6Ly9kcG0uZGVtZGV4Lm5ldDsnLFxuICAgICAgXCJpbWctc3JjICdzZWxmJyBodHRwczovLyogaHR0cHM6Ly9hMC5hd3NzdGF0aWMuY29tLyBodHRwczovL2FtYXpvbndlYnNlcnZpY2VzLmQyLnNjLm9tdHJkYy5uZXQgaHR0cHM6Ly9hd3MuZGVtZGV4Lm5ldCBodHRwczovL2RwbS5kZW1kZXgubmV0IGh0dHBzOi8vY20uZXZlcmVzdHRlY2gubmV0O1wiLFxuICAgICAgXCJvYmplY3Qtc3JjICdub25lJztcIixcbiAgICAgIFwic3R5bGUtc3JjICdzZWxmJyAndW5zYWZlLWlubGluZSc7XCIsXG4gICAgXS5qb2luKCcgJyksXG4gIH07XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuIl19", "FunctionConfig": { "Comment": "AddHeadersFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c", "Runtime": "cloudfront-js-1.0", }, "Name": "AddHeadersFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c", }, "Type": "AWS::CloudFront::Function", }, "ConstructHubWebAppBadgeRedirectFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c7DAA75A6": { "Properties": { "AutoPublish": true, "FunctionCode": ""use strict"; // @ts-ignore function handler(event) { return { statusCode: 302, statusDescription: 'Found', headers: { location: { value: '/badge-dynamic.svg' } }, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXJlY3QtZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2ViYXBwL2JhZGdlLXJlZGlyZWN0LWZ1bmN0aW9uL3JlZGlyZWN0LWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxhQUFhO0FBQ2IsU0FBUyxPQUFPLENBQUMsS0FBVTtJQUN6QixPQUFPO1FBQ0wsVUFBVSxFQUFFLEdBQUc7UUFDZixpQkFBaUIsRUFBRSxPQUFPO1FBQzFCLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxFQUFFO0tBQ3ZELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxuZnVuY3Rpb24gaGFuZGxlcihldmVudDogYW55KSB7XG4gIHJldHVybiB7XG4gICAgc3RhdHVzQ29kZTogMzAyLFxuICAgIHN0YXR1c0Rlc2NyaXB0aW9uOiAnRm91bmQnLFxuICAgIGhlYWRlcnM6IHsgbG9jYXRpb246IHsgdmFsdWU6ICcvYmFkZ2UtZHluYW1pYy5zdmcnIH0gfSxcbiAgfTtcbn1cbiJdfQ==", "FunctionConfig": { "Comment": "BadgeRedirectFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c", "Runtime": "cloudfront-js-1.0", }, "Name": "BadgeRedirectFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c", }, "Type": "AWS::CloudFront::Function", }, "ConstructHubWebAppDeployWebsiteAwsCliLayer23CFFBC1": { "Properties": { "Content": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "e2277687077a2abf9ae1af1cc9565e6715e2ebb62f79ec53aa75a1af9298f642.zip", }, "Description": "/opt/awscli/aws", }, "Type": "AWS::Lambda::LayerVersion", }, "ConstructHubWebAppDeployWebsiteConfigAwsCliLayer8DFDB17A": { "Properties": { "Content": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "e2277687077a2abf9ae1af1cc9565e6715e2ebb62f79ec53aa75a1af9298f642.zip", }, "Description": "/opt/awscli/aws", }, "Type": "AWS::Lambda::LayerVersion", }, "ConstructHubWebAppDeployWebsiteConfigCustomResource2D18C708": { "DeletionPolicy": "Delete", "Properties": { "DestinationBucketName": { "Ref": "ConstructHubWebAppWebsiteBucket4B2B9DB2", }, "DistributionId": { "Ref": "ConstructHubWebAppDistribution1F181DC9", }, "Prune": false, "ServiceToken": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "Arn", ], }, "SourceBucketNames": [ { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, ], "SourceMarkers": [ {}, {}, ], "SourceObjectKeys": [ "14e4f0139224d21210279e451b3ecaef287913006c68e6050415f640c0ef7522.zip", "d7eba45c105712349db08f8edd1c547cd768fb9c92dadc0bfd2403ecc4127f96.zip", ], "SystemMetadata": { "cache-control": "public, max-age=300, must-revalidate, s-maxage=60, proxy-revalidate", }, }, "Type": "Custom::CDKBucketDeployment", "UpdateReplacePolicy": "Delete", }, "ConstructHubWebAppDeployWebsiteCustomResourceE6DF98C9": { "DeletionPolicy": "Delete", "Properties": { "DestinationBucketName": { "Ref": "ConstructHubWebAppWebsiteBucket4B2B9DB2", }, "DistributionId": { "Ref": "ConstructHubWebAppDistribution1F181DC9", }, "Prune": false, "ServiceToken": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", "Arn", ], }, "SourceBucketNames": [ { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, ], "SourceObjectKeys": [ "0b8ba758edbf45877966c94123e961f78001df663d09cb235e0b2e289a8dde5b.zip", ], "SystemMetadata": { "cache-control": "public, max-age=300, must-revalidate, s-maxage=60, proxy-revalidate", }, }, "Type": "Custom::CDKBucketDeployment", "UpdateReplacePolicy": "Delete", }, "ConstructHubWebAppDistribution1F181DC9": { "Properties": { "DistributionConfig": { "CacheBehaviors": [ { "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", "Compress": true, "FunctionAssociations": [ { "EventType": "viewer-response", "FunctionARN": { "Fn::GetAtt": [ "ConstructHubWebAppAddHeadersFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c7E9FDB69", "FunctionARN", ], }, }, ], "PathPattern": "/data/*", "TargetOriginId": "devConstructHubWebAppDistributionOrigin2A726FD66", "ViewerProtocolPolicy": "allow-all", }, { "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", "Compress": true, "FunctionAssociations": [ { "EventType": "viewer-response", "FunctionARN": { "Fn::GetAtt": [ "ConstructHubWebAppAddHeadersFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c7E9FDB69", "FunctionARN", ], }, }, ], "PathPattern": "/catalog.json", "TargetOriginId": "devConstructHubWebAppDistributionOrigin2A726FD66", "ViewerProtocolPolicy": "allow-all", }, { "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", "Compress": true, "FunctionAssociations": [ { "EventType": "viewer-response", "FunctionARN": { "Fn::GetAtt": [ "ConstructHubWebAppAddHeadersFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c7E9FDB69", "FunctionARN", ], }, }, ], "PathPattern": "/all-versions.json", "TargetOriginId": "devConstructHubWebAppDistributionOrigin2A726FD66", "ViewerProtocolPolicy": "allow-all", }, { "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", "Compress": true, "FunctionAssociations": [ { "EventType": "viewer-request", "FunctionARN": { "Fn::GetAtt": [ "ConstructHubWebAppBadgeRedirectFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c7DAA75A6", "FunctionARN", ], }, }, ], "PathPattern": "/badge", "TargetOriginId": "devConstructHubWebAppDistributionOrigin1FBBA04AE", "ViewerProtocolPolicy": "allow-all", }, { "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", "Compress": true, "FunctionAssociations": [ { "EventType": "viewer-response", "FunctionARN": { "Fn::GetAtt": [ "ConstructHubWebAppAddHeadersFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c7E9FDB69", "FunctionARN", ], }, }, ], "PathPattern": "/atom", "TargetOriginId": "devConstructHubWebAppDistributionOrigin2A726FD66", "ViewerProtocolPolicy": "allow-all", }, { "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", "Compress": true, "FunctionAssociations": [ { "EventType": "viewer-response", "FunctionARN": { "Fn::GetAtt": [ "ConstructHubWebAppAddHeadersFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c7E9FDB69", "FunctionARN", ], }, }, ], "PathPattern": "/rss", "TargetOriginId": "devConstructHubWebAppDistributionOrigin2A726FD66", "ViewerProtocolPolicy": "allow-all", }, { "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", "Compress": true, "FunctionAssociations": [ { "EventType": "viewer-response", "FunctionARN": { "Fn::GetAtt": [ "ConstructHubWebAppAddHeadersFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c7E9FDB69", "FunctionARN", ], }, }, ], "PathPattern": "/stats.json", "TargetOriginId": "devConstructHubWebAppDistributionOrigin2A726FD66", "ViewerProtocolPolicy": "allow-all", }, ], "CustomErrorResponses": [ { "ErrorCode": 404, "ResponseCode": 200, "ResponsePagePath": "/index.html", }, { "ErrorCode": 403, "ResponseCode": 200, "ResponsePagePath": "/index.html", }, ], "DefaultCacheBehavior": { "CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6", "Compress": true, "FunctionAssociations": [ { "EventType": "viewer-response", "FunctionARN": { "Fn::GetAtt": [ "ConstructHubWebAppAddHeadersFunctionc8e10155f2162f48ff533f91d4832060d5a08c2d5c7E9FDB69", "FunctionARN", ], }, }, ], "TargetOriginId": "devConstructHubWebAppDistributionOrigin1FBBA04AE", "ViewerProtocolPolicy": "allow-all", }, "DefaultRootObject": "index.html", "Enabled": true, "HttpVersion": "http2", "IPV6Enabled": true, "Origins": [ { "DomainName": { "Fn::GetAtt": [ "ConstructHubWebAppWebsiteBucket4B2B9DB2", "RegionalDomainName", ], }, "Id": "devConstructHubWebAppDistributionOrigin1FBBA04AE", "S3OriginConfig": { "OriginAccessIdentity": { "Fn::Join": [ "", [ "origin-access-identity/cloudfront/", { "Ref": "ConstructHubWebAppDistributionOrigin1S3Origin694AF937", }, ], ], }, }, }, { "DomainName": { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "RegionalDomainName", ], }, "Id": "devConstructHubWebAppDistributionOrigin2A726FD66", "S3OriginConfig": { "OriginAccessIdentity": { "Fn::Join": [ "", [ "origin-access-identity/cloudfront/", { "Ref": "ConstructHubWebAppDistributionOrigin2S3OriginDA7E7FF4", }, ], ], }, }, }, ], }, }, "Type": "AWS::CloudFront::Distribution", }, "ConstructHubWebAppDistributionOrigin1S3Origin694AF937": { "Properties": { "CloudFrontOriginAccessIdentityConfig": { "Comment": "Identity for devConstructHubWebAppDistributionOrigin1FBBA04AE", }, }, "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", }, "ConstructHubWebAppDistributionOrigin2S3OriginDA7E7FF4": { "Properties": { "CloudFrontOriginAccessIdentityConfig": { "Comment": "Identity for devConstructHubWebAppDistributionOrigin2A726FD66", }, }, "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", }, "ConstructHubWebAppFailoverWebsiteBucketE69CC2C7": { "DeletionPolicy": "Retain", "Properties": { "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "failover", "Value": "true", }, ], }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConstructHubWebAppFailoverWebsiteBucketPolicy7303D09F": { "Properties": { "Bucket": { "Ref": "ConstructHubWebAppFailoverWebsiteBucketE69CC2C7", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubWebAppFailoverWebsiteBucketE69CC2C7", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubWebAppFailoverWebsiteBucketE69CC2C7", "Arn", ], }, "/*", ], ], }, ], }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "ConstructHubWebAppWebsiteBucket4B2B9DB2": { "DeletionPolicy": "Retain", "Properties": { "PublicAccessBlockConfiguration": { "BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true, }, "Tags": [ { "Key": "aws-cdk:cr-owned:74149cf2", "Value": "true", }, { "Key": "aws-cdk:cr-owned:d7894bf2", "Value": "true", }, ], }, "Type": "AWS::S3::Bucket", "UpdateReplacePolicy": "Retain", }, "ConstructHubWebAppWebsiteBucketPolicy17174C06": { "Properties": { "Bucket": { "Ref": "ConstructHubWebAppWebsiteBucket4B2B9DB2", }, "PolicyDocument": { "Statement": [ { "Action": "s3:*", "Condition": { "Bool": { "aws:SecureTransport": "false", }, }, "Effect": "Deny", "Principal": { "AWS": "*", }, "Resource": [ { "Fn::GetAtt": [ "ConstructHubWebAppWebsiteBucket4B2B9DB2", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubWebAppWebsiteBucket4B2B9DB2", "Arn", ], }, "/*", ], ], }, ], }, { "Action": "s3:GetObject", "Effect": "Allow", "Principal": { "CanonicalUser": { "Fn::GetAtt": [ "ConstructHubWebAppDistributionOrigin1S3Origin694AF937", "S3CanonicalUserId", ], }, }, "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubWebAppWebsiteBucket4B2B9DB2", "Arn", ], }, "/*", ], ], }, }, ], "Version": "2012-10-17", }, }, "Type": "AWS::S3::BucketPolicy", }, "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536": { "DependsOn": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", ], "Properties": { "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "9eb41a5505d37607ac419321497a4f8c21cf0ee1f9b4a6b29aa04301aea5c7fd.zip", }, "Environment": { "Variables": { "AWS_CA_BUNDLE": "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", }, }, "Handler": "index.handler", "Layers": [ { "Ref": "ConstructHubDenyListBucketDeploymentAwsCliLayerEAC3D4DA", }, ], "Role": { "Fn::GetAtt": [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", "Arn", ], }, "Runtime": "python3.9", "Timeout": 900, }, "Type": "AWS::Lambda::Function", }, "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":s3:::", { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, ], ], }, { "Fn::Join": [ "", [ "arn:", { "Ref": "AWS::Partition", }, ":s3:::", { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${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": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubDenyListBucket1B3C2C2E", "Arn", ], }, "/*", ], ], }, ], }, { "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": [ "ConstructHubIngestionConfigBucket0F0ED0B6", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubIngestionConfigBucket0F0ED0B6", "Arn", ], }, "/*", ], ], }, ], }, { "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": [ "ConstructHubLicenseListBucket9334047F", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubLicenseListBucket9334047F", "Arn", ], }, "/*", ], ], }, ], }, { "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": [ "ConstructHubWebAppWebsiteBucket4B2B9DB2", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubWebAppWebsiteBucket4B2B9DB2", "Arn", ], }, "/*", ], ], }, ], }, { "Action": [ "cloudfront:GetInvalidation", "cloudfront:CreateInvalidation", ], "Effect": "Allow", "Resource": "*", }, ], "Version": "2012-10-17", }, "PolicyName": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", "Roles": [ { "Ref": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", }, ], }, "Type": "AWS::IAM::Policy", }, "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": { "DependsOn": [ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", ], "Properties": { "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "350185a1069fa20a23a583e20c77f6844218bd73097902362dc94f1a108f5d89.zip", }, "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", { "Ref": "ConstructHubDenyListBucket1B3C2C2E", }, " S3 bucket.", ], ], }, "Handler": "__entrypoint__.handler", "MemorySize": 128, "Role": { "Fn::GetAtt": [ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Arn", ], }, "Runtime": "nodejs16.x", "Timeout": 900, }, "Type": "AWS::Lambda::Function", }, "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com", }, }, ], "Version": "2012-10-17", }, "ManagedPolicyArns": [ { "Fn::Sub": "arn:\${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", }, ], }, "Type": "AWS::IAM::Role", }, "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": { "DependsOn": [ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", ], "Properties": { "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "5fa1330271b8967d9254ba2d4a07144f8acefe8b77e6d6bba38261373a50d5f8.zip", }, "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", "Arn", ], }, "Runtime": { "Fn::FindInMap": [ "DefaultCrNodeVersionMap", { "Ref": "AWS::Region", }, "value", ], }, }, "Type": "AWS::Lambda::Function", }, "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": { "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", ], ], }, ], }, "Type": "AWS::IAM::Role", }, "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "logs:PutRetentionPolicy", "logs:DeleteRetentionPolicy", ], "Effect": "Allow", "Resource": "*", }, ], "Version": "2012-10-17", }, "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", "Roles": [ { "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", }, ], }, "Type": "AWS::IAM::Policy", }, "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfBE2C27C2": { "DependsOn": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfServiceRoleDefaultPolicy873D958D", "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfServiceRole060BA12C", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "f1710d18b528a677c8251e34928a9defce3a5fd9df6b160ba6478831226def7a.zip", }, "Description": "[ConstructHub/MissingDocumentationWidget] Is a custom CloudWatch widget handler", "Environment": { "Variables": { "BUCKET_NAME": { "Ref": "ConstructHubPackageDataDC5EF35E", }, "OBJECT_KEY": "uninstallable-objects/data.json", }, }, "Handler": "index.handler", "MemorySize": 1024, "Role": { "Fn::GetAtt": [ "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfServiceRole060BA12C", "Arn", ], }, "Runtime": "nodejs16.x", "Tags": [ { "Key": "function-purpose", "Value": "cloudwatch-custom-widget", }, ], "Timeout": 15, }, "Type": "AWS::Lambda::Function", }, "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfServiceRole060BA12C": { "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": "function-purpose", "Value": "cloudwatch-custom-widget", }, ], }, "Type": "AWS::IAM::Role", }, "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfServiceRoleDefaultPolicy873D958D": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/uninstallable-objects/data.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/missing-objects/typescript-documentation.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/corruptassembly-objects/typescript.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/missing-objects/python-documentation.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/corruptassembly-objects/python.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/missing-objects/java-documentation.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/corruptassembly-objects/java.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/missing-objects/csharp-documentation.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/corruptassembly-objects/csharp.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/missing-objects/go-documentation.json", ], ], }, ], }, { "Action": [ "s3:GetObject*", "s3:GetBucket*", "s3:List*", ], "Effect": "Allow", "Resource": [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "ConstructHubPackageDataDC5EF35E", "Arn", ], }, "/corruptassembly-objects/go.json", ], ], }, ], }, ], "Version": "2012-10-17", }, "PolicyName": "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfServiceRoleDefaultPolicy873D958D", "Roles": [ { "Ref": "PackageVersionsTableWidgetHandler5fa848259c1d5e388c0df69f05c016dfServiceRole060BA12C", }, ], }, "Type": "AWS::IAM::Policy", }, "SQSDLQStatsWidgetHandlerfc176846044f5e56baf2c71723501885366DDBD5": { "DependsOn": [ "SQSDLQStatsWidgetHandlerfc176846044f5e56baf2c71723501885ServiceRoleDefaultPolicyF8BBCE33", "SQSDLQStatsWidgetHandlerfc176846044f5e56baf2c71723501885ServiceRole2F995712", ], "Properties": { "Architectures": [ "arm64", ], "Code": { "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-\${AWS::AccountId}-\${AWS::Region}", }, "S3Key": "7c0613ce606b9e6308279baae700fdb3c50869b33d0bb84e39f5f6ca21d9bdde.zip", }, "Description": "[ConstructHub/SQSDLQWidget] Is a custom CloudWatch widget handler", "Handler": "index.handler", "Role": { "Fn::GetAtt": [ "SQSDLQStatsWidgetHandlerfc176846044f5e56baf2c71723501885ServiceRole2F995712", "Arn", ], }, "Runtime": "nodejs16.x", "Tags": [ { "Key": "function-purpose", "Value": "cloudwatch-custom-widget", }, ], }, "Type": "AWS::Lambda::Function", }, "SQSDLQStatsWidgetHandlerfc176846044f5e56baf2c71723501885ServiceRole2F995712": { "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": "function-purpose", "Value": "cloudwatch-custom-widget", }, ], }, "Type": "AWS::IAM::Role", }, "SQSDLQStatsWidgetHandlerfc176846044f5e56baf2c71723501885ServiceRoleDefaultPolicyF8BBCE33": { "Properties": { "PolicyDocument": { "Statement": [ { "Action": "cloudwatch:GetMetricData", "Effect": "Allow", "Resource": "*", }, ], "Version": "2012-10-17", }, "PolicyName": "SQSDLQStatsWidgetHandlerfc176846044f5e56baf2c71723501885ServiceRoleDefaultPolicyF8BBCE33", "Roles": [ { "Ref": "SQSDLQStatsWidgetHandlerfc176846044f5e56baf2c71723501885ServiceRole2F995712", }, ], }, "Type": "AWS::IAM::Policy", }, }, "Rules": { "CheckBootstrapVersion": { "Assertions": [ { "Assert": { "Fn::Not": [ { "Fn::Contains": [ [ "1", "2", "3", "4", "5", ], { "Ref": "BootstrapVersion", }, ], }, ], }, "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.", }, ], }, }, } `;