private createEndpoints()

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