Skip to content

Commit

Permalink
OK-735: Ovara-ui deploy from local
Browse files Browse the repository at this point in the history
  • Loading branch information
heidilm committed Dec 5, 2024
1 parent 91fc751 commit 248044c
Show file tree
Hide file tree
Showing 21 changed files with 4,900 additions and 46 deletions.
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,12 @@ node_modules
.next

.mise.toml

# local env files
.env*.local

# CDK
.cdk.staging
cdk.out
.open-next
cdk/**/*.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ spring.datasource.password={{ovara_backend_postgresql_password}}
opintopolku.virkailija.domain={{host_virkailija}}
opintopolku.virkailija.url=https://${opintopolku.virkailija.domain}
ovara.backend.url=${opintopolku.virkailija.url}/ovara-backend
ovara.ui.url=${opintopolku.virkailija.url}/raportointi
ovara.ui.url=${opintopolku.virkailija.url}/ovara
cas.url=${opintopolku.virkailija.url}/cas
ovara-backend.cas.username={{ovara_backend_cas_username}}
ovara-backend.cas.password={{ovara_backend_cas_password}}
Expand Down
1 change: 1 addition & 0 deletions ovara-ui/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
VIRKAILIJA_URL=https://virkailija.testiopintopolku.fi
8 changes: 8 additions & 0 deletions ovara-ui/cdk/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
*.js
!jest.config.js
*.d.ts
node_modules

# CDK asset staging directory
.cdk.staging
cdk.out
6 changes: 6 additions & 0 deletions ovara-ui/cdk/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
*.ts
!*.d.ts

# CDK asset staging directory
.cdk.staging
cdk.out
14 changes: 14 additions & 0 deletions ovara-ui/cdk/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Welcome to your CDK TypeScript project

This is a blank project for CDK development with TypeScript.

The `cdk.json` file tells the CDK Toolkit how to execute your app.

## Useful commands

- `npm run build` compile typescript to js
- `npm run watch` watch for changes and compile
- `npm run test` perform the jest unit tests
- `npx cdk deploy` deploy this stack to your default AWS account/region
- `npx cdk diff` compare deployed stack with current state
- `npx cdk synth` emits the synthesized CloudFormation template
18 changes: 18 additions & 0 deletions ovara-ui/cdk/bin/ovara-ui.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { OvaraUISovellusStack } from '../lib/sovellus-stack';

const app = new cdk.App();
const environmentName = app.node.tryGetContext('environment');
const skipBuild = app.node.tryGetContext('skipBuild');

new OvaraUISovellusStack(app, 'OvaraUISovellusStack', {
stackName: `${environmentName}-ovara-ui`,
environmentName,
skipBuild,
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION,
},
});
75 changes: 75 additions & 0 deletions ovara-ui/cdk/cdk.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{
"app": "npx ts-node --prefer-ts-exts bin/ovara-ui.ts",
"watch": {
"include": ["**"],
"exclude": [
"README.md",
"cdk*.json",
"**/*.d.ts",
"**/*.js",
"tsconfig.json",
"package*.json",
"yarn.lock",
"node_modules",
"test"
]
},
"context": {
"@aws-cdk/aws-lambda:recognizeLayerVersion": true,
"@aws-cdk/core:checkSecretUsage": true,
"@aws-cdk/core:target-partitions": ["aws", "aws-cn"],
"@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
"@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
"@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true,
"@aws-cdk/aws-iam:minimizePolicies": true,
"@aws-cdk/core:validateSnapshotRemovalPolicy": true,
"@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true,
"@aws-cdk/aws-s3:createDefaultLoggingPolicy": true,
"@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true,
"@aws-cdk/aws-apigateway:disableCloudWatchRole": true,
"@aws-cdk/core:enablePartitionLiterals": true,
"@aws-cdk/aws-events:eventsTargetQueueSameAccount": true,
"@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true,
"@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true,
"@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true,
"@aws-cdk/aws-route53-patters:useCertificate": true,
"@aws-cdk/customresources:installLatestAwsSdkDefault": false,
"@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true,
"@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true,
"@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true,
"@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true,
"@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true,
"@aws-cdk/aws-redshift:columnId": true,
"@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true,
"@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true,
"@aws-cdk/aws-apigateway:requestValidatorUniqueId": true,
"@aws-cdk/aws-kms:aliasNameRef": true,
"@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true,
"@aws-cdk/core:includePrefixInUniqueNameGeneration": true,
"@aws-cdk/aws-efs:denyAnonymousAccess": true,
"@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true,
"@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true,
"@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true,
"@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true,
"@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true,
"@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true,
"@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true,
"@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction": true,
"@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": true,
"@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2": true,
"@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope": true,
"@aws-cdk/aws-eks:nodegroupNameAttribute": true,
"@aws-cdk/aws-ec2:ebsDefaultGp3Volume": true,
"@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": true,
"@aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault": false,
"@aws-cdk/aws-s3:keepNotificationInImportedBucket": false,
"@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions": true,
"@aws-cdk/aws-dynamodb:resourcePolicyPerReplica": true,
"@aws-cdk/aws-ec2:ec2SumTImeoutEnabled": true,
"@aws-cdk/aws-appsync:appSyncGraphQLAPIScopeLambdaPermission": true,
"@aws-cdk/aws-rds:setCorrectValueForDatabaseInstanceReadReplicaInstanceResourceId": true,
"@aws-cdk/core:cfnIncludeRejectComplexResourceUpdateCreatePolicyIntrinsics": true,
"@aws-cdk/aws-lambda-nodejs:sdkV3ExcludeSmithyPackages": true,
"@aws-cdk/aws-stepfunctions-tasks:fixRunEcsTaskPolicy": true
}
}
8 changes: 8 additions & 0 deletions ovara-ui/cdk/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
testEnvironment: 'node',
roots: ['<rootDir>/test'],
testMatch: ['**/*.test.ts'],
transform: {
'^.+\\.tsx?$': 'ts-jest',
},
};
81 changes: 81 additions & 0 deletions ovara-ui/cdk/lib/sovellus-stack.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as route53 from 'aws-cdk-lib/aws-route53';
import * as acm from 'aws-cdk-lib/aws-certificatemanager';
import { Nextjs } from 'cdk-nextjs-standalone';
import { PriceClass } from 'aws-cdk-lib/aws-cloudfront';

interface OvaraUIStackProps extends cdk.StackProps {
environmentName: string;
skipBuild: boolean;
}

export class OvaraUISovellusStack extends cdk.Stack {
constructor(scope: Construct, id: string, props: OvaraUIStackProps) {
super(scope, id, props);

const publicHostedZones: { [p: string]: string } = {
hahtuva: 'hahtuvaopintopolku.fi',
pallero: 'testiopintopolku.fi',
untuva: 'untuvaopintopolku.fi',
};

const publicHostedZoneIds: { [p: string]: string } = {
hahtuva: 'Z20VS6J64SGAG9',
pallero: 'Z175BBXSKVCV3B',
untuva: 'Z1399RU36FG2N9',
};

const hostedZone = route53.HostedZone.fromHostedZoneAttributes(
this,
'PublicHostedZone',
{
zoneName: `${publicHostedZones[props.environmentName]}.`,
hostedZoneId: `${publicHostedZoneIds[props.environmentName]}`,
},
);

const domainName = `ovara-virkailija.${publicHostedZones[props.environmentName]}`;

const certificate = new acm.DnsValidatedCertificate(
this,
'SiteCertificate',
{
domainName,
hostedZone,
region: 'us-east-1', // Cloudfront only checks this region for certificates.
},
);

const nextjs = new Nextjs(this, 'OvaraUI', {
nextjsPath: '..', // relative path from your project root to NextJS
...(props.skipBuild
? {
buildCommand:
'npx --yes open-next@^2 build -- --build-command "npm run noop"',
}
: {}),
basePath: '/ovara',
environment: {
SKIP_TYPECHECK: 'true',
STANDALONE: 'true',
VIRKAILIJA_URL: `https://virkailija.${publicHostedZones[props.environmentName]}`,
},
domainProps: {
domainName,
certificate,
hostedZone,
},
overrides: {
nextjsDistribution: {
distributionProps: {
priceClass: PriceClass.PRICE_CLASS_100,
},
},
},
});
new cdk.CfnOutput(this, 'CloudFrontDistributionDomain', {
value: nextjs.distribution.distributionDomain,
});
}
}
Loading

0 comments on commit 248044c

Please sign in to comment.