Startseite 5 Techblog 5 Automating Deployment of SOA Suite with OCI Marketplace image

Automating Deployment of SOA Suite with OCI Marketplace image

17. März 2025

Johannes Michler PROMATIS Horus Oracle


Executive Vice President – Head of Platforms & Development

While I typically prefer running Dev/Test environments of Oracle SOA Suite in Docker Containers (see Running Oracle SOA Suite in Docker Blog Post Series) there are situations, when it is preferable to leverage the SOA Suite on OCI Cloud Marketplace offering: https://cloud.oracle.com/marketplace/application/79644714/overview

This is especially true if there are not enough existing (BYOL) licenses available and you want to / have to "rent" the technology licenses. When using the Integrated SOA Gateway (ISG) of Oracle E-Business Suite, you may want to automate the provisioning of the SOA Suite environment on every clone. Fortunately, it is quite easily possible to automate the deployment and configuration of Oracle SOA Suite on OCI using Terraform and the OCI Command Line Interface. Let's have a look how you can provision such SOA instances in a fully automated way as we've done as part of a moving E-Business Suite and SOA Suite to OCI project for one of our PROMATIS customers.

(Initial) manual provisioning

Before fully automating the provisioning, I prefer to do the provisioning in a manual way once to find out all the relevant configurations. Start by selecting "your" version (for ISG in E-Business Suite 14c is not yet certified) and push the "Launch Stack" button:

Initiating launch of SOA Suite (PAID) from Oracle Cloud Marketplace
Initiating launch of SOA Suite (PAID) from Oracle Cloud Marketplace

Then configure the relevant parameters of the Terraform Stack created:

Configuring Terraform Stack for a first (manually created) SOA Environment
Configuring Terraform Stack for a first (manually created) SOA Environment

You probably want to especially consider the Load Balancer as well as the database setup. For the database you could use a common or (also automatically provisioned) dedicated Autonomous Transaction Processing database on OCI. In our case we used the database of Oracle E-Business Suite itself to also store the SOA Suite MDS repository.

Do not Apply the stack and note down the OCID of the manually created stack; we'll refer to that later as $MAN_STACK_OCID.

Manually prepared environment
Manually prepared environment

Note: If you've never provisioned a SOA Suite on Oracle Cloud Marketplace, I suggest to apply the stack and verify that you've configured everything correctly.

There are more details on the Setup here: https://docs.oracle.com/en/cloud/paas/soa/soa-marketplace/index.html

This blog post focuses on the automated deployment though; the Oracle documentation gives some guidance on this as well: https://docs.oracle.com/en/cloud/paas/soa/soa-marketplace/soamp-provision-oracle-soa-suite-marketplace-using-oci-cli.html

Preparing automated provisioning

To automate the provisioning, you first of all have to prepare the OCI Command Line Interface (CLI). This is described over there: https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm

Then you can download the terraform configuration (a zip file) and the variables defined through the UI using the following two commands:

oci resource-manager stack get-stack-tf-config --stack-id $MAN_STACK_OCID --file /u01/soa-otm/soa_stack_jan2025.zip
oci resource-manager stack get --stack-id $MAN_STACK_OCID

The first command creates a zip file with the terraform config from Cloud Marketplace. The second command should give an output as follows:

{
"data": {
"compartment-id": "ocid1.compartment.oc1..XXXXXZZZZ",
"config-source": {
"config-source-type": "ZIP_UPLOAD",
"working-directory": null
},
"custom-terraform-provider": null,
"defined-tags": {
"Oracle-Tags": {
"CreatedBy": "default/johannes.michler@promatis.de",
"CreatedOn": "2025-03-10T11:58:49.525Z"
}
},
"description": "Oracle SOA Suite 12.2.1.4 on Oracle Cloud Infrastructure (OCI)",
"display-name": "Oracle SOA Suite (PAID)-20250310125047",
"freeform-tags": {
"marketplace-listing-id": "79644714"
},
"id": "ocid1.ormstack.oc1.eu-frankfurt-1.XXXXXZZZZ",
"is-third-party-provider-experience-enabled": true,
"lifecycle-state": "ACTIVE",
"stack-drift-status": "NOT_CHECKED",
"terraform-version": "1.5.x",
"time-created": "2025-03-10T11:58:49.718000+00:00",
"time-drift-last-checked": null,
"variables": {
"adv_db_connectstring": "testc240930db-scan.dbsubnet.ebsnetwork.oraclevcn.com:1521/TESTC",
"adv_db_password": "XXXXXZZZZ",
"adv_db_user": "SYS",
"compartment_ocid": "ocid1.compartment.oc1..XXXXXZZZZ",
"db_strategy_existing_vcn": "Database Connection String (not recommended)",
"existing_vcn_id": "ocid1.vcn.oc1.eu-frankfurt-1.XXXXXZZZZ",
"instance_shape": "{\"instanceShape\"=\"VM.Standard.E5.Flex\",\"ocpus\"=1,\"memory\"=16}",
"network_compartment_id": "ocid1.compartment.oc1..XXXXXZZZZ",
"ons_topic_ocid": "ocid1.onstopic.oc1.eu-frankfurt-1.XXXXXZZZZ",
"private_endpoint_compartment_id": "ocid1.compartment.oc1..XXXXXZZZZ",
"private_endpoint_subnet_compartment_id": "ocid1.compartment.oc1..XXXXXZZZZ",
"private_endpoint_subnet_id": "ocid1.subnet.oc1.eu-frankfurt-1.XXXXXZZZZ",
"rcu_schema_password": "XXXXXZZZZ",
"rcu_schema_prefix": "xxsoatest",
"region": "eu-frankfurt-1",
"service_name": "xyz",
"ssh_public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABXXXXXZZZZ rsa-key-prodinger-michler",
"subnet_compartment_id": "ocid1.compartment.oc1..XXXXXZZZZ",
"subnet_strategy_existing_vcn": "Use Existing Subnet",
"subnet_type": "Use Private Subnet",
"tenancy_ocid": "ocid1.tenancy.oc1..XXXXXZZZZ",
"use_custom_schema_password": "true",
"use_custom_schema_prefix": "true",
"use_email_notification": "true",
"wls_admin_password": "XXXXXZZZZ",
"wls_scaleout_node_count": "1",
"wls_subnet_id": "ocid1.subnet.oc1.eu-frankfurt-1.XXXXXZZZZ"
}
},
"etag": "0de8a5ecf0b02430a05966d297ac207e266ce71333142841043dba2d514f83ba--gzip"
}

From that output you must note down the compartment where you want to create the stacks (first real line; we'll refer to that as $SOA_COMPARTMENT later) and the entire "variables" block. Put the entire content of the "variables" block into a file /u01/soa-otm/stack-variables.json:

Saved stack-variables json
Saved stack-variables.json

Creating and Applying Stack through CLI

With all the preparations done the actual provisioning is a matter of just three simple CLI commands. First, we create our new Stack:

oci resource-manager stack create --compartment-id $SOA_COMPARTMENT --config-source /u01/soa-otm/soa_stack_jan2025.zip --display-name SOA-Test --terraform-version 1.5.x --variables file:///u01/soa-otm/stack-variables.json --wait-for-state ACTIVE

We can then query the OCID of the stack just created, e.g. using:

 export OCID_STACK=$(oci resource-manager stack list -c $SOA_COMPARTMENT --display-name SOA-Test --query "data[].id|join(',',@)"| tr -d '\"')

Then we can apply the stack and thus provision the instance:

oci resource-manager job create-apply-job --stack-id $OCID_STACK --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED

Follow up activities

Depending on your requirements you eventually want to re-wire / create / set up OCI Load Balancers (e.g. using the "oci lb backend" commands).

Furthermore, for Integrated SOA Gateway of E-Business Suite various deployment scripts into the SOA Suite are required. I'll cover that in another blog post soon.

Cleaning up

Fortunately, not only provisioning but also de-provisioning can be fully automated. An existing environment with a known $OCID_STACK can be destroyed with the following command:

oci resource-manager job create-destroy-job --stack-id $OCID_STACK --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED

Then the stack itself can be removed as follows:

oci resource-manager stack delete --stack-id $OCID_STACK --wait-for-state DELETED --force

Summary

As shown in this blog post, in one of our PROMATIS projects we've been able to fully automate provisioning of an Oracle SOA Suite on OCI. These automated steps can then for example be integrated into a E-Business Suite Cloud Manager "Post-Cloning-Step".