constructor()

in PetAdoptions/cdk/pet_stack/lib/sql-seeder.ts [19:68]


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

    const dbIdentifier = props.database.instanceIdentifier;
    const rdsUsernameParameter = new ssm.StringParameter(this, 'RDSUsernameParameter', {
      parameterName: `/sql-seeder/${dbIdentifier}/username`,
      stringValue: props.username,
      simpleName: false
    });

    const rsdPasswordParameter = new ssm.StringParameter(this, 'RDSPasswordParameter', {
        parameterName: `/sql-seeder/${dbIdentifier}/password`,
        stringValue: props.password,
        simpleName: false
    });

    const sqlSeederLambda = new lambda.Function(this, 'sql-seeder-lambda', {      
        code: new lambda.AssetCode('./lambda/sqlserver-seeder.zip'),
        handler: 'seed::seed.Bootstrap::ExecuteFunction',
        timeout: cdk.Duration.seconds(300),
        runtime: lambda.Runtime.DOTNET_CORE_3_1,
        memorySize: 2048,
        vpc: props.vpc,
        vpcSubnets: {
            subnetType: ec2.SubnetType.PRIVATE
        },
        environment: {
            "DbEndpoint": props.database.dbInstanceEndpointAddress,
            "UsernameParameter": rdsUsernameParameter.parameterName,
            "PasswordParameter": rsdPasswordParameter.parameterName
        }
    });

    const sqlSeederProvider = new cr.Provider(this, 'sqlserver-seeder-provider', {
      onEventHandler: sqlSeederLambda
    });
    const sqlSeederResource = new cdk.CustomResource(this, 'SqlSeeder', { 
      serviceToken: sqlSeederProvider.serviceToken, 
      properties: {
        "IgnoreSqlErrors": !!props.ignoreSqlErrors
      }
     });
    sqlSeederResource.node.addDependency(props.database);

    // enable connection to RDS instance
    sqlSeederLambda.connections.allowTo(props.database, ec2.Port.tcp(props.port));
    // grant access to SSM parameters
    rdsUsernameParameter.grantRead(sqlSeederLambda);
    rsdPasswordParameter.grantRead(sqlSeederLambda);
  }