Deploying to AWS
29/07/2026
Connectors 1.1//GW4M365
This section explains how to deploy the Graphwise platform to AWS. Learn about the deployment requirements and the steps required to deploy the core, controllers and platform. Expand each section for detailed instructions.
This section outlines the prerequisites required before deployment to AWS.
Clone the repository https://gitlab.ontotext.com/managed-services/internal-ms/m365.
Checkout the branch labelled aws.
Create an S3 Bucket and a folder inside the bucket to hold the terraform state.
This section provides the instructions on how to deploy the core in AWS.
Go to 1-core and configure backend.tf file, as shown below.

Note
You can change the value names to your preference.
Create a terraform.tfvars file and fill with the required variables. Refer to the following example:
name = "example-m365-test-3"
Run
terraform applyand then and save the output as it contains necessary parameters for both 2-controllers and 3-platform.
This section provides instructions on how to deploy the controllers in AWS.
Go to 2-controllers and start configuring backend.tf.
Create a terraform.tfvars file and populate it with the required parameters.
vpc_id = "vpc-0f4a991aac3442494" eks_name = "iko-m365-test-3" eks_version = "1.34" eks_certificate_authority = "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJVjVXRHBOVTBvQzB3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TmpBM01EWXhNalUxTXpSYUZ3MHpOakEzTURNeE16QXdNelJhTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUNVSXdVNy85cWxYWXMwdmxDN3NEWWgwRkpQU3FuVVdhajI0QUpVZFFlTS9zc2tzTnJmcWJZck5GTXQKTWxmYWp3T3RNVXBueE9Mb2Joa3RPbEJpTlc1QnJyUWJYY2xVdGZtUkVNRzk3eHBJSER5cDNIQlkvc3FmNldGeAp0TGNIdnVYbjBCYUN0N1lJdG9NMWQ1WE1xcDYvRzI4WHdHS2IzMDZLbENlYkl5N2VISTJHTkpnd1M3MVVrY2xPCkkwRElNSlNlbnNSMUoyQWlTeUx6MEd2c2NXb2hoLzNXb3FzVmlkNUNXUGRxb3h1akVZRktOeWlTb091aWVvRlAKWXJkcmdSU3pYY1BVVytzMDQyK2RjMU81d0lYaHo0VGJENnVJem4rSEVsYmRZV2plcXZoL3BoWTBIVHRqWG9kQQpaM0VPeHNNb1hxaTdLUTJ0Szd0SmQzR1BWYnRyQWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJTQ1g2QVEwMkFsVUx6blowT1FJYnpXclZVL1NEQVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQitCNEo0YjdEcQpWNk0yQ3R0cVhwMTdPWStkZUZ4dWR0cmFZWU5IdzNuU2l3cE1mbUZFVGNnaTlXbUUrRm5HUXFOM1M1UzZ5bVVCCkl4YUZTdlJacUVRSzFPeFNnQXVvWlh0YXlIalpVdGFPYmFsTGpDSVEvQk5ZTnh4MVNsM0NISmU3UDgvWTZmREUKNWFuKzJjTVBNa0lTUDRMMmE2enJhVHFHc0x1d3Bwck1OZVMwOVdZZG1pRTd2cERlVHpURVdSN2JXUDlzTzJrMgowS0pMdjQvTkZCbFgrRFFEMjZlVHVzaGV1c05hYmlhcmd0ak9kUm90SkgwTzVkMFNXcjV6WUtDb1lPaXZIczhHCmk5ZmVBalJORGdSbTUxSDBnOU9mbnB1bVBRV1NqekhBYlVRbGlScjJlRWdtQ2k2eXRGZFd0eEN1VWg4N0NmdkIKY2gxcHJjUHEvOFdICi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" eks_endpoint = "https://A36AAD4B95E36C51FBBC51A0022A5532.gr7.us-east-1.eks.amazonaws.com" storage_kms_key_id = "4bc66724-13e1-4dd2-84ac-8c30685637bf" efs_file_system_id = "fs-0de50cf64aa587fea"
Run
terraform apply.
This section provides instructions on how to deploy the platform in AWS.
Go to 3-platform and set up the backend.tf file.
Move to terraform.tfvars.
domain = "example-m365.platform.ontotext.net" keeper_credentials_path = "./config.json" vpc_id = "vpc-0f4a991aac3442494" eks_name = "example-m365-test-3" name = "example-m365-test-3" monitoring_grafana_enabled = false keeper_uid_graphdb_license = "I2-ePD_Nr0QQikSQ7GpXKw" keeper_uid_poolparty_license = "Uhdv82LojbVrTOGaofP4eQ" keeper_uid_containers_auth = "k_1042FaUA-AkupKTWwQhA" keeper_uid_keycloak_admin_password = "yyTDa9XkjBteYve1KWNxXg" keeper_uid_keycloak_poolparty_client_secret = "_iL75kOix2OeZD7mWPGGjw" keeper_uid_poolparty_superadmin_password = "5-mcFBpGc35m2QFU1KIOMA" keeper_uid_graphrag_n8n_license = "diAbnt8sM-84mIqcxzY66w" keeper_uid_graphrag_n8n_encryption_key = "eK-LQ8a8TnbapcG8E9yXZQ" keeper_uid_graphrag_conversation_sensitive_properties = "dkLtYWLBzHdA9D8IZZr40w" keeper_uid_m365_connectors_license = "wncRvIbgbXUpy66riYAaCg" keeper_uid_m365_connectors_entra_client_secret = "DG7dmSjEzb2wlbxO214MVw" alb_listener_https_arn = "arn:aws:elasticloadbalancing:us-east-1:207567797905:listener/app/iko-m365-test-3/fddddf9fdf95c2f0/d85789e736e646bd" backups_bucket_name = "iko-m365-test-3-backups-207567797905" backups_kms_key_arn = "arn:aws:kms:us-east-1:207567797905:key/5b22b78b-cdc3-4329-b280-f81d857a6813" eks_node_group_role_arn = "arn:aws:iam::207567797905:role/iko-m365-test-3-eks-node-group-role" containers_registry_name = "maven.ontotext.com" graphdb_enabled = true graphdb_context_path = "/graphdb" graphdb_storage_class = "gp3" graphdb_storage_size = "100Gi" graphdb_resources = { requests = { memory = "1Gi" } limits = { memory = "2Gi" } } graphdb_backups_enabled = true graphdb_backups_schedule = "0 0 * * *" graphdb_node_pool_enabled = true graphdb_node_pool_instance_types = ["m6g.xlarge"] graphdb_node_pool_scaling_config = { min_size = 1 desired_size = 1 max_size = 1 } poolparty_enabled = true poolparty_storage_class = "gp3" poolparty_storage_size = "20Gi" poolparty_resources = { limits = { memory = "2Gi" } } poolparty_node_pool_enabled = true poolparty_node_pool_instance_types = ["m6g.xlarge"] poolparty_node_pool_scaling_config = { min_size = 1 desired_size = 1 max_size = 1 } poolparty_adf_enabled = false poolparty_graphviews_enabled = false poolparty_workbench_enabled = false poolparty_mirrorapp_enabled = false graphrag_enabled = false keycloak_postgres_replicas = 1 keycloak_postgres_storage_size = "20Gi" keycloak_postgres_resources = { limits = { memory = "2Gi" } } keycloak_postgres_backups_enabled = true keycloak_postgres_backup_schedule = "0 0 0 * * *" keycloak_enabled = true keycloak_replicas = 1 keycloak_resources = { limits = { memory = "2Gi" } } keycloak_node_pool_enabled = true keycloak_node_pool_scaling_config = { min_size = 1 desired_size = 1 max_size = 1 } keycloak_node_pool_instance_types = ["m6g.large"] elasticsearch_enabled = true m365_connectors_enabled = true m365_connectors_entra_client_secret = "" m365_connectors_entra_tenant_id = "" m365_connectors_entra_client_id = "" # SharePoint tenant URL — templates the SPFx client redirect URIs and web origins m365_connectors_sharepoint_tenant_url = "https://gw4m365tst.sharepoint.com" # "https://<tenant>.sharepoint.com" # n8n enterprise license for the M365 instance. Leave unset to run n8n in community mode. m365_connectors_tenant_id = 2 # Owner account for the M365 connectors n8n instance (provisioned via n8n REST owner-setup) m365_connectors_n8n_owner = { email = "m365-owner@example.com" password = "S0meS3cret!" first_name = "M365" last_name = "Owner" } m365_connectors_context_path = "/n8n/" poolparty_additional_cors_allowed_origins = ["https://gw4m365tst.sharepoint.com"] storage_kms_key_id = "4bc66724-13e1-4dd2-84ac-8c30685637bf" subnet_private_ids = [ "subnet-0391fdfdc2b419bb3", "subnet-04c2c3cba9d95fe87", "subnet-053f2285a8d89ea09", ] eks_certificate_authority = "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJVjVXRHBOVTBvQzB3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TmpBM01EWXhNalUxTXpSYUZ3MHpOakEzTURNeE16QXdNelJhTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUNVSXdVNy85cWxYWXMwdmxDN3NEWWgwRkpQU3FuVVdhajI0QUpVZFFlTS9zc2tzTnJmcWJZck5GTXQKTWxmYWp3T3RNVXBueE9Mb2Joa3RPbEJpTlc1QnJyUWJYY2xVdGZtUkVNRzk3eHBJSER5cDNIQlkvc3FmNldGeAp0TGNIdnVYbjBCYUN0N1lJdG9NMWQ1WE1xcDYvRzI4WHdHS2IzMDZLbENlYkl5N2VISTJHTkpnd1M3MVVrY2xPCkkwRElNSlNlbnNSMUoyQWlTeUx6MEd2c2NXb2hoLzNXb3FzVmlkNUNXUGRxb3h1akVZRktOeWlTb091aWVvRlAKWXJkcmdSU3pYY1BVVytzMDQyK2RjMU81d0lYaHo0VGJENnVJem4rSEVsYmRZV2plcXZoL3BoWTBIVHRqWG9kQQpaM0VPeHNNb1hxaTdLUTJ0Szd0SmQzR1BWYnRyQWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJTQ1g2QVEwMkFsVUx6blowT1FJYnpXclZVL1NEQVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQitCNEo0YjdEcQpWNk0yQ3R0cVhwMTdPWStkZUZ4dWR0cmFZWU5IdzNuU2l3cE1mbUZFVGNnaTlXbUUrRm5HUXFOM1M1UzZ5bVVCCkl4YUZTdlJacUVRSzFPeFNnQXVvWlh0YXlIalpVdGFPYmFsTGpDSVEvQk5ZTnh4MVNsM0NISmU3UDgvWTZmREUKNWFuKzJjTVBNa0lTUDRMMmE2enJhVHFHc0x1d3Bwck1OZVMwOVdZZG1pRTd2cERlVHpURVdSN2JXUDlzTzJrMgowS0pMdjQvTkZCbFgrRFFEMjZlVHVzaGV1c05hYmlhcmd0ak9kUm90SkgwTzVkMFNXcjV6WUtDb1lPaXZIczhHCmk5ZmVBalJORGdSbTUxSDBnOU9mbnB1bVBRV1NqekhBYlVRbGlScjJlRWdtQ2k2eXRGZFd0eEN1VWg4N0NmdkIKY2gxcHJjUHEvOFdICi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" eks_endpoint = "https://A36AAD4B95E36C51FBBC51A0022A5532.gr7.us-east-1.eks.amazonaws.com" # keycloak_poolparty_realm_json_path = "./poolparty-realm.json" platform_charts_timeout = 900Ensure that the Keeper configuration file keeper_credentials_path is configured and that the correct secret UIDs are specified.

Enter the following values with values from the SharePoint Automation script output:

m365_connectors_entra_Idm365_connectors_entra_client_idm365_connectors_entra_client_secret
Replace
poolparty_additional_cors_allowed_originswith the GWP base url to set up the CORS whitelist rules.Replace
m365_connectors_sharepoint_tenant_urlwith the correct SharePoint tenant, the format is https://<tenant_name>.sharepoint.com.Select
terraform apply.