We use the AWS CDK to build and deploy the various parts of the stack.
https://github.com/au-research/raido-v2-aws-private/
The setup and configuration of your deployment process depends heavily on your operational environment.
For example, our CloudFront is configured to serve the app-client from S3. We have a AWS CodeBuild project that can be invoked to run the app-client build process and deploy the built files to S3. CloudFront serves those files over the internet.
How you deploy those files will depend on your environment, you might:
-
configure your web-server to read files from a network drive (via NFS protocol or similar)
- then your build process just needs to copy the files to the expected network location
-
configure your web-server to read files from its local drive
- then your build process would need to use
scp
or a similar protocol to copy the files to each web server machine
- then your build process would need to use
Our AWS infrastructure is deployed via an
AWS CDK pipeline
in a "continuous integration" style - i.e. AWS infrastructure is automatically
updated when a change is pushed to the /main
branch of the AWS repo.
The database instance itself is managed via CDK. The database schema (tables, columns, triggers, etc.) is implemented as Flyway migrations that are deployed by an AWS CodeBuild task.
The api-svc container instances are managed as AWS ECS tasks.
The docker container that contains the actual api-svc task is built by an AWS CodeBuild project: ApiSvcPushDockerImage project
The core Gradle task that initiates the Java compile and docker build (called by the PushDocker image project) is ecsDockerPush
The app-client is built as a create-react-app project (Webpack under the covers), then deployed via a CodeBuild project: AppClientDeploy
The core build task is a simple npm run build
, then the project copies
the built files to S3.