in source/constructs/lib/constructs-stack.ts [47:182]
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const authType = this.node.tryGetContext('authType') || AuthType.COGNITO
let usernameParameter: CfnParameter | null = null;
let oidcProvider: CfnParameter | null = null;
let oidcClientId: CfnParameter | null = null;
let oidcCustomerDomain: CfnParameter | null = null;
// CFN parameters
if (authType === AuthType.OPENID) {
oidcProvider = new CfnParameter(this, 'OidcProvider', {
type: 'String',
description: 'Open Id Connector Provider Issuer',
default: ''
});
oidcClientId = new CfnParameter(this, 'OidcClientId', {
type: 'String',
description: 'Open Id Connector Client Id',
default: '',
});
oidcCustomerDomain = new CfnParameter(this, 'OidcCustomerDomain', {
type: 'String',
description: 'Customer Domain for Data Transfer Hub',
default: '',
});
// CFN metadata
this.templateOptions.metadata = {
'AWS::CloudFormation::Interface': {
ParameterGroups: [
{
Label: { default: 'OIDC Settings' },
Parameters: [ oidcProvider.logicalId, oidcClientId.logicalId, oidcCustomerDomain.logicalId ]
}
]
}
};
} else {
usernameParameter = new CfnParameter(this, 'AdminEmail', {
type: 'String',
description: 'The email of Admin user',
allowedPattern: '\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}'
});
// CFN metadata
this.templateOptions.metadata = {
'AWS::CloudFormation::Interface': {
ParameterGroups: [
{
Label: { default: 'User Pool' },
Parameters: [usernameParameter.logicalId]
}
]
}
};
}
// CFN description
this.templateOptions.description = `(SO8001) - Data Transfer Hub with aws-solutions-constructs: This template deploys an one-stop toolset for transferring data from different sources into AWS. Template version ${VERSION}`;
// CFN template format version
this.templateOptions.templateFormatVersion = '2010-09-09';
// Mappings
new cdk.CfnMapping(this, 'Send', {
mapping: {
AnonymousUsage: {
Data: 'Yes'
}
}
});
// Task Cluster
const taskCluster = new TaskCluster(this, 'TaskCluster')
// API props
const drhProps: ApiProps = {
authType,
oidcProvider,
usernameParameter,
}
// API Stack
const apiStack = new ApiStack(this, 'API', drhProps);
// Portal - S3 Static Website
const portal = new PortalStack(this, 'Portal', {
auth_type: authType,
aws_oidc_customer_domain: oidcCustomerDomain?.valueAsString || '',
aws_oidc_provider: oidcProvider?.valueAsString || '',
aws_oidc_client_id: oidcClientId?.valueAsString || '',
aws_appsync_graphqlEndpoint: apiStack.api.graphqlUrl,
aws_user_pools_id: apiStack.userPool?.userPoolId || '',
aws_user_pools_web_client_id: apiStack.userPoolApiClient?.userPoolClientId || '',
taskCluster: {
ecsVpcId: taskCluster.vpc.vpcId,
ecsSubnets: taskCluster.publicSubnets.map(subnet => subnet.subnetId),
ecsClusterName: taskCluster.clusterName
}
});
// Outputs
new cdk.CfnOutput(this, 'TaskVpc', {
exportName: 'TaskVpcId',
description: 'Task VPC ID',
value: taskCluster.vpc.vpcId
}).overrideLogicalId('TaskClusterVpc')
new cdk.CfnOutput(this, 'TaskClusterOutput', {
exportName: 'TaskClusterName',
description: 'Task Cluster Name',
value: taskCluster.clusterName
}).overrideLogicalId('TaskClusterName')
new cdk.CfnOutput(this, 'UserPoolIdOutput', {
value: apiStack.userPool?.userPoolId || '',
description: 'User Pool Id'
}).overrideLogicalId('UserPoolId')
new cdk.CfnOutput(this, 'UserPoolApiClientIdOutput', {
value: apiStack.userPoolApiClient?.userPoolClientId || '',
description: 'API Client Id'
}).overrideLogicalId('UserPoolApiClientId')
new cdk.CfnOutput(this, 'UserPoolDomainOutput', {
value: apiStack.userPoolDomain?.domainName || '',
description: 'User pool domain'
}).overrideLogicalId('UserPoolDomain')
new cdk.CfnOutput(this, 'AdminUsernameOutput', {
value: usernameParameter?.valueAsString || '',
description: 'Admin username'
}).overrideLogicalId('AdminUsername')
new cdk.CfnOutput(this, 'ApiEndpointOutput', {
value: apiStack.api.graphqlUrl
}).overrideLogicalId('ApiEndpoint')
new cdk.CfnOutput(this, 'PortalUrlOutput', {
value: portal.websiteURL
}).overrideLogicalId('PortalUrl')
}