{ "author": { "email": "pahudnet@gmail.com", "name": "Pahud Hsieh", "roles": [ "author" ] }, "dependencies": { "@aws-cdk/aws-certificatemanager": "^1.95.2", "@aws-cdk/aws-ec2": "^1.95.2", "@aws-cdk/aws-ecs": "^1.95.2", "@aws-cdk/aws-efs": "^1.95.2", "@aws-cdk/aws-elasticloadbalancingv2": "^1.95.2", "@aws-cdk/aws-events": "^1.95.2", "@aws-cdk/aws-events-targets": "^1.95.2", "@aws-cdk/aws-iam": "^1.95.2", "@aws-cdk/aws-lambda": "^1.95.2", "@aws-cdk/aws-logs": "^1.95.2", "@aws-cdk/aws-rds": "^1.95.2", "@aws-cdk/aws-route53": "^1.95.2", "@aws-cdk/aws-route53-targets": "^1.95.2", "@aws-cdk/aws-secretsmanager": "^1.95.2", "@aws-cdk/core": "^1.95.2", "constructs": "^3.2.27" }, "dependencyClosure": { "@aws-cdk/assets": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.Assets", "packageId": "Amazon.CDK.Assets" }, "java": { "maven": { "artifactId": "cdk-assets", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.assets" }, "js": { "npm": "@aws-cdk/assets" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.assets", "module": "aws_cdk.assets" } } }, "@aws-cdk/aws-acmpca": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.ACMPCA", "packageId": "Amazon.CDK.AWS.ACMPCA" }, "java": { "maven": { "artifactId": "acmpca", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.acmpca" }, "js": { "npm": "@aws-cdk/aws-acmpca" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-acmpca", "module": "aws_cdk.aws_acmpca" } } }, "@aws-cdk/aws-apigateway": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.APIGateway", "packageId": "Amazon.CDK.AWS.APIGateway" }, "java": { "maven": { "artifactId": "apigateway", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.apigateway" }, "js": { "npm": "@aws-cdk/aws-apigateway" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-apigateway", "module": "aws_cdk.aws_apigateway" } } }, "@aws-cdk/aws-applicationautoscaling": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.ApplicationAutoScaling", "packageId": "Amazon.CDK.AWS.ApplicationAutoScaling" }, "java": { "maven": { "artifactId": "applicationautoscaling", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.applicationautoscaling" }, "js": { "npm": "@aws-cdk/aws-applicationautoscaling" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-applicationautoscaling", "module": "aws_cdk.aws_applicationautoscaling" } } }, "@aws-cdk/aws-autoscaling": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.AutoScaling", "packageId": "Amazon.CDK.AWS.AutoScaling" }, "java": { "maven": { "artifactId": "autoscaling", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.autoscaling" }, "js": { "npm": "@aws-cdk/aws-autoscaling" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-autoscaling", "module": "aws_cdk.aws_autoscaling" } } }, "@aws-cdk/aws-autoscaling-common": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.AutoScaling.Common", "packageId": "Amazon.CDK.AWS.AutoScaling.Common" }, "java": { "maven": { "artifactId": "autoscaling-common", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.autoscaling.common" }, "js": { "npm": "@aws-cdk/aws-autoscaling-common" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-autoscaling-common", "module": "aws_cdk.aws_autoscaling_common" } } }, "@aws-cdk/aws-autoscaling-hooktargets": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.AutoScaling.HookTargets", "packageId": "Amazon.CDK.AWS.AutoScaling.HookTargets" }, "java": { "maven": { "artifactId": "autoscaling-hooktargets", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.autoscaling.hooktargets" }, "js": { "npm": "@aws-cdk/aws-autoscaling-hooktargets" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-autoscaling-hooktargets", "module": "aws_cdk.aws_autoscaling_hooktargets" } } }, "@aws-cdk/aws-certificatemanager": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.CertificateManager", "packageId": "Amazon.CDK.AWS.CertificateManager" }, "java": { "maven": { "artifactId": "certificatemanager", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.certificatemanager" }, "js": { "npm": "@aws-cdk/aws-certificatemanager" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-certificatemanager", "module": "aws_cdk.aws_certificatemanager" } } }, "@aws-cdk/aws-cloudformation": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.CloudFormation", "packageId": "Amazon.CDK.AWS.CloudFormation" }, "java": { "maven": { "artifactId": "cloudformation", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.cloudformation" }, "js": { "npm": "@aws-cdk/aws-cloudformation" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-cloudformation", "module": "aws_cdk.aws_cloudformation" } } }, "@aws-cdk/aws-cloudfront": { "submodules": { "@aws-cdk/aws-cloudfront.experimental": {} }, "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.CloudFront", "packageId": "Amazon.CDK.AWS.CloudFront" }, "java": { "maven": { "artifactId": "cloudfront", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.cloudfront" }, "js": { "npm": "@aws-cdk/aws-cloudfront" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-cloudfront", "module": "aws_cdk.aws_cloudfront" } } }, "@aws-cdk/aws-cloudwatch": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.CloudWatch", "packageId": "Amazon.CDK.AWS.CloudWatch" }, "java": { "maven": { "artifactId": "cloudwatch", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.cloudwatch" }, "js": { "npm": "@aws-cdk/aws-cloudwatch" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-cloudwatch", "module": "aws_cdk.aws_cloudwatch" } } }, "@aws-cdk/aws-codebuild": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.CodeBuild", "packageId": "Amazon.CDK.AWS.CodeBuild" }, "java": { "maven": { "artifactId": "codebuild", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.codebuild" }, "js": { "npm": "@aws-cdk/aws-codebuild" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-codebuild", "module": "aws_cdk.aws_codebuild" } } }, "@aws-cdk/aws-codecommit": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.CodeCommit", "packageId": "Amazon.CDK.AWS.CodeCommit" }, "java": { "maven": { "artifactId": "codecommit", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.codecommit" }, "js": { "npm": "@aws-cdk/aws-codecommit" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-codecommit", "module": "aws_cdk.aws_codecommit" } } }, "@aws-cdk/aws-codeguruprofiler": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.CodeGuruProfiler", "packageId": "Amazon.CDK.AWS.CodeGuruProfiler" }, "java": { "maven": { "artifactId": "codeguruprofiler", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.codeguruprofiler" }, "js": { "npm": "@aws-cdk/aws-codeguruprofiler" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-codeguruprofiler", "module": "aws_cdk.aws_codeguruprofiler" } } }, "@aws-cdk/aws-codepipeline": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.CodePipeline", "packageId": "Amazon.CDK.AWS.CodePipeline" }, "java": { "maven": { "artifactId": "codepipeline", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.codepipeline" }, "js": { "npm": "@aws-cdk/aws-codepipeline" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-codepipeline", "module": "aws_cdk.aws_codepipeline" } } }, "@aws-cdk/aws-codestarnotifications": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.CodeStarNotifications", "packageId": "Amazon.CDK.AWS.CodeStarNotifications" }, "java": { "maven": { "artifactId": "codestarnotifications", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.codestarnotifications" }, "js": { "npm": "@aws-cdk/aws-codestarnotifications" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-codestarnotifications", "module": "aws_cdk.aws_codestarnotifications" } } }, "@aws-cdk/aws-cognito": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.Cognito", "packageId": "Amazon.CDK.AWS.Cognito" }, "java": { "maven": { "artifactId": "cognito", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.cognito" }, "js": { "npm": "@aws-cdk/aws-cognito" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-cognito", "module": "aws_cdk.aws_cognito" } } }, "@aws-cdk/aws-ec2": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.EC2", "packageId": "Amazon.CDK.AWS.EC2" }, "java": { "maven": { "artifactId": "ec2", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.ec2" }, "js": { "npm": "@aws-cdk/aws-ec2" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-ec2", "module": "aws_cdk.aws_ec2" } } }, "@aws-cdk/aws-ecr": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.ECR", "packageId": "Amazon.CDK.AWS.ECR" }, "java": { "maven": { "artifactId": "ecr", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.ecr" }, "js": { "npm": "@aws-cdk/aws-ecr" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-ecr", "module": "aws_cdk.aws_ecr" } } }, "@aws-cdk/aws-ecr-assets": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.Ecr.Assets", "packageId": "Amazon.CDK.ECR.Assets" }, "java": { "maven": { "artifactId": "ecr-assets", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.ecr.assets" }, "js": { "npm": "@aws-cdk/aws-ecr-assets" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-ecr-assets", "module": "aws_cdk.aws_ecr_assets" } } }, "@aws-cdk/aws-ecs": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.ECS", "packageId": "Amazon.CDK.AWS.ECS" }, "java": { "maven": { "artifactId": "ecs", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.ecs" }, "js": { "npm": "@aws-cdk/aws-ecs" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-ecs", "module": "aws_cdk.aws_ecs" } } }, "@aws-cdk/aws-efs": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.EFS", "packageId": "Amazon.CDK.AWS.EFS" }, "java": { "maven": { "artifactId": "efs", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.efs" }, "js": { "npm": "@aws-cdk/aws-efs" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-efs", "module": "aws_cdk.aws_efs" } } }, "@aws-cdk/aws-elasticloadbalancing": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.ElasticLoadBalancing", "packageId": "Amazon.CDK.AWS.ElasticLoadBalancing" }, "java": { "maven": { "artifactId": "elasticloadbalancing", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.elasticloadbalancing" }, "js": { "npm": "@aws-cdk/aws-elasticloadbalancing" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-elasticloadbalancing", "module": "aws_cdk.aws_elasticloadbalancing" } } }, "@aws-cdk/aws-elasticloadbalancingv2": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.ElasticLoadBalancingV2", "packageId": "Amazon.CDK.AWS.ElasticLoadBalancingV2" }, "java": { "maven": { "artifactId": "elasticloadbalancingv2", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.elasticloadbalancingv2" }, "js": { "npm": "@aws-cdk/aws-elasticloadbalancingv2" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-elasticloadbalancingv2", "module": "aws_cdk.aws_elasticloadbalancingv2" } } }, "@aws-cdk/aws-events": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.Events", "packageId": "Amazon.CDK.AWS.Events" }, "java": { "maven": { "artifactId": "events", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.events" }, "js": { "npm": "@aws-cdk/aws-events" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-events", "module": "aws_cdk.aws_events" } } }, "@aws-cdk/aws-events-targets": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.Events.Targets", "packageId": "Amazon.CDK.AWS.Events.Targets" }, "java": { "maven": { "artifactId": "events-targets", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.events.targets" }, "js": { "npm": "@aws-cdk/aws-events-targets" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-events-targets", "module": "aws_cdk.aws_events_targets" } } }, "@aws-cdk/aws-globalaccelerator": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.GlobalAccelerator", "packageId": "Amazon.CDK.AWS.GlobalAccelerator" }, "java": { "maven": { "artifactId": "globalaccelerator", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.globalaccelerator" }, "js": { "npm": "@aws-cdk/aws-globalaccelerator" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-globalaccelerator", "module": "aws_cdk.aws_globalaccelerator" } } }, "@aws-cdk/aws-iam": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.IAM", "packageId": "Amazon.CDK.AWS.IAM" }, "java": { "maven": { "artifactId": "iam", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.iam" }, "js": { "npm": "@aws-cdk/aws-iam" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-iam", "module": "aws_cdk.aws_iam" } } }, "@aws-cdk/aws-kinesis": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.Kinesis", "packageId": "Amazon.CDK.AWS.Kinesis" }, "java": { "maven": { "artifactId": "kinesis", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.kinesis" }, "js": { "npm": "@aws-cdk/aws-kinesis" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-kinesis", "module": "aws_cdk.aws_kinesis" } } }, "@aws-cdk/aws-kinesisfirehose": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.KinesisFirehose", "packageId": "Amazon.CDK.AWS.KinesisFirehose" }, "java": { "maven": { "artifactId": "kinesisfirehose", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.kinesisfirehose" }, "js": { "npm": "@aws-cdk/aws-kinesisfirehose" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-kinesisfirehose", "module": "aws_cdk.aws_kinesisfirehose" } } }, "@aws-cdk/aws-kms": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.KMS", "packageId": "Amazon.CDK.AWS.KMS" }, "java": { "maven": { "artifactId": "kms", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.kms" }, "js": { "npm": "@aws-cdk/aws-kms" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-kms", "module": "aws_cdk.aws_kms" } } }, "@aws-cdk/aws-lambda": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.Lambda", "packageId": "Amazon.CDK.AWS.Lambda" }, "java": { "maven": { "artifactId": "lambda", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.lambda" }, "js": { "npm": "@aws-cdk/aws-lambda" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-lambda", "module": "aws_cdk.aws_lambda" } } }, "@aws-cdk/aws-logs": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.Logs", "packageId": "Amazon.CDK.AWS.Logs" }, "java": { "maven": { "artifactId": "logs", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.logs" }, "js": { "npm": "@aws-cdk/aws-logs" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-logs", "module": "aws_cdk.aws_logs" } } }, "@aws-cdk/aws-rds": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.RDS", "packageId": "Amazon.CDK.AWS.RDS" }, "java": { "maven": { "artifactId": "rds", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.rds" }, "js": { "npm": "@aws-cdk/aws-rds" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-rds", "module": "aws_cdk.aws_rds" } } }, "@aws-cdk/aws-route53": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.Route53", "packageId": "Amazon.CDK.AWS.Route53" }, "java": { "maven": { "artifactId": "route53", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.route53" }, "js": { "npm": "@aws-cdk/aws-route53" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-route53", "module": "aws_cdk.aws_route53" } } }, "@aws-cdk/aws-route53-targets": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.Route53.Targets", "packageId": "Amazon.CDK.AWS.Route53.Targets" }, "java": { "maven": { "artifactId": "route53-targets", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.route53.targets" }, "js": { "npm": "@aws-cdk/aws-route53-targets" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-route53-targets", "module": "aws_cdk.aws_route53_targets" } } }, "@aws-cdk/aws-s3": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.S3", "packageId": "Amazon.CDK.AWS.S3" }, "java": { "maven": { "artifactId": "s3", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.s3" }, "js": { "npm": "@aws-cdk/aws-s3" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-s3", "module": "aws_cdk.aws_s3" } } }, "@aws-cdk/aws-s3-assets": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.S3.Assets", "packageId": "Amazon.CDK.AWS.S3.Assets" }, "java": { "maven": { "artifactId": "s3-assets", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.s3.assets" }, "js": { "npm": "@aws-cdk/aws-s3-assets" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-s3-assets", "module": "aws_cdk.aws_s3_assets" } } }, "@aws-cdk/aws-sam": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.SAM", "packageId": "Amazon.CDK.AWS.SAM" }, "java": { "maven": { "artifactId": "sam", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.sam" }, "js": { "npm": "@aws-cdk/aws-sam" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-sam", "module": "aws_cdk.aws_sam" } } }, "@aws-cdk/aws-secretsmanager": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.SecretsManager", "packageId": "Amazon.CDK.AWS.SecretsManager" }, "java": { "maven": { "artifactId": "secretsmanager", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.secretsmanager" }, "js": { "npm": "@aws-cdk/aws-secretsmanager" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-secretsmanager", "module": "aws_cdk.aws_secretsmanager" } } }, "@aws-cdk/aws-servicediscovery": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.ServiceDiscovery", "packageId": "Amazon.CDK.AWS.ServiceDiscovery" }, "java": { "maven": { "artifactId": "servicediscovery", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.servicediscovery" }, "js": { "npm": "@aws-cdk/aws-servicediscovery" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-servicediscovery", "module": "aws_cdk.aws_servicediscovery" } } }, "@aws-cdk/aws-signer": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.Signer", "packageId": "Amazon.CDK.AWS.Signer" }, "java": { "maven": { "artifactId": "signer", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.signer" }, "js": { "npm": "@aws-cdk/aws-signer" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-signer", "module": "aws_cdk.aws_signer" } } }, "@aws-cdk/aws-sns": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.SNS", "packageId": "Amazon.CDK.AWS.SNS" }, "java": { "maven": { "artifactId": "sns", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.sns" }, "js": { "npm": "@aws-cdk/aws-sns" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-sns", "module": "aws_cdk.aws_sns" } } }, "@aws-cdk/aws-sns-subscriptions": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.SNS.Subscriptions", "packageId": "Amazon.CDK.AWS.SNS.Subscriptions" }, "java": { "maven": { "artifactId": "sns-subscriptions", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.sns.subscriptions" }, "js": { "npm": "@aws-cdk/aws-sns-subscriptions" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-sns-subscriptions", "module": "aws_cdk.aws_sns_subscriptions" } } }, "@aws-cdk/aws-sqs": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.SQS", "packageId": "Amazon.CDK.AWS.SQS" }, "java": { "maven": { "artifactId": "sqs", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.sqs" }, "js": { "npm": "@aws-cdk/aws-sqs" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-sqs", "module": "aws_cdk.aws_sqs" } } }, "@aws-cdk/aws-ssm": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.SSM", "packageId": "Amazon.CDK.AWS.SSM" }, "java": { "maven": { "artifactId": "ssm", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.ssm" }, "js": { "npm": "@aws-cdk/aws-ssm" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-ssm", "module": "aws_cdk.aws_ssm" } } }, "@aws-cdk/aws-stepfunctions": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.AWS.StepFunctions", "packageId": "Amazon.CDK.AWS.StepFunctions" }, "java": { "maven": { "artifactId": "stepfunctions", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.services.stepfunctions" }, "js": { "npm": "@aws-cdk/aws-stepfunctions" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.aws-stepfunctions", "module": "aws_cdk.aws_stepfunctions" } } }, "@aws-cdk/cloud-assembly-schema": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.CloudAssembly.Schema", "packageId": "Amazon.CDK.CloudAssembly.Schema" }, "java": { "maven": { "artifactId": "cdk-cloud-assembly-schema", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.cloudassembly.schema" }, "js": { "npm": "@aws-cdk/cloud-assembly-schema" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.cloud-assembly-schema", "module": "aws_cdk.cloud_assembly_schema" } } }, "@aws-cdk/core": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK", "packageId": "Amazon.CDK" }, "java": { "maven": { "artifactId": "core", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.core" }, "js": { "npm": "@aws-cdk/core" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.core", "module": "aws_cdk.core" } } }, "@aws-cdk/custom-resources": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.CustomResources", "packageId": "Amazon.CDK.AWS.CustomResources" }, "java": { "maven": { "artifactId": "cdk-customresources", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.customresources" }, "js": { "npm": "@aws-cdk/custom-resources" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.custom-resources", "module": "aws_cdk.custom_resources" } } }, "@aws-cdk/cx-api": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.CXAPI", "packageId": "Amazon.CDK.CXAPI" }, "java": { "maven": { "artifactId": "cdk-cx-api", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.cxapi" }, "js": { "npm": "@aws-cdk/cx-api" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.cx-api", "module": "aws_cdk.cx_api" } } }, "@aws-cdk/region-info": { "targets": { "dotnet": { "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/master/logo/default-256-dark.png", "namespace": "Amazon.CDK.RegionInfo", "packageId": "Amazon.CDK.RegionInfo" }, "java": { "maven": { "artifactId": "cdk-region-info", "groupId": "software.amazon.awscdk" }, "package": "software.amazon.awscdk.regioninfo" }, "js": { "npm": "@aws-cdk/region-info" }, "python": { "classifiers": [ "Framework :: AWS CDK", "Framework :: AWS CDK :: 1" ], "distName": "aws-cdk.region-info", "module": "aws_cdk.region_info" } } }, "constructs": { "targets": { "dotnet": { "namespace": "Constructs", "packageId": "Constructs" }, "go": { "moduleName": "github.com/aws/constructs-go" }, "java": { "maven": { "artifactId": "constructs", "groupId": "software.constructs" }, "package": "software.constructs" }, "js": { "npm": "constructs" }, "python": { "distName": "constructs", "module": "constructs" } } } }, "description": "CDK patterns for serverless container with AWS Fargate", "docs": { "stability": "stable" }, "homepage": "https://github.com/pahud/cdk-fargate-patterns.git", "jsiiVersion": "1.46.0 (build cd08c55)", "keywords": [ "aws", "cdk", "fargate", "serverless" ], "license": "Apache-2.0", "metadata": { "jsii": { "pacmak": { "hasDefaultInterfaces": true } } }, "name": "cdk-fargate-patterns", "readme": { "markdown": "[![NPM version](https://badge.fury.io/js/cdk-fargate-patterns.svg)](https://badge.fury.io/js/cdk-fargate-patterns)\n[![PyPI version](https://badge.fury.io/py/cdk-fargate-patterns.svg)](https://badge.fury.io/py/cdk-fargate-patterns)\n[![Release](https://github.com/pahud/cdk-fargate-patterns/actions/workflows/release.yml/badge.svg)](https://github.com/pahud/cdk-fargate-patterns/actions/workflows/release.yml)\n\n[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-)\n\n\n# cdk-fargate-patterns\n\nCDK patterns for serverless container with AWS Fargate\n\n# `DualAlbFargateService`\n\n\n![](images/DualAlbFargateService.svg)\n\nInspired by _Vijay Menon_ from the [AWS blog post](https://aws.amazon.com/blogs/containers/how-to-use-multiple-load-balancer-target-group-support-for-amazon-ecs-to-access-internal-and-external-service-endpoint-using-the-same-dns-name/) introduced in 2019, `DualAlbFargateService` allows you to create one or many fargate services with both internet-facing ALB and internal ALB associated with all services. With this pattern, fargate services will be allowed to intercommunicat via internal ALB while external inbound traffic will be spread across the same service tasks through internet-facing ALB.\n\n\nThe sample below will create 3 fargate services associated with both external and internal ALBs. The internal ALB will have an alias(`internal.svc.local`) auto-configured from Route 53 so services can interconnect through the private ALB endpoint.\n\n\n```ts\nnew DualAlbFargateService(stack, 'Service', {\n spot: true, // FARGATE_SPOT only cluster\n tasks: [\n {\n task: orderTask,\n desiredCount: 2,\n external: { port: 443, certificate },\n internal: { port: 80 },\n // customize the service autoscaling policy\n scalingPolicy: {\n maxCapacity: 20,\n requestPerTarget: 1000,\n targetCpuUtilization: 50,\n },\n },\n { task: customerTask, desiredCount: 2, internal: { port: 8080 } },\n { task: productTask, desiredCount: 2, internal: { port: 9090 } },\n\n // support gRPC application.\n // you can use protocolVersion to setting gRPC for your application.\n // you need to specify acm and grpc port.\n // and don't forget to setting healthCheck.healthyGrpcCodes.\n {\n task: task,\n desiredCount: 1,\n internal: { port: 50051, certificate: [cert] },\n external: { port: 50051, certificate: [cert] },\n protocolVersion: elbv2.ApplicationProtocolVersion.GRPC,\n healthCheck: {\n healthyGrpcCodes: '12',\n },\n },\n ],\n route53Ops: {\n zoneName: 'svc.local',\n externalElbRecordName: 'external',\n internalElbRecordName: 'internal',\n },\n});\n```\n\n# `DualNlbFargateService`\n\nSimilar to `DualAlbFargateService`, you are allowed to deploy multiple container services with AWS Fargate as well as external NLB and internal NLB.\n\nTo allowed ingress traffic, you will need to explicitly add ingress rules on the `connections`:\n\n```ts\nconst nlbService = new DualNlbFargateService(stack, 'NLBService', {\n tasks: [...],\n});\n\n// we need this to allow ingress traffic from public internet only for the order service\nnlbService.service[0].connections.allowFromAnyIpv4(ec2.Port.tcp(8080));\n// allow from VPC\nnlbService.service.forEach(s => {\n s.connections.allowFrom(ec2.Peer.ipv4(nlbService.vpc.vpcCidrBlock), ec2.Port.tcp(8080));\n});\n\n```\n\n## ALB Listener Rules Support\n\nTo share the ALB listener with multiple services, use `forwardConditions` to specify custom rules.\n\nThe sample below defines three services sharing a single extneral listener on HTTPS(TCP 443) with different host names while\ninterconnecting internally with different listeners on the internal ALB.\n\n```ts\nnew DualAlbFargateService(stack, 'ALBService', {\n spot: true, // FARGATE_SPOT only cluster\n enableExecuteCommand: true,\n tasks: [\n {\n task: orderTask,\n desiredCount: 2,\n internal: { port: 80 },\n external: {\n port: 443,\n certificate: [cert],\n forwardConditions: [elbv2.ListenerCondition.hostHeaders(['order.example.com'])],\n }\n },\n {\n task: customerTask,\n desiredCount: 1,\n external: {\n port: 443,\n certificate: [cert],\n forwardConditions: [elbv2.ListenerCondition.hostHeaders(['customer.example.com'])],\n },\n internal: { port: 8080 },\n },\n {\n task: productTask,\n desiredCount: 1,\n external: {\n port: 443,\n certificate: [cert],\n forwardConditions: [elbv2.ListenerCondition.hostHeaders(['product.example.com'])],\n },\n internal: { port: 9090 },\n },\n ],\n});\n```\n\n\n\n## Fargate Spot Support\n\nBy enabling the `spot` property, 100% fargate spot tasks will be provisioned to help you save up to 70%. Check more details about [Fargate Spot](https://aws.amazon.com/about-aws/whats-new/2019/12/aws-launches-fargate-spot-save-up-to-70-for-fault-tolerant-applications/?nc1=h_ls). This is a handy catch-all flag to force all tasks to be `FARGATE_SPOT` only.\n\nTo specify mixed strategy with partial `FARGATE` and partial `FARGATE_SPOT`, specify the `capacityProviderStrategy` for individual tasks like.\n\n\n```ts\nnew DualAlbFargateService(stack, 'Service', {\n tasks: [\n {\n task: customerTask,\n internal: { port: 8080 },\n desiredCount: 2,\n capacityProviderStrategy: [\n {\n capacityProvider: 'FARGATE',\n base: 1,\n weight: 1,\n },\n {\n capacityProvider: 'FARGATE_SPOT',\n base: 0,\n weight: 3,\n },\n ],\n },\n ],\n});\n```\nThe custom capacity provider strategy will be applied if `capacityProviderStretegy` is specified, otherwise, 100% spot will be used when `spot: true`. The default policy is 100% Fargate on-demand.\n\n### Fargate Spot Termination Handling\n\nBy default, if fargate spot capacity is available in the cluster, a fargate spot termination handler Lambda function will be created with proper IAM role policies to handle the termination event to ensure we deregister the fargate spot task from target groups gracefully. While it's a recommended feature, you may opt out with `spotTerminationHandler: false`.\n\n```ts\nnew DualAlbFargateService(stack, 'Service', {\n spot: true, // FARGATE_SPOT only cluster\n spotTerminationHandler: false, // opt-out\n ...\n}\n```\n\n## ECS Exec\n\nSimply turn on the `enableExecuteCommand` property to enable the [ECS Exec](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html) support for all services.\n\n## ECS deployment circuit breaker\n\nECS deployment circuit breaker automatically rolls back unhealthy service deployments without the need for manual intervention. By default this feature is enabled, you can opt out with `circuitBreaker: false`. Read the [docummentation](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html) or [blog post](https://aws.amazon.com/tw/blogs/containers/announcing-amazon-ecs-deployment-circuit-breaker/) for more details.\n\n## Internal, External or Both\n\nSpecify the `internal` or `external` property to expose your service internally, externally or both.\n\nThe `certificate` property implies `HTTPS` protocol.\n\n```ts\nnew DualAlbFargateService(stack, 'Service', {\n tasks: [\n // this task is internal only\n { task: task1, internal: { port: 8080 } },\n // this task is external only\n { task: task2, external: { port: 8081 } },\n // this task is both external(HTTPS) and internal(HTTP) facing\n {\n task: task3,\n external: { port: 443, certificate: myAcmCert },\n internal: { port: 8888 },\n },\n ],\n });\n```\n\n## VPC Subnets\n\nBy default, all tasks will be deployed in the private subnets. You will need the NAT gateway for the default route associated with the private subnets to ensure the task can successfully pull the container images.\n\nHowever, you are allowed to specify `vpcSubnets` to customize the subnet selection.\n\nTo deploy all tasks in public subnets, one per AZ:\n\n```ts\nnew DualAlbFargateService(stack, 'Service', {\n vpcSubnets: {\n subnetType: ec2.SubnetType.PUBLIC,\n onePerAz: true,\n },\n ...\n});\n```\nThis will implicitly enable the `auto assign public IP` for each fargate task so the task can successfully pull the container images from external registry. However, the ingress traffic will still be balanced via the external ALB.\n\nTo deploy all tasks in specific subnets:\n\n```ts\nnew DualAlbFargateService(stack, 'Service', {\n vpcSubnets: {\n subnets: [\n ec2.Subnet.fromSubnetId(stack, 'sub-1a', 'subnet-0e9460dbcfc4cf6ee'),\n ec2.Subnet.fromSubnetId(stack, 'sub-1b', 'subnet-0562f666bdf5c29af'),\n ec2.Subnet.fromSubnetId(stack, 'sub-1c', 'subnet-00ab15c0022872f06'),\n ],\n },\n ...\n});\n```\n\n### Import an existing Cluster\n!!! Before using an existing `ECS Cluster`, please make sure you have the following:\n- see : [Adding Fargate capacity providers to an existing cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-capacity-providers.html#fargate-capacity-providers-existing-cluster)\n```ts\nconst vpc = ec2.Vpc.fromLookup(stack, 'defVpc', { isDefault: true });\nconst sg = new ec2.SecurityGroup(stack, 'demo-sg', {\n vpc,\n});\nconst existCluster = ecs.Cluster.fromClusterAttributes(stack, 'existCluster', {\n securityGroups: [sg],\n clusterName: 'existCluster',\n vpc,\n});\n\nnew DualAlbFargateService(stack, 'Service', {\n enableExecuteCommand: true,\n cluster: existCluster,\n tasks: [\n {\n task: nginx,\n desiredCount: 1,\n external: { port: 80 },\n capacityProviderStrategy: [{\n capacityProvider: 'FARGATE_SPOT',\n weight: 1,\n }],\n },\n ],\n});\n```\n\n\n## Sample Application\n\nThis repository comes with a sample applicaiton with 3 services in Golang. On deployment, the `Order` service will be exposed externally on external ALB port `80` and all requests to the `Order` service will trigger sub-requests internally to another other two services(`product` and `customer`) through the internal ALB and eventually aggregate the response back to the client.\n\n\n![](images/DualAlbFargateService.svg)\n\n## Deploy\n\nTo deploy the sample application in you default VPC:\n\n```sh\n// install first\n$ yarn install\n// compile the ts to js\n$ yarn build\n$ npx cdk --app lib/integ.default.js -c use_default_vpc=1 diff\n$ npx cdk --app lib/integ.default.js -c use_default_vpc=1 deploy\n```\n\nTo deploy with HTTPS-only with existing ACM certificate in your default VPC:\n\n```sh\n$ npx cdk --app lib/integ.default.js deploy -c use_default_vpc=1 -c ACM_CERT_ARN=\n```\n\nOn deployment complete, you will see the external ALB endpoint in the CDK output. `cURL` the external HTTP endpoint and you should be able to see the aggregated response.\n\n\n```sh\n$ curl http://demo-Servi-EH1OINYDWDU9-1397122594.ap-northeast-1.elb.amazonaws.com\nor\n$ curl https://\n\n{\"service\":\"order\", \"version\":\"1.0\"}\n{\"service\":\"product\",\"version\":\"1.0\"}\n{\"service\":\"customer\",\"version\":\"1.0\"}\n```\n\n# `WordPress`\n\nUse the `WordPress` construct to create a serverless **WordPress** service with AWS Fargate, Amazon EFS filesystem and Aurora serverless database. All credentials auto generated from the **AWS Secret Manager** and securely inject the credentials into the serverless container with the auto generated IAM task execution role.\n\n```ts\nnew WordPress(stack, 'WP', {\n auroraServerless: true,\n spot: true,\n enableExecuteCommand: true,\n});\n```\n\n# `Laravel`\n\nThe `Laravl` construct is provided as a high-level abstraction that allows you to create a modern Laravel environment running on `AWS Fargate` and `Amazon Aurora Serverless`. Here comes two variants as the reference:\n\n**laravel-bitnami** - based on [bitnami/laravel](https://hub.docker.com/r/bitnami/laravel/) with `artisan` running as the built-in web server.\n\n**laravel-nginx-php-fpm** - laravel with nginx and php-fpm maintained by [Ernest Chiang](https://github.com/dwchiang).\n\nSimply point `code` to your local Laravel codebase and it takes care everything else for you.\n\n## Samples\n\n```ts\n/**\n * laravel-bitnami\n */\nnew Laravel(stack, 'LaravelBitnamiDemo', {\n auroraServerless: true,\n spot: true,\n enableExecuteCommand: true,\n code: path.join(__dirname, '../services/laravel-bitnami'),\n containerPort: 3000,\n loadbalancer: { port: 80 },\n});\n\n/**\n * laravel-nginx-php-fpm\n */\nnew Laravel(stack, 'LaravelNginxDemo', {\n auroraServerless: true,\n spot: true,\n enableExecuteCommand: true,\n code: path.join(__dirname, '../services/laravel-nginx-php-fpm'),\n loadbalancer: { port: 80 },\n});\n```\n\nSee [integ.laravel.ts](src/integ.laravel.ts) for the full code sample.\n\n\n# Local development and testing\n\nThe [docker-compose.yml](./services/docker-compose.yml) is provided with all sample services in the repository. To bring up all services locally, run:\n\n```sh\n$ cd services\n$ docker compose up\n```\nUse `cURL` to test locally:\n\n```\ncurl http://localhost\n```\nResponse:\n```\n{\"service\":\"order\",\"version\":\"1.0\"}\n{\"service\":\"product\",\"version\":\"1.0\"}\n{\"service\":\"customer\",\"version\":\"1.0\"}\n```\n\n# FAQ\n\nQ: What is the difference between `cdk-fargate-patterns` and [aws-ecs-patterns](https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk/aws-ecs-patterns)?\n\nA: `aws-ecs-patterns` comes with a few patterns around Amazon ECS with AWS Fargate or AWS EC2 and focuses on some scenarios with single service and single ELB like `ApplicationLoadBalancedFargateService` and `NetworkLoadBalancedFargateService`. However, `cdk-fargate-patterns` is trying to explore use cases on modern application which usually comes with multiple container services grouped as a deployment with inter-service connectivity as well as ingress traffic from external internet by seperating the internal ELB from the external one.\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\n\n\n\n \n \n \n \n \n \n \n \n
\"\"/
Neil Kuan

🎨 💻 ⚠️ 💡
\"\"/
Ernest Chiang

🤔 ⚠️ 💻 💡
\"\"/
Clarence

💡 💻
\"\"/
paper5487

🐛
\"\"/
Peter Larsson

🤔
\"\"/
LeoChien-SC

🐛
\n\n\n\n\n\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n" }, "repository": { "type": "git", "url": "https://github.com/pahud/cdk-fargate-patterns.git" }, "schema": "jsii/0.10.0", "targets": { "js": { "npm": "cdk-fargate-patterns" }, "python": { "distName": "cdk-fargate-patterns", "module": "cdk_fargate_patterns" } }, "types": { "cdk-fargate-patterns.BaseFargateService": { "abstract": true, "assembly": "cdk-fargate-patterns", "base": "@aws-cdk/core.Construct", "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.BaseFargateService", "initializer": { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/main.ts", "line": 226 }, "parameters": [ { "name": "scope", "type": { "fqn": "@aws-cdk/core.Construct" } }, { "name": "id", "type": { "primitive": "string" } }, { "name": "props", "type": { "fqn": "cdk-fargate-patterns.BaseFargateServiceProps" } } ] }, "kind": "class", "locationInModule": { "filename": "src/main.ts", "line": 206 }, "name": "BaseFargateService", "properties": [ { "docs": { "stability": "stable", "summary": "The service(s) created from the task(s)." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 214 }, "name": "service", "type": { "collection": { "elementtype": { "fqn": "@aws-cdk/aws-ecs.FargateService" }, "kind": "array" } } }, { "docs": { "stability": "stable", "summary": "The VPC." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 210 }, "name": "vpc", "type": { "fqn": "@aws-cdk/aws-ec2.IVpc" } }, { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/main.ts", "line": 220 }, "name": "enableLoadBalancerAlias", "protected": true, "type": { "primitive": "boolean" } }, { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/main.ts", "line": 217 }, "name": "hasExternalLoadBalancer", "protected": true, "type": { "primitive": "boolean" } }, { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/main.ts", "line": 218 }, "name": "hasInternalLoadBalancer", "protected": true, "type": { "primitive": "boolean" } }, { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/main.ts", "line": 219 }, "name": "vpcSubnets", "protected": true, "type": { "fqn": "@aws-cdk/aws-ec2.SubnetSelection" } }, { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/main.ts", "line": 216 }, "name": "zoneName", "protected": true, "type": { "primitive": "string" } } ], "symbolId": "src/main:BaseFargateService" }, "cdk-fargate-patterns.BaseFargateServiceProps": { "assembly": "cdk-fargate-patterns", "datatype": true, "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.BaseFargateServiceProps", "kind": "interface", "locationInModule": { "filename": "src/main.ts", "line": 14 }, "name": "BaseFargateServiceProps", "properties": [ { "abstract": true, "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 27 }, "name": "tasks", "type": { "collection": { "elementtype": { "fqn": "cdk-fargate-patterns.FargateTaskProps" }, "kind": "array" } } }, { "abstract": true, "docs": { "default": "true", "see": "- https://aws.amazon.com/tw/blogs/containers/announcing-amazon-ecs-deployment-circuit-breaker/", "stability": "stable", "summary": "Enable the ECS service circuit breaker." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 59 }, "name": "circuitBreaker", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "default": "- create a new ECS Cluster.", "stability": "stable", "summary": "Use existing ECS Cluster." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 25 }, "name": "cluster", "optional": true, "type": { "fqn": "@aws-cdk/aws-ecs.ICluster" } }, { "abstract": true, "docs": { "default": "- Create vpc and enable Fargate Capacity Providers.", "stability": "stable", "summary": "The properties used to define an ECS cluster." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 20 }, "name": "clusterProps", "optional": true, "type": { "fqn": "@aws-cdk/aws-ecs.ClusterProps" } }, { "abstract": true, "docs": { "default": "false", "see": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html", "stability": "stable", "summary": "Whether to enable ECS Exec support." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 45 }, "name": "enableExecuteCommand", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 28 }, "name": "route53Ops", "optional": true, "type": { "fqn": "cdk-fargate-patterns.Route53Options" } }, { "abstract": true, "docs": { "default": "false", "stability": "stable", "summary": "create a FARGATE_SPOT only cluster." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 33 }, "name": "spot", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "default": "true", "see": "https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-capacity-providers.html#fargate-capacity-providers-termination", "stability": "stable", "summary": "Enable the fargate spot termination handler." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 39 }, "name": "spotTerminationHandler", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 26 }, "name": "vpc", "optional": true, "type": { "fqn": "@aws-cdk/aws-ec2.IVpc" } }, { "abstract": true, "docs": { "default": "-\n{\nsubnetType: ec2.SubnetType.PRIVATE,\n}", "stability": "stable", "summary": "The subnets to associate with the service." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 53 }, "name": "vpcSubnets", "optional": true, "type": { "fqn": "@aws-cdk/aws-ec2.SubnetSelection" } } ], "symbolId": "src/main:BaseFargateServiceProps" }, "cdk-fargate-patterns.Database": { "assembly": "cdk-fargate-patterns", "base": "@aws-cdk/core.Construct", "docs": { "stability": "stable", "summary": "Represents the database instance or database cluster." }, "fqn": "cdk-fargate-patterns.Database", "initializer": { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/common/db.ts", "line": 100 }, "parameters": [ { "name": "scope", "type": { "fqn": "@aws-cdk/core.Construct" } }, { "name": "id", "type": { "primitive": "string" } }, { "name": "props", "type": { "fqn": "cdk-fargate-patterns.DatabaseProps" } } ] }, "kind": "class", "locationInModule": { "filename": "src/common/db.ts", "line": 92 }, "name": "Database", "properties": [ { "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 94 }, "name": "clusterEndpointHostname", "type": { "primitive": "string" } }, { "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 95 }, "name": "clusterIdentifier", "type": { "primitive": "string" } }, { "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 97 }, "name": "connections", "type": { "fqn": "@aws-cdk/aws-ec2.Connections" } }, { "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 96 }, "name": "secret", "type": { "fqn": "@aws-cdk/aws-secretsmanager.ISecret" } }, { "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 93 }, "name": "vpc", "type": { "fqn": "@aws-cdk/aws-ec2.IVpc" } } ], "symbolId": "src/common/db:Database" }, "cdk-fargate-patterns.DatabaseCofig": { "assembly": "cdk-fargate-patterns", "datatype": true, "docs": { "stability": "stable", "summary": "Database configuration." }, "fqn": "cdk-fargate-patterns.DatabaseCofig", "kind": "interface", "locationInModule": { "filename": "src/common/db.ts", "line": 69 }, "name": "DatabaseCofig", "properties": [ { "abstract": true, "docs": { "stability": "stable", "summary": "The database connnections." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 77 }, "name": "connections", "type": { "fqn": "@aws-cdk/aws-ec2.Connections" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "The endpoint address for the database." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 81 }, "name": "endpoint", "type": { "primitive": "string" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "The databasae identifier." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 85 }, "name": "identifier", "type": { "primitive": "string" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "The database secret." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 73 }, "name": "secret", "type": { "fqn": "@aws-cdk/aws-secretsmanager.ISecret" } } ], "symbolId": "src/common/db:DatabaseCofig" }, "cdk-fargate-patterns.DatabaseProps": { "assembly": "cdk-fargate-patterns", "datatype": true, "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.DatabaseProps", "kind": "interface", "locationInModule": { "filename": "src/common/db.ts", "line": 7 }, "name": "DatabaseProps", "properties": [ { "abstract": true, "docs": { "stability": "stable", "summary": "The VPC for the database." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 11 }, "name": "vpc", "type": { "fqn": "@aws-cdk/aws-ec2.IVpc" } }, { "abstract": true, "docs": { "default": "- the whole VPC CIDR", "stability": "stable", "summary": "Allow database connection." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 57 }, "name": "allowFrom", "optional": true, "type": { "fqn": "@aws-cdk/aws-ec2.IConnectable" } }, { "abstract": true, "docs": { "default": "false", "stability": "stable", "summary": "enable aurora serverless." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 39 }, "name": "auroraServerless", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "default": "- 7 days", "stability": "stable", "summary": "database backup retension." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 52 }, "name": "backupRetention", "optional": true, "type": { "fqn": "@aws-cdk/core.Duration" } }, { "abstract": true, "docs": { "default": "rds.AuroraMysqlEngineVersion.VER_2_09_1", "stability": "stable", "summary": "The database cluster engine." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 33 }, "name": "clusterEngine", "optional": true, "type": { "fqn": "@aws-cdk/aws-rds.IClusterEngine" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "VPC subnets for database." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 15 }, "name": "databaseSubnets", "optional": true, "type": { "fqn": "@aws-cdk/aws-ec2.SubnetSelection" } }, { "abstract": true, "docs": { "default": "- do not create any default database", "stability": "stable", "summary": "Default database name to create." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 63 }, "name": "defaultDatabaseName", "optional": true, "type": { "primitive": "string" } }, { "abstract": true, "docs": { "default": "- MySQL 8.0.21", "stability": "stable", "summary": "The database instance engine." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 27 }, "name": "instanceEngine", "optional": true, "type": { "fqn": "@aws-cdk/aws-rds.IInstanceEngine" } }, { "abstract": true, "docs": { "default": "r5.large", "stability": "stable", "summary": "The database instance type." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 21 }, "name": "instanceType", "optional": true, "type": { "fqn": "@aws-cdk/aws-ec2.InstanceType" } }, { "abstract": true, "docs": { "default": "false", "remarks": "Not recommended for production.", "stability": "stable", "summary": "Whether to use single RDS instance rather than RDS cluster." }, "immutable": true, "locationInModule": { "filename": "src/common/db.ts", "line": 46 }, "name": "singleDbInstance", "optional": true, "type": { "primitive": "boolean" } } ], "symbolId": "src/common/db:DatabaseProps" }, "cdk-fargate-patterns.DualAlbFargateService": { "assembly": "cdk-fargate-patterns", "base": "cdk-fargate-patterns.BaseFargateService", "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.DualAlbFargateService", "initializer": { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/dual-alb-fargate-svc.ts", "line": 37 }, "parameters": [ { "name": "scope", "type": { "fqn": "@aws-cdk/core.Construct" } }, { "name": "id", "type": { "primitive": "string" } }, { "name": "props", "type": { "fqn": "cdk-fargate-patterns.DualAlbFargateServiceProps" } } ] }, "kind": "class", "locationInModule": { "filename": "src/dual-alb-fargate-svc.ts", "line": 22 }, "name": "DualAlbFargateService", "properties": [ { "docs": { "stability": "stable", "summary": "The external ALB." }, "immutable": true, "locationInModule": { "filename": "src/dual-alb-fargate-svc.ts", "line": 26 }, "name": "externalAlb", "optional": true, "type": { "fqn": "@aws-cdk/aws-elasticloadbalancingv2.ApplicationLoadBalancer" } }, { "docs": { "stability": "stable", "summary": "The internal ALB." }, "immutable": true, "locationInModule": { "filename": "src/dual-alb-fargate-svc.ts", "line": 30 }, "name": "internalAlb", "optional": true, "type": { "fqn": "@aws-cdk/aws-elasticloadbalancingv2.ApplicationLoadBalancer" } }, { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/dual-alb-fargate-svc.ts", "line": 32 }, "name": "externalAlbApplicationListeners", "protected": true, "type": { "collection": { "elementtype": { "fqn": "@aws-cdk/aws-elasticloadbalancingv2.ApplicationListener" }, "kind": "map" } } }, { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/dual-alb-fargate-svc.ts", "line": 34 }, "name": "internalAlbApplicationListeners", "protected": true, "type": { "collection": { "elementtype": { "fqn": "@aws-cdk/aws-elasticloadbalancingv2.ApplicationListener" }, "kind": "map" } } } ], "symbolId": "src/dual-alb-fargate-svc:DualAlbFargateService" }, "cdk-fargate-patterns.DualAlbFargateServiceProps": { "assembly": "cdk-fargate-patterns", "datatype": true, "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.DualAlbFargateServiceProps", "interfaces": [ "cdk-fargate-patterns.BaseFargateServiceProps" ], "kind": "interface", "locationInModule": { "filename": "src/dual-alb-fargate-svc.ts", "line": 8 }, "name": "DualAlbFargateServiceProps", "properties": [ { "abstract": true, "docs": { "default": "- 60.", "stability": "stable", "summary": "The external load balancer idle timeout, in seconds." }, "immutable": true, "locationInModule": { "filename": "src/dual-alb-fargate-svc.ts", "line": 13 }, "name": "externalAlbIdleTimeout", "optional": true, "type": { "fqn": "@aws-cdk/core.Duration" } }, { "abstract": true, "docs": { "default": "- 60.", "stability": "stable", "summary": "The internal load balancer idle timeout, in seconds." }, "immutable": true, "locationInModule": { "filename": "src/dual-alb-fargate-svc.ts", "line": 19 }, "name": "internalAlbIdleTimeout", "optional": true, "type": { "fqn": "@aws-cdk/core.Duration" } } ], "symbolId": "src/dual-alb-fargate-svc:DualAlbFargateServiceProps" }, "cdk-fargate-patterns.DualNlbFargateService": { "assembly": "cdk-fargate-patterns", "base": "cdk-fargate-patterns.BaseFargateService", "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.DualNlbFargateService", "initializer": { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/dual-nlb-fargate-svc.ts", "line": 19 }, "parameters": [ { "name": "scope", "type": { "fqn": "@aws-cdk/core.Construct" } }, { "name": "id", "type": { "primitive": "string" } }, { "name": "props", "type": { "fqn": "cdk-fargate-patterns.DualNlbFargateServiceProps" } } ] }, "kind": "class", "locationInModule": { "filename": "src/dual-nlb-fargate-svc.ts", "line": 10 }, "name": "DualNlbFargateService", "properties": [ { "docs": { "stability": "stable", "summary": "The external Nlb." }, "immutable": true, "locationInModule": { "filename": "src/dual-nlb-fargate-svc.ts", "line": 14 }, "name": "externalNlb", "optional": true, "type": { "fqn": "@aws-cdk/aws-elasticloadbalancingv2.NetworkLoadBalancer" } }, { "docs": { "stability": "stable", "summary": "The internal Nlb." }, "immutable": true, "locationInModule": { "filename": "src/dual-nlb-fargate-svc.ts", "line": 18 }, "name": "internalNlb", "optional": true, "type": { "fqn": "@aws-cdk/aws-elasticloadbalancingv2.NetworkLoadBalancer" } } ], "symbolId": "src/dual-nlb-fargate-svc:DualNlbFargateService" }, "cdk-fargate-patterns.DualNlbFargateServiceProps": { "assembly": "cdk-fargate-patterns", "datatype": true, "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.DualNlbFargateServiceProps", "interfaces": [ "cdk-fargate-patterns.BaseFargateServiceProps" ], "kind": "interface", "locationInModule": { "filename": "src/dual-nlb-fargate-svc.ts", "line": 8 }, "name": "DualNlbFargateServiceProps", "symbolId": "src/dual-nlb-fargate-svc:DualNlbFargateServiceProps" }, "cdk-fargate-patterns.FargateTaskProps": { "assembly": "cdk-fargate-patterns", "datatype": true, "docs": { "stability": "stable", "summary": "Task properties for the Fargate." }, "fqn": "cdk-fargate-patterns.FargateTaskProps", "kind": "interface", "locationInModule": { "filename": "src/main.ts", "line": 86 }, "name": "FargateTaskProps", "properties": [ { "abstract": true, "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 88 }, "name": "task", "type": { "fqn": "@aws-cdk/aws-ecs.FargateTaskDefinition" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "Customized capacity provider strategy." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 117 }, "name": "capacityProviderStrategy", "optional": true, "type": { "collection": { "elementtype": { "fqn": "@aws-cdk/aws-ecs.CapacityProviderStrategy" }, "kind": "array" } } }, { "abstract": true, "docs": { "default": "1", "stability": "stable", "summary": "desired number of tasks for the service." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 106 }, "name": "desiredCount", "optional": true, "type": { "primitive": "number" } }, { "abstract": true, "docs": { "default": "- no external listener", "stability": "stable", "summary": "The external ELB listener." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 100 }, "name": "external", "optional": true, "type": { "fqn": "cdk-fargate-patterns.LoadBalancerAccessibility" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "health check from elbv2 target group." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 122 }, "name": "healthCheck", "optional": true, "type": { "fqn": "@aws-cdk/aws-elasticloadbalancingv2.HealthCheck" } }, { "abstract": true, "docs": { "default": "cdk.Duration.seconds(60),", "stability": "stable", "summary": "The period of time, in seconds, that the Amazon ECS service scheduler ignores unhealthy Elastic Load Balancing target health checks after a task has first started." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 162 }, "name": "healthCheckGracePeriod", "optional": true, "type": { "fqn": "@aws-cdk/core.Duration" } }, { "abstract": true, "docs": { "default": "- no internal listener", "stability": "stable", "summary": "The internal ELB listener." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 94 }, "name": "internal", "optional": true, "type": { "fqn": "cdk-fargate-patterns.LoadBalancerAccessibility" } }, { "abstract": true, "docs": { "default": "200", "stability": "stable", "summary": "The maximum number of tasks, specified as a percentage of the Amazon ECS service's DesiredCount value, that can run in a service during a deployment." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 148 }, "name": "maxHealthyPercent", "optional": true, "type": { "primitive": "number" } }, { "abstract": true, "docs": { "default": "50", "stability": "stable", "summary": "The minimum number of tasks, specified as a percentage of the Amazon ECS service's DesiredCount value, that must continue to run and remain healthy during a deployment." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 155 }, "name": "minHealthyPercent", "optional": true, "type": { "primitive": "number" } }, { "abstract": true, "docs": { "default": "- TCP", "remarks": "For ALB, this option will be ignored and always set to HTTP.", "stability": "stable", "summary": "The target group protocol for NLB." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 129 }, "name": "protocol", "optional": true, "type": { "fqn": "@aws-cdk/aws-elasticloadbalancingv2.Protocol" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "The protocol version to use." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 134 }, "name": "protocolVersion", "optional": true, "type": { "fqn": "@aws-cdk/aws-elasticloadbalancingv2.ApplicationProtocolVersion" } }, { "abstract": true, "docs": { "default": "- { maxCapacity: 10, targetCpuUtilization: 50, requestsPerTarget: 1000 }", "stability": "stable", "summary": "service autoscaling policy." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 112 }, "name": "scalingPolicy", "optional": true, "type": { "fqn": "cdk-fargate-patterns.ServiceScalingPolicy" } }, { "abstract": true, "docs": { "default": "- auto-generated", "stability": "stable", "summary": "The serviceName." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 141 }, "name": "serviceName", "optional": true, "type": { "primitive": "string" } } ], "symbolId": "src/main:FargateTaskProps" }, "cdk-fargate-patterns.Laravel": { "assembly": "cdk-fargate-patterns", "base": "@aws-cdk/core.Construct", "docs": { "stability": "stable", "summary": "Represents the Laravel service." }, "fqn": "cdk-fargate-patterns.Laravel", "initializer": { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/laravel.ts", "line": 101 }, "parameters": [ { "name": "scope", "type": { "fqn": "@aws-cdk/core.Construct" } }, { "name": "id", "type": { "primitive": "string" } }, { "name": "props", "type": { "fqn": "cdk-fargate-patterns.LaravelProps" } } ] }, "kind": "class", "locationInModule": { "filename": "src/laravel.ts", "line": 97 }, "name": "Laravel", "properties": [ { "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 100 }, "name": "svc", "type": { "fqn": "cdk-fargate-patterns.DualAlbFargateService" } }, { "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 98 }, "name": "vpc", "type": { "fqn": "@aws-cdk/aws-ec2.IVpc" } }, { "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 99 }, "name": "db", "optional": true, "type": { "fqn": "cdk-fargate-patterns.Database" } } ], "symbolId": "src/laravel:Laravel" }, "cdk-fargate-patterns.LaravelProps": { "assembly": "cdk-fargate-patterns", "datatype": true, "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.LaravelProps", "kind": "interface", "locationInModule": { "filename": "src/laravel.ts", "line": 10 }, "name": "LaravelProps", "properties": [ { "abstract": true, "docs": { "stability": "stable", "summary": "The local path to the Laravel code base." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 72 }, "name": "code", "type": { "primitive": "string" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "The loadbalancer accessibility for the service." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 81 }, "name": "loadbalancer", "type": { "fqn": "cdk-fargate-patterns.LoadBalancerAccessibility" } }, { "abstract": true, "docs": { "default": "false", "remarks": "When enabled, the `databaseInstanceType` and\n`engine` will be ignored. The `rds.DatabaseClusterEngine.AURORA_MYSQL` will be used as\nthe default cluster engine instead.", "stability": "stable", "summary": "Whether to use aurora serverless." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 43 }, "name": "auroraServerless", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "default": "- 7 days", "stability": "stable", "summary": "database backup retension." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 55 }, "name": "backupRetention", "optional": true, "type": { "fqn": "@aws-cdk/core.Duration" } }, { "abstract": true, "docs": { "default": "rds.AuroraMysqlEngineVersion.VER_2_09_1", "stability": "stable", "summary": "The database cluster engine." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 35 }, "name": "clusterEngine", "optional": true, "type": { "fqn": "@aws-cdk/aws-rds.IClusterEngine" } }, { "abstract": true, "docs": { "default": "80", "stability": "stable", "summary": "The Laravel container port." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 77 }, "name": "containerPort", "optional": true, "type": { "primitive": "number" } }, { "abstract": true, "docs": { "default": "r5.large", "stability": "stable", "summary": "Database instance type." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 23 }, "name": "databaseInstanceType", "optional": true, "type": { "fqn": "@aws-cdk/aws-ec2.InstanceType" } }, { "abstract": true, "docs": { "default": "- VPC isolated subnets", "stability": "stable", "summary": "VPC subnets for database." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 17 }, "name": "databaseSubnets", "optional": true, "type": { "fqn": "@aws-cdk/aws-ec2.SubnetSelection" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "The default database name to create." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 85 }, "name": "defaultDatabaseName", "optional": true, "type": { "primitive": "string" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "Options to create the EFS FileSystem." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 90 }, "name": "efsFileSystem", "optional": true, "type": { "fqn": "@aws-cdk/aws-efs.FileSystemProps" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "enable ECS Exec." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 68 }, "name": "enableExecuteCommand", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "default": "- MySQL 8.0.21", "stability": "stable", "summary": "The database instance engine." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 29 }, "name": "instanceEngine", "optional": true, "type": { "fqn": "@aws-cdk/aws-rds.IInstanceEngine" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "task options for the Laravel fargate service." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 60 }, "name": "serviceProps", "optional": true, "type": { "fqn": "cdk-fargate-patterns.FargateTaskProps" } }, { "abstract": true, "docs": { "default": "false", "remarks": "Not recommended for production.", "stability": "stable", "summary": "Whether to use single RDS instance rather than RDS cluster." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 49 }, "name": "singleDbInstance", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "enable fargate spot." }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 64 }, "name": "spot", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/laravel.ts", "line": 11 }, "name": "vpc", "optional": true, "type": { "fqn": "@aws-cdk/aws-ec2.IVpc" } } ], "symbolId": "src/laravel:LaravelProps" }, "cdk-fargate-patterns.LoadBalancerAccessibility": { "assembly": "cdk-fargate-patterns", "datatype": true, "docs": { "stability": "stable", "summary": "The load balancer accessibility." }, "fqn": "cdk-fargate-patterns.LoadBalancerAccessibility", "kind": "interface", "locationInModule": { "filename": "src/main.ts", "line": 65 }, "name": "LoadBalancerAccessibility", "properties": [ { "abstract": true, "docs": { "stability": "stable", "summary": "The port of the listener." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 69 }, "name": "port", "type": { "primitive": "number" } }, { "abstract": true, "docs": { "default": "- no certificate(HTTP only)", "stability": "stable", "summary": "The ACM certificate for the HTTPS listener." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 74 }, "name": "certificate", "optional": true, "type": { "collection": { "elementtype": { "fqn": "@aws-cdk/aws-certificatemanager.ICertificate" }, "kind": "array" } } }, { "abstract": true, "docs": { "default": "- no forward conditions.", "stability": "stable", "summary": "Listener forward conditions." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 80 }, "name": "forwardConditions", "optional": true, "type": { "collection": { "elementtype": { "fqn": "@aws-cdk/aws-elasticloadbalancingv2.ListenerCondition" }, "kind": "array" } } } ], "symbolId": "src/main:LoadBalancerAccessibility" }, "cdk-fargate-patterns.Route53Options": { "assembly": "cdk-fargate-patterns", "datatype": true, "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.Route53Options", "kind": "interface", "locationInModule": { "filename": "src/main.ts", "line": 183 }, "name": "Route53Options", "properties": [ { "abstract": true, "docs": { "default": "true", "stability": "stable", "summary": "Whether to configure the ALIAS for the LB." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 188 }, "name": "enableLoadBalancerAlias", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "default": "external", "stability": "stable", "summary": "the external ELB record name." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 198 }, "name": "externalElbRecordName", "optional": true, "type": { "primitive": "string" } }, { "abstract": true, "docs": { "default": "internal", "stability": "stable", "summary": "the internal ELB record name." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 203 }, "name": "internalElbRecordName", "optional": true, "type": { "primitive": "string" } }, { "abstract": true, "docs": { "default": "svc.local", "stability": "stable", "summary": "private zone name." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 193 }, "name": "zoneName", "optional": true, "type": { "primitive": "string" } } ], "symbolId": "src/main:Route53Options" }, "cdk-fargate-patterns.ServiceScalingPolicy": { "assembly": "cdk-fargate-patterns", "datatype": true, "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.ServiceScalingPolicy", "kind": "interface", "locationInModule": { "filename": "src/main.ts", "line": 165 }, "name": "ServiceScalingPolicy", "properties": [ { "abstract": true, "docs": { "default": "10", "stability": "stable", "summary": "max capacity for the service autoscaling." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 170 }, "name": "maxCapacity", "optional": true, "type": { "primitive": "number" } }, { "abstract": true, "docs": { "default": "1000", "stability": "stable", "summary": "request per target." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 180 }, "name": "requestPerTarget", "optional": true, "type": { "primitive": "number" } }, { "abstract": true, "docs": { "default": "50", "stability": "stable", "summary": "target cpu utilization." }, "immutable": true, "locationInModule": { "filename": "src/main.ts", "line": 175 }, "name": "targetCpuUtilization", "optional": true, "type": { "primitive": "number" } } ], "symbolId": "src/main:ServiceScalingPolicy" }, "cdk-fargate-patterns.WordPress": { "assembly": "cdk-fargate-patterns", "base": "@aws-cdk/core.Construct", "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.WordPress", "initializer": { "docs": { "stability": "stable" }, "locationInModule": { "filename": "src/wordpress.ts", "line": 76 }, "parameters": [ { "name": "scope", "type": { "fqn": "@aws-cdk/core.Construct" } }, { "name": "id", "type": { "primitive": "string" } }, { "name": "props", "optional": true, "type": { "fqn": "cdk-fargate-patterns.WordPressProps" } } ] }, "kind": "class", "locationInModule": { "filename": "src/wordpress.ts", "line": 72 }, "name": "WordPress", "properties": [ { "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 75 }, "name": "svc", "type": { "fqn": "cdk-fargate-patterns.DualAlbFargateService" } }, { "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 73 }, "name": "vpc", "type": { "fqn": "@aws-cdk/aws-ec2.IVpc" } }, { "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 74 }, "name": "db", "optional": true, "type": { "fqn": "cdk-fargate-patterns.Database" } } ], "symbolId": "src/wordpress:WordPress" }, "cdk-fargate-patterns.WordPressProps": { "assembly": "cdk-fargate-patterns", "datatype": true, "docs": { "stability": "stable" }, "fqn": "cdk-fargate-patterns.WordPressProps", "kind": "interface", "locationInModule": { "filename": "src/wordpress.ts", "line": 11 }, "name": "WordPressProps", "properties": [ { "abstract": true, "docs": { "default": "false", "remarks": "When enabled, the `databaseInstanceType` and\n`engine` will be ignored. The `rds.DatabaseClusterEngine.AURORA_MYSQL` will be used as\nthe default cluster engine instead.", "stability": "stable", "summary": "Whether to use aurora serverless." }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 44 }, "name": "auroraServerless", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "default": "- 7 days", "stability": "stable", "summary": "database backup retension." }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 56 }, "name": "backupRetention", "optional": true, "type": { "fqn": "@aws-cdk/core.Duration" } }, { "abstract": true, "docs": { "default": "rds.AuroraMysqlEngineVersion.VER_2_09_1", "stability": "stable", "summary": "The database cluster engine." }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 36 }, "name": "clusterEngine", "optional": true, "type": { "fqn": "@aws-cdk/aws-rds.IClusterEngine" } }, { "abstract": true, "docs": { "default": "r5.large", "stability": "stable", "summary": "Database instance type." }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 24 }, "name": "databaseInstanceType", "optional": true, "type": { "fqn": "@aws-cdk/aws-ec2.InstanceType" } }, { "abstract": true, "docs": { "default": "- VPC isolated subnets", "stability": "stable", "summary": "VPC subnets for database." }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 18 }, "name": "databaseSubnets", "optional": true, "type": { "fqn": "@aws-cdk/aws-ec2.SubnetSelection" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "enable ECS Exec." }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 69 }, "name": "enableExecuteCommand", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "default": "- MySQL 8.0.21", "stability": "stable", "summary": "The database instance engine." }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 30 }, "name": "instanceEngine", "optional": true, "type": { "fqn": "@aws-cdk/aws-rds.IInstanceEngine" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "task options for the WordPress fargate service." }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 61 }, "name": "serviceProps", "optional": true, "type": { "fqn": "cdk-fargate-patterns.FargateTaskProps" } }, { "abstract": true, "docs": { "default": "false", "remarks": "Not recommended for production.", "stability": "stable", "summary": "Whether to use single RDS instance rather than RDS cluster." }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 50 }, "name": "singleDbInstance", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "stability": "stable", "summary": "enable fargate spot." }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 65 }, "name": "spot", "optional": true, "type": { "primitive": "boolean" } }, { "abstract": true, "docs": { "stability": "stable" }, "immutable": true, "locationInModule": { "filename": "src/wordpress.ts", "line": 12 }, "name": "vpc", "optional": true, "type": { "fqn": "@aws-cdk/aws-ec2.IVpc" } } ], "symbolId": "src/wordpress:WordPressProps" } }, "version": "0.3.101", "fingerprint": "WV7F+fX7rmABct1Dizot/YTsXJmUywHj/39c8pHPT9k=" }