constructor()

in lib/cdk-unified-logs-stack.ts [25:82]


  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // VPC
    const vpc = new ec2.Vpc(this, 'unified-logs-vpc', { natGateways: 1 });

    // OpenSearch
    const osDomain = new opensearch.Domain(this, 'opensearch', {
      version: opensearch.EngineVersion.OPENSEARCH_1_0,
      removalPolicy: cdk.RemovalPolicy.DESTROY,
    });

    // Bucket to save failed records
    const rawDataBucket = new s3.Bucket(this, 'logsFailedErrCaptureBucket', {
      removalPolicy: cdk.RemovalPolicy.DESTROY,
      autoDeleteObjects: true,
    });

    const loggingProp = {
      vpc: vpc,
      os: osDomain,
      stack: this,
      failureBucket: rawDataBucket,
      region: cdk.Stack.of(this).region
    };

    // Setup EKS infrastructure
    const eksLogger = new EksLogger(this, 'eks-stack', loggingProp);

    // Setup EC2 infrastructure
    const ec2Logger = new Ec2Logger(this, 'ec2-stack', loggingProp);
    ec2Logger.addDependency(eksLogger);

    // Setup serverless lambda infrastructure
    const lambdaLogger = new LambdaLogger(this, 'lambda-stack', loggingProp);
    lambdaLogger.addDependency(ec2Logger);

    // Setup ECS infrastructure
    const ecsLogger = new ECSLogger(this, 'ecs-stack', loggingProp);
    ecsLogger.addDependency(lambdaLogger);

    // Setup EKS deployment, deployments has to wait till load balancer controller pods, due to
    // https://github.com/kubernetes-sigs/aws-load-balancer-controller/issues/2013
    const eksDeployment = new EksDeployment(this, 'eks-deployment', eksLogger.cluster, eksLogger.iamRoleForK8sSa);
    eksDeployment.addDependency(ecsLogger);

    // OpenSearch Domain output
    new cdk.CfnOutput(this, 'opensearch-domain-arn', {
      exportName: 'OpenSearch-Domain',
      value: osDomain.domainArn,
    });

    // S3 Bucket name output
    new cdk.CfnOutput(this, 's3-bucket-name', {
      exportName: 'S3-Bucket-Name',
      value: rawDataBucket.bucketName,
    });
  }