in packages/constructs/L3/dataops/dataops-dms-l3-construct/lib/dms-l3-construct.ts [433:489]
private createEndpoints(dmsRole: IRole): { [name: string]: CfnEndpoint } {
const secrets: ISecret[] = [];
const secretKeys: IKey[] = [];
const endpoints = Object.fromEntries(
Object.entries(this.props.dms.endpoints || {}).map(([endpointName, endpointProps]) => {
const engineSettingsPropName = DMSL3Construct.engineToSettingsNameMap[
endpointProps.engineName
] as keyof EndpointProps;
const engineSettingsProp = endpointProps[engineSettingsPropName];
if (!engineSettingsProp) {
throw new Error(`${engineSettingsPropName} must be defined for engineName ${endpointProps.engineName}`);
}
if (DMSL3Construct.awsServiceEngineNames.includes(endpointProps.engineName)) {
// @ts-ignore need to figure out what type is engineSettingsProps
engineSettingsProp['serviceAccessRoleArn'] = dmsRole.roleArn;
}
Object.entries(endpointProps).forEach(([, prop]) => {
if (!prop || typeof prop !== 'object') {
console.log(`Strange, was expecting ${prop} to be an object`);
return;
}
if ('secretsManagerSecretArn' in prop && prop.secretsManagerAccessRoleArn === undefined) {
const secretArn = prop['secretsManagerSecretArn'];
prop.secretsManagerAccessRoleArn = dmsRole.roleArn;
prop['secretsManagerSecretId'] = secretArn;
secrets.push(Secret.fromSecretCompleteArn(this, `secret-import-${endpointName}`, secretArn));
const secretKeyKMSArn = prop['secretsManagerSecretKMSArn'];
if (secretKeyKMSArn) {
secretKeys.push(Key.fromKeyArn(this, `secret-key-import-${endpointName}`, secretKeyKMSArn));
}
}
if ('secretsManagerOracleAsmSecretArn' in prop && prop.secretsManagerOracleAsmAccessRoleArn === undefined) {
const secretArn = prop['secretsManagerOracleAsmSecretArn'];
prop['secretsManagerOracleAsmSecretId'] = secretArn;
prop['secretsManagerOracleAsmAccessRoleArn'] = dmsRole.roleArn;
secrets.push(Secret.fromSecretCompleteArn(this, `asm-secret-import-${endpointName}`, secretArn));
}
});
const mdaaEndpointProps: MdaaEndpointProps = {
...endpointProps,
endpointIdentifier: endpointName,
kmsKey: this.projectKms,
naming: this.props.naming,
};
const endpoint = new MdaaEndpoint(this, `endpoint-${endpointName}`, mdaaEndpointProps);
return [endpointName, endpoint];
}),
);
this.createSecretsAccessPolicy(dmsRole, secrets, secretKeys);
return endpoints;
}