# Existing Customer Migration

This article outlines the process for migrating existing customer environments to the AskEdgi model. It covers account setup, deployment, release migration, database and Java upgrades, Docker image building, ECS updates, encryption key configuration, and integration with AskEdgi services. The document also includes verification and validation steps to ensure successful migration and post-deployment health checks.

## Purpose of the document

The purpose of this article is to describe the detailed steps required to migrate existing OvalEdge customer environments to the new AskEdgi model, ensuring minimal downtime, configuration consistency, and operational continuity across all environments.

## Pre-Migration Setup

Before starting the migration, ensure that the following prerequisites are in place:

<table><thead><tr><th width="220.6666259765625">Requirement</th><th>Description</th></tr></thead><tbody><tr><td>Access</td><td>Valid access credentials to AWS Master and Child accounts.</td></tr><tr><td>Backup</td><td>Full RDS database snapshot of UAT and Production environments.</td></tr><tr><td>Network Access</td><td>All necessary IPs and domains for whitelisting are identified.</td></tr><tr><td>Bridge Servers</td><td>Bridge client and server are operational for EFS transfer.</td></tr></tbody></table>

{% hint style="warning" %}
Perform all migration activities in a controlled environment with monitoring enabled to validate each operation.
{% endhint %}

## Migration and Deployment Process

### 1. Account Setup

Through Control Tower automation, a new SaaS + AskEdgi environment is created for each customer. Standard Operating Procedures (SOPs) are automatically generated and synchronized with the AWS Master account.

### 2. Deployment

CloudFormation StackSets are created in the Master account and deployed to child accounts.

**StackSets perform the following actions:**

<table><thead><tr><th width="220.666748046875">Action</th><th>Description</th></tr></thead><tbody><tr><td>Bootstrapping</td><td>Initializes child accounts for migration.</td></tr><tr><td>Resource Provisioning</td><td>Deploys templates required for environment setup.</td></tr></tbody></table>

### 3. Release Migration

The following release upgrades are performed within the same account:

| Component      | From Version | To Version |
| -------------- | ------------ | ---------- |
| OE Application | 6.3.X        | 7.2.X      |
| RDS            | 8.0.X        | 8.4.X      |
| NIFI           | 1.18.0       | 1.28.0     |
| Java           | 8            | 17         |

{% hint style="info" %}
Ensure all release dependencies are validated before proceeding.
{% endhint %}

### 4. RDS and MySQL Migration

#### Step 1: RDS Database Backup

Take RDS snapshots of customer UAT and Production environments before upgrading to version 7.2.X.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2F8GjlEdcbpaxcAtptR06L%2Funknown.png?alt=media&#x26;token=9b9aee65-1816-4e74-98b2-3bd7a175c043" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2F2u5XwkIr0QJcn8qlXFdD%2Funknown.png?alt=media&#x26;token=8b4dc4e3-068e-4001-bec2-daf27ad8fc41" alt=""><figcaption></figcaption></figure>

#### Step 2: MySQL Version Upgrade (8.0.40 to 8.4.46)

1. Modify the RDS instance in UAT/PROD.
2. Create a **DB parameter** group for version **8.4**.
3. Attach the created parameter group to the **RDS instance**.
4. Update parameters in the **DB parameter** group as required.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FMBsaTkRe5YJQFz7w27dS%2Funknown.png?alt=media&#x26;token=26d3c565-724f-4f8d-ba17-602b946a4e67" alt=""><figcaption></figcaption></figure>

5. Select the DB engine version **8.4.46**.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FVF6Eu95OsmG4I1NNSRK0%2Funknown.png?alt=media&#x26;token=a6a30519-586b-450c-93f5-0e75beaec36e" alt=""><figcaption></figcaption></figure>

6. In Additional Configuration, select the new parameter group and click **Modify**.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FTZRfh9aQTkuFXVZ54ovC%2Funknown.png?alt=media&#x26;token=7c85ba88-eed1-459b-8210-59cda7151156" alt=""><figcaption></figcaption></figure>

7. Wait for the modification to complete.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2F0w8Geg5Zfh2F8jyLwUQP%2Funknown.png?alt=media&#x26;token=8579cf56-5193-4cf4-a828-b58ba6ffb8f9" alt=""><figcaption></figcaption></figure>

* **Result:** RDS is successfully upgraded to version 8.4.46.
* Mysql migration from 8.0.40 to 8.4.46 is completed.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2F0oc1rMFeRAvtyZrzyH8N%2Funknown.png?alt=media&#x26;token=061e4af7-946a-4e8d-96d6-9da3056f5abd" alt=""><figcaption></figcaption></figure>

### 5. Java Upgrade

* Update the Java version from 8 to 17 (**OpenJDK**) in the Docker file.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FQBpmW1qvgmxCX57oy2I8%2Funknown.png?alt=media&#x26;token=10ad76a2-2af3-4023-8ccd-07bf000363f1" alt=""><figcaption></figcaption></figure>

#### 6. Docker Image Building

Perform the following steps to build and push the Docker image:

* Collect the updated **oasis.properties** file and update it in run.sh.
* Collect the updated **logging.properties** file and update it in the image build folder.
* Use hardened Tomcat for image build.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2Fm9Jgt7P8ejgUROPyZa6M%2Funknown.png?alt=media&#x26;token=e53625d9-84b0-4321-a83e-f0a95c0e28a5" alt=""><figcaption></figcaption></figure>

* Build and push the image using the commands below:

```
docker build -t oesaasinfra/saasrepo:cdw-7.2.3-10-09-2025 .
docker push oesaasinfra/saasrepo:cdw-7.2.3-10-09-2025
```

{% hint style="info" %}
Ensure the oe log-rotation parameters are included in the logging.properties file.
{% endhint %}

### 7. ECS Deployment

Update the newly built 7.2.X image in the Customer UI and JOB task definitions, then deploy to ECS services.

**UI Task Definition**

* Update the ECS service with the latest image and desired task count set to 1.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FP5E6KlPNACGNvbBfO018%2Funknown.png?alt=media&#x26;token=24c4c186-5fb9-40c8-b07b-2b8e1cc4bb87" alt=""><figcaption></figcaption></figure>

**JOB Task Definition**

* Perform similar updates for JOB task definitions.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FBdLmHgwaCsPP3btX333R%2Funknown.png?alt=media&#x26;token=2a9588f5-551d-4b33-aa18-d9f2ada5c853" alt=""><figcaption></figcaption></figure>

**Deploy in UI/Job Service in ECS**

* Select the latest version number of the task definition and desired task as 1, scroll down, and click on update.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FcMTZfQYbyaon5e0zOVXq%2Funknown.png?alt=media&#x26;token=f1b5016b-ac0c-403c-ae8b-ed2858d38392" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FThDYEQio3UC9oDdGvxus%2Funknown.png?alt=media&#x26;token=0cac6f18-3ba0-4292-8357-7458d5325924" alt=""><figcaption></figcaption></figure>

**Deployment Verification**

* Ensure both services (UI and JOB) are running successfully.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FQsmP8NVn4rpJW6HFRHJW%2Funknown.png?alt=media&#x26;token=86843a85-5df3-4340-a5c4-cc1a0217bb9a" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FXDUq0Q9SYyJckuy9gA05%2Funknown.png?alt=media&#x26;token=e6228c1b-386d-406a-a221-1392ee12bbc3" alt=""><figcaption></figcaption></figure>

### 8. Encrypt-Decrypt Key Change

If the default encryption key is used, change it from the default to a random key.

Checklist: <https://docs.google.com/spreadsheets/d/1bYawEICKIzhoTE32nk8ln9rXcZ629HwtNt6VlqW-Fno/edit?gid=0#gid=0>

## Migration to AskEdgi Model

### 1. RDS Database Backup and Restore

* Take the OvalEdge database backup in .sql format:

```
mysqldump -u root -p --single-transaction --skip-lock-tables ovaledgedb > ovaledgedb.sql
```

* Restore the backup to the new account RDS instance running version **8.4.6**.

### 2. EFS Migration

* Take a backup of all NIFI folders in **.zip format**.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FORkPgjWqGXcCJb2tTEge%2Funknown.png?alt=media&#x26;token=ac0bb8ac-6100-4460-8182-3abd8ae50e12" alt=""><figcaption></figcaption></figure>

* Copy the zipped backup files to the EFS of the newly created bridge server in the new AWS account.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FdtHHUQ7tjyirRLJJWGOj%2Funknown.png?alt=media&#x26;token=19dd0f72-7cf0-494d-bbed-304c309c8823" alt=""><figcaption></figcaption></figure>

### 3. Networking Configuration Migration

* Retrieve customer IPs from the old environment.
* Whitelist retrieved customer IPs in the new setup.
* Map the OE Application and NIFI Load Balancer DNS in Route53 using the new Load Balancer DNS values.

### 4. Customer Whitelisting

Request the customer to whitelist the new NAT IP or Network Load Balancer IP in the Bridge Client VM firewall/security configuration.

### 5. Secrets Manager Migration

* Copy the encrypt-decrypt key from the old environment.
* Paste the same key in the Secrets Manager of the new account.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FptZXOiOys573qgkK0gwY%2Funknown.png?alt=media&#x26;token=63c9b468-10ac-4902-bf25-b934155eb29f" alt=""><figcaption></figcaption></figure>

### 6. NIFI Server and Client UI Changes

**Client UI Changes**

* Disable the NIFI flow.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FYmteZxrbw5Jwxzvf8pyi%2Funknown.png?alt=media&#x26;token=f21c17c5-4371-4685-ab2c-7ca1ea34a895" alt=""><figcaption></figcaption></figure>

* Stop the RouteOnAttribute processor.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2Fl61BouNMYwMtUwSOxOCY%2Funknown.png?alt=media&#x26;token=9460a798-df50-4708-b90b-3544ddbf85ce" alt=""><figcaption></figcaption></figure>

* Delete connections from **Bridge1**.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FmfrtLj9CIhCsGJSiPxcJ%2Funknown.png?alt=media&#x26;token=2a226404-e3e8-4b0d-b2c4-7f4958c03a24" alt=""><figcaption></figcaption></figure>

* Add a new processor **OEEncryptDecryptProcessor 7.2.3-SNAPSHOT.**

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FX6IaiNWJmDihMmeilWwv%2Funknown.png?alt=media&#x26;token=c31bd2b7-0222-4c44-bd9d-6387b2954560" alt=""><figcaption></figcaption></figure>

* Connect the flow to the new processor (**OEEncryptDecryptProcessor**).
* Configure relationships and terminate success paths as needed.
* Right-click on OEEncryptDecryptProcessor and in relationships, select the terminate and click the **OK** button.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FyYnbnOf3459ZYMWJBTDn%2Funknown.png?alt=media&#x26;token=0d75400f-3fe1-4365-b603-f2c7d0fb77e5" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2Fk9QbkXi3H8aXIECANg7c%2Funknown.png?alt=media&#x26;token=47b89885-b4e4-431f-9360-21fd9ee64f71" alt=""><figcaption></figcaption></figure>

* Right-click on Name Success  To\_Bridge1 and click on configure. Select the success in the DETAILS Section and click on **Apply**.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FEsXXN4omWYzPy8ypxmgh%2Funknown.png?alt=media&#x26;token=2321c4ac-cd88-428b-8499-9f53c5e07a7e" alt=""><figcaption></figcaption></figure>

* Right-click on RouteOnAttribute, OEEncryptDecryptProcessor, and start the processors.
* Enable the NIFI FLOW Processor by right-clicking on the NIFI FLOW Processor box.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2F5BU4sfyGfhjcKCrwSJbL%2Funknown.png?alt=media&#x26;token=775335a4-ac50-4342-90d9-cf05003a4331" alt=""><figcaption></figcaption></figure>

* Restart the processors and re-enable the NIFI Flow.

**Result**: Bridge Client UI is updated and running with the new encryption configuration.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FDOePrXf9CDHhbLewIS4h%2Funknown.png?alt=media&#x26;token=79b1229b-d9a3-4f16-9d50-90a09cd40e01" alt=""><figcaption></figcaption></figure>

### 7. Bridge Client Java Migration

#### Step 1: Stop NIFI Service

Ensure NIFI service is stopped before upgrading Java.

```
Command : java -version
```

#### Step 2: Uninstall Java 8 from Ubuntu system

```
sudo apt list --installed | grep -i openjdk
sudo apt purge openjdk-8-*
sudo apt autoremove --purge
sudo apt clean
```

**Verify removal:**

```
java -version
javac -version
```

#### Step 3 (Optional): Remove any manual installations

If Java was manually installed (for example, extracted .tar.gz under /usr/lib/jvm or /opt/java), remove these installations:

```
sudo rm -rf /usr/lib/jvm/*
sudo rm -rf /opt/java
```

#### Install Java 17

**Step 1: Update package list**

```
sudo apt update
```

**Step 2: Install OpenJDK 17**

```
sudo apt install openjdk-17-jdk -y
```

**Step 3: Verify the installation**

```
java -version
```

* Once Java 17 is installed, download the latest version of Nar into the lib folder and start the NiFi client as shown in the screenshot below.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FLqVPLqNcsRVD4HT0tIpc%2Funknown.png?alt=media&#x26;token=0727e761-170b-43e0-b158-dc4a08f04ab3" alt=""><figcaption></figcaption></figure>

* Check the status of the bridge client and server in the application bridge page.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FRv9o88cZATsdZJjtFXTk%2Funknown.png?alt=media&#x26;token=79d94867-a9c5-4151-bd2c-7166097e859a" alt=""><figcaption></figcaption></figure>

## Validation and Testing

<table><thead><tr><th width="219.333251953125">Validation</th><th>Description</th></tr></thead><tbody><tr><td>BridgeCall</td><td>Conducted with customer to verify IP whitelisting and connector validation.</td></tr><tr><td>Connector Health</td><td>Ensure all connectors show a healthy status post migration.</td></tr><tr><td>App Availability</td><td>Confirm that the application UI and JOB services are running successfully.</td></tr></tbody></table>

BridgeCall must be required with the customer to verify the IP whitelisting and connectors  validation.

Connectors Validation:  Once all activities are done in migration, validate the connectors and check that the connectors are healthy.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FHu8Asq8MINzN6DWSg35J%2Funknown.png?alt=media&#x26;token=f777480a-f02c-4592-807a-6407541116cf" alt=""><figcaption></figcaption></figure>

## AskEdgi Integration

* Once the migrated application is validated and all connectors are healthy, the edgiInsightService synchronizes with the application.
* Upon successful sync, the edgi-data-service-1001 instance is created, indicating the AskEdgi workspace has been successfully provisioned within the application.

Once the Application is validated with healthy connectors, the [edgiInsightService](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/ovaledgeprod/services/ovaledgeprod-edgiInsightService/health?region=eu-west-2) will sink with the application, and the [edgi-data-service-1001](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/ovaledgeprod/services/edgi-data-service-1001/health?region=eu-west-2) will get created, indicating the AskEdgi workspace is created in the application.

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2Fe13j1d53lsWpb31sRTgL%2Funknown.png?alt=media&#x26;token=bae424c4-d3ab-405b-819e-d2945a86028b" alt=""><figcaption></figcaption></figure>

**AskEdgi workspace creation**

<figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2F8MdhplqdkGM5msiye6tX%2Funknown.png?alt=media&#x26;token=e71af529-9a79-408b-b212-c79ade66f6c7" alt=""><figcaption></figcaption></figure>

**Result**: AskEdgi workspace appears within the application dashboard, confirming successful integration.

***

Copyright © 2025, OvalEdge LLC, Peachtree Corners, GA, USA.
