export async function onEventHandler()

in source/aws-bootstrap-kit/lib/dns/delegation-record-handler/index.ts [128:196]


export async function onEventHandler(event: any): Promise<OnEventResponse> {
    console.log("Event: %j", event);

    const {
        targetAccount,
        targetRoleToAssume,
        targetHostedZoneId,
        toDelegateNameServers,
        recordName,
        currentAccountId
    } = event.ResourceProperties;


    const roleArn =
        targetAccount && targetRoleToAssume
            ? `arn:aws:iam::${targetAccount}:role/${targetRoleToAssume}`
            : await resolveRoleArn(recordName, currentAccountId);

    const roleSessionName = event.LogicalResourceId.substr(0, 64);
    const route53 = await assumeRoleAndGetRoute53Client(
        roleArn,
        roleSessionName
    );

    const _targetHostedZoneId = targetHostedZoneId?targetHostedZoneId:await resolveParentHostedZoneId(route53, recordName);

    console.log("roleArn = ", roleArn);
    console.log("targetHostedZoneId = ", _targetHostedZoneId);
    console.log("toDelegateNameServers = ", toDelegateNameServers);
    console.log("recordName = ", recordName);

    const baseChangeRecordProps = {
        route53,
        targetHostedZoneId: _targetHostedZoneId,
        recordName,
        toDelegateNameServers,
    };

    switch (event.RequestType) {
        case "Create":
            await changeRecord({
                ...baseChangeRecordProps,
                changeAction: Route53ChangeAction.UPSERT,
            });
            break;
        case "Update":
            await changeRecord({
                ...baseChangeRecordProps,
                changeAction: Route53ChangeAction.DELETE,
            });
            await changeRecord({
                ...baseChangeRecordProps,
                changeAction: Route53ChangeAction.UPSERT,
            });
            break;
        case "Delete":
            // Delete an existing one
            await changeRecord({
                ...baseChangeRecordProps,
                changeAction: Route53ChangeAction.DELETE,
            });
    }

    let physicalResourceId = `cross-account-record-${targetAccount?targetAccount:roleArn.split(':')[4]}-${recordName}`;

    return {
        PhysicalResourceId: physicalResourceId,
    };
}