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);
}