From 6ae260a54d3b315c2a557d96db122833d738f891 Mon Sep 17 00:00:00 2001 From: ionelpanaitescu Date: Fri, 6 Oct 2023 11:54:13 +0200 Subject: [PATCH] adding the Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration solution --- ...us-Database-Select-AI-demonstration-RM.zip | Bin 0 -> 44396 bytes .../.gitignore | 6 + .../CONTRIBUTING.md | 32 + .../LICENSE | 27 + .../README.md | 644 ++++++++++++++++++ .../locals.tf | 66 ++ .../main.tf | 8 + .../database/adb/main.tf | 42 ++ .../database/adb/outputs.tf | 64 ++ .../database/adb/variables.tf | 27 + .../outputs.tf | 52 ++ .../provider.tf | 31 + .../provisioners.tf | 35 + .../schema.yaml | 300 ++++++++ .../scripts/init.sql | 44 ++ .../scripts/install-apex-app.sql | 57 ++ .../scripts/install-apex-workspace.sql | 31 + .../scripts/tables.sql.tmpl | 22 + .../variables.tf | 124 ++++ cloud-foundation/solutions/README.md | 1 + 20 files changed, 1613 insertions(+) create mode 100644 cloud-foundation/solutions-for-oracle-res-mgr/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration-RM.zip create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/.gitignore create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/CONTRIBUTING.md create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/LICENSE create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/README.md create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/locals.tf create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/main.tf create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/main.tf create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/outputs.tf create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/variables.tf create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/outputs.tf create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/provider.tf create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/provisioners.tf create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/schema.yaml create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/init.sql create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/install-apex-app.sql create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/install-apex-workspace.sql create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/tables.sql.tmpl create mode 100644 cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/variables.tf diff --git a/cloud-foundation/solutions-for-oracle-res-mgr/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration-RM.zip b/cloud-foundation/solutions-for-oracle-res-mgr/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration-RM.zip new file mode 100644 index 0000000000000000000000000000000000000000..b67bf79c09a85bce2a291c5a7cfb0daa746d7e5b GIT binary patch literal 44396 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 CrHg|A literal 0 HcmV?d00001 diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/.gitignore b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/.gitignore new file mode 100644 index 0000000..43d7d39 --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/.gitignore @@ -0,0 +1,6 @@ +# Copyright © 2022, Oracle and/or its affiliates. +# All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + +.terraform +*tfstate* +*.pem \ No newline at end of file diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/CONTRIBUTING.md b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/CONTRIBUTING.md new file mode 100644 index 0000000..e69c06c --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/CONTRIBUTING.md @@ -0,0 +1,32 @@ + +# Contributing to Oracle Cloud Foundation Terraform Framework + +## Contributing to Oracle Cloud Foundation Terraform Framework + +Oracle welcomes contributions to this repository from anyone. + +If you want to submit a pull request to fix a bug or enhance an existing +feature, please first open an issue and link to that issue when you +submit your pull request. + +If you have any questions about a possible submission, feel free to open +an issue too. + +## Pull request process + +1. Fork this repository +1. Create a branch in your fork to implement the changes. We recommend using +the issue number as part of your branch name, e.g. `1234-fixes` +1. Ensure that there is at least one test that would fail without the fix and +passes post fix +1. Submit the pull request. *Do not leave the pull request blank*. Explain exactly +what your changes are meant to do and provide simple steps on how to validate +your changes, ideally referencing the test. Ensure that you reference the issue +you created as well. We will assign the pull request to 1-2 people for review +before it is submitted internally and the PR is closed. \ No newline at end of file diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/LICENSE b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/LICENSE new file mode 100644 index 0000000..e7eefb0 --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/LICENSE @@ -0,0 +1,27 @@ +Copyright © 2023 Oracle and/or its affiliates. All rights reserved. + +The Universal Permissive License (UPL), Version 1.0 + +Subject to the condition set forth below, permission is hereby granted to any person obtaining a copy of this +software, associated documentation and/or data (collectively the "Software"), free of charge and under any and +all copyright rights in the Software, and any and all patent rights owned or freely licensable by each licensor +hereunder covering either (i) the unmodified Software as contributed to or provided by such licensor, or +(ii) the Larger Works (as defined below), to deal in both + +(a) the Software, and +(b) any piece of software and/or hardware listed in the lrgrwrks.txt file if one is included with the Software +(each a “Larger Work” to which the Software is contributed by such licensors), + +without restriction, including without limitation the rights to copy, create derivative works of, display, +perform, and distribute the Software and make, use, sell, offer for sale, import, export, have made, and have +sold the Software and the Larger Work(s), and to sublicense the foregoing rights on either these or other terms. + +This license is subject to the following condition: +The above copyright notice and either this complete permission notice or at a minimum a reference to the UPL must +be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. \ No newline at end of file diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/README.md b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/README.md new file mode 100644 index 0000000..dbf9582 --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/README.md @@ -0,0 +1,644 @@ +# Oracle Cloud Foundation Terraform Solution - Deploy ChatDB - Autonomous Database Select AI demonstration + +![](https://oracle-livelabs.github.io/adb/movie-stream-story-lite/introduction/images/moviestream.jpeg) + +## Table of Contents +1. [Overview](#overview) +1. [Deliverables](#deliverables) +1. [Architecture](#Architecture-Diagram) +1. [Executing Instructions](#instructions) + 1. [Deploy Using Oracle Resource Manager](#Deploy-Using-Oracle-Resource-Manager) + 1. [What to do after the Deployment via Resource Manager](#After-Deployment-via-Resource-Manager) + 1. [Deploy Using the Terraform CLI](#Deploy-Using-the-Terraform-CLI) + 1. [What to do after the Deployment via Terraform CLI](#After-Deployment-via-Terraform-CLI) +1. [Documentation](#documentation) +1. [The Team](#team) +1. [Feedback](#feedback) +1. [Known Issues](#known-issues) +1. [Contribute](#CONTRIBUTING.md) + + +## Overview +---------------- + +Location of the lab: [Integrate, Analyze and Act on All data using Autonomous Database](https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/view-workshop?wid=889) - **Lab 7: Use Graph analytics for product recommendations** + +In this lab, you will use Oracle Graph analytics to detect and create customer communities based on movie viewing behavior. Once you've created communities - make recommendations based on what your community members have watched. + +Watch the video below for a quick walk-through of the lab. [_click here_](https://cdnapisec.kaltura.com/html5/html5lib/v2.98/mwEmbedFrame.php/p/2171811/uiconf_id/35965902/entry_id/1_ret5ywcn?wid=_2171811&iframeembed=true&playerId=kaltura_player&entry_id=1_ret5ywcn&flashvars[streamerType]=auto#). + + +About graph + +When you model your data as a graph, you can run graph algorithms to analyze connections and relationships in your data. You can also use graph queries to find patterns in your data, such as cycles, paths between vertices, anomalous patterns, and others. Graph algorithms are invoked using a Java or Python API, and graph queries are run using PGQL (Property Graph Query Language, see pgql-lang.org). + +In this lab you will use a graph created from the tables MOVIE, CUSTOMER_PROMOTIONS, and CUSTSALES_PROMOTIONS. MOVIE and CUSTOMER_PROMOTIONS are vertex tables (every row in these tables becomes a vertex). CUSTSALES_PROMOTIONS connects the two tables, and is the edge table. Every time a customer in CUSTOMER_PROMOTIONS rents a movie in the table MOVIE, that is an edge in the graph. This graph has been created for you for use in this lab. + +You have the choice of over 60 pre-built algorithms when analyzing a graph. In this lab you will use the Personalized SALSA algorithm, which is a good choice for product recommendations. Customer vertices map to hubs and movies map to authorities. Higher hub scores indicate a closer relationship between customers. Higher authority scores indicate that the vertex (or movie) is plays a more important role in establishing that closeness. + +Objectives + +In this lab, you will use the Graph Studio feature of Autonomous Database to: + +Use a notebook +Run a few PGQL graph queries +Use python to run Personalized SALSA from the algorithm library +Query and save the recommendations + + + +Oracle Cloud provides an amazing platform to productively deliver secure, insightful, scalable and performant solutions. MovieStream designed their solution leveraging the world class Oracle Autonomous Database and Oracle Cloud Infrastructure (OCI) Data Lake services. Their data architecture is following the Oracle Reference Architecture [_Enterprise Data Warehousing - an Integrated Data Lake_](https://docs.oracle.com/en/solutions/oci-curated-analysis/index.html) - which is used by Oracle customers around the world. It's worthwhile to review the architecture so you can understand the value of integrating the data lake and data warehouse - as it enables you to answer more complex questions using all your data. + + +## Deliverables +---------------- + + This repository encloses one deliverable: + +- A reference implementation written in Terraform HCL (Hashicorp Language) that provisions fully functional resources in an OCI tenancy. + +## Architecture-Diagram +---------------- + +In this workshop, we'll start with two key components of MovieStream's architecture. MovieStream is storing their data across Oracle Object Storage and Autonomous Database. Data is captured from various sources into a landing zone in object storage. This data is then processed (cleansed, transformed and optimized) and stored in a gold zone on object storage. Once the data is curated, it is loaded into an Autonomous Database where it is analyzed by many (and varied) members of the user community. + + +![](https://oracle-livelabs.github.io/adb/movie-stream-story-lite/introduction/images/architecture.png) + + +## Executing Instructions +---------------- + +## Prerequisites + +- Permission to `manage` the following types of resources in your Oracle Cloud Infrastructure tenancy: `autonomous database` +- Quota to create the following resources: 1 ADW database instance inside OCI. +If you don't have the required permissions and quota, contact your tenancy administrator. See [Policy Reference](https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Reference/policyreference.htm), [Service Limits](https://docs.cloud.oracle.com/en-us/iaas/Content/General/Concepts/servicelimits.htm), [Compartment Quotas](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcequotas.htm). + +# Deploy Using Oracle Resource Manager + +1. Click [![Deploy to Oracle Cloud](https://oci-resourcemanager-plugin.plugins.oci.oraclecloud.com/latest/deploy-to-oracle-cloud.svg)](https://cloud.oracle.com/resourcemanager/stacks/create?region=home&zipUrl=https://github.com/oracle-devrel/terraform-oci-oracle-cloud-foundation/releases/download/v1.0.0/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration-RM.zip) + + + If you aren't already signed in, when prompted, enter the tenancy and user credentials. + +2. Review and accept the terms and conditions. +3. Select the region where you want to deploy the stack. +4. Follow the on-screen prompts and instructions to create the stack. +5. After creating the stack, click **Terraform Actions**, and select **Plan**. +6. Wait for the job to be completed, and review the plan. + To make any changes, return to the Stack Details page, click **Edit Stack**, and make the required changes. Then, run the **Plan** action again. +7. If no further changes are necessary, return to the Stack Details page, click **Terraform Actions**, and select **Apply**. + +## What to do after the Deployment via Resource Manager +---------------- + +- After the solution was deployed successfully from Terraform CLI you will have some outputs on the screen. + +Example of output: + +``` +Apply complete! Resources: 5 added, 0 changed, 0 destroyed. +Outputs: +ADW_Database_db_connection = tolist([ + { + "all_connection_strings" = tomap({ + "HIGH" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_high.adb.oraclecloud.com" + "LOW" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_low.adb.oraclecloud.com" + "MEDIUM" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_medium.adb.oraclecloud.com" + }) + "dedicated" = "" + "high" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_high.adb.oraclecloud.com" + "low" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_low.adb.oraclecloud.com" + "medium" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_medium.adb.oraclecloud.com" + "profiles" = tolist([ + { + "consumer_group" = "HIGH" + "display_name" = "moviestreamworkshopg_high" + "host_format" = "FQDN" + "protocol" = "TCPS" + "session_mode" = "DIRECT" + "syntax_format" = "LONG" + "tls_authentication" = "MUTUAL" + "value" = "(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))(connect_data=(service_name=rddainsuh6u1okc_moviestreamworkshopg_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))" + }, + { + "consumer_group" = "LOW" + "display_name" = "moviestreamworkshopg_low" + "host_format" = "FQDN" + "protocol" = "TCPS" + "session_mode" = "DIRECT" + "syntax_format" = "LONG" + "tls_authentication" = "MUTUAL" + "value" = "(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))(connect_data=(service_name=rddainsuh6u1okc_moviestreamworkshopg_low.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))" + }, + { + "consumer_group" = "MEDIUM" + "display_name" = "moviestreamworkshopg_medium" + "host_format" = "FQDN" + "protocol" = "TCPS" + "session_mode" = "DIRECT" + "syntax_format" = "LONG" + "tls_authentication" = "MUTUAL" + "value" = "(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))(connect_data=(service_name=rddainsuh6u1okc_moviestreamworkshopg_medium.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))" + }, + ]) + }, +]) +Database_Actions = [ + "https://RDDAINSUH6U1OKC-MOVIESTREAMWORKSHOPG.adb.us-ashburn-1.oraclecloudapps.com/ords/sql-developer", +] +adb_admin_password = +adb_user_name = "MOVIESTREAM" +adb_user_password = "****************" +apex_url = [ + "https://RDDAINSUH6U1OKC-MOVIESTREAMWORKSHOPG.adb.us-ashburn-1.oraclecloudapps.com/ords/apex", +] +database_fully_qualified_name = "rddainsuh6u1okc-moviestreamworkshopg.adb.us-ashburn-1.oraclecloudapps.com" +graph_studio_url = [ + "https://RDDAINSUH6U1OKC-MOVIESTREAMWORKSHOPG.adb.us-ashburn-1.oraclecloudapps.com/graphstudio/", +] +machine_learning_user_management_url = [ + "https://RDDAINSUH6U1OKC-MOVIESTREAMWORKSHOPG.adb.us-ashburn-1.oraclecloudapps.com/omlusers/", +] +select_ai_demo_url = "https://rddainsuh6u1okc-moviestreamworkshopg.adb.us-ashburn-1.oraclecloudapps.com/ords/r/moviestream/chatdb" + +``` + +## Oracle MovieStream demonstration deployment + +This stack installs everything required to run the Oracle MovieStream Live Lab. Now you can follow the steps for the MovieStream Live lab 7 from https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/run-workshop?p210_wid=889&p210_wec=&session=112456050571777 + +You can find details for connecting to these services in the Stack's Job Details Output. + +## Connect to Autonomous Database +Go to Autonomous Database in the OCI console. The default name given to the database instance is: **OracleMovieStream**. You specified the ADMIN password when deploying the Oracle MovieStream stack. + +A database user was created during the deployment. You can connect as that user to look at the database schema, use analytic features, etc. + +* User: `MOVIESTREAM`, Password: `watchS0meMovies#` +* User: `ADMIN`, Password: `WlsAtpDb1234#` + +Please change these passwords after deployment. + +## Using database tools and applications + +All of the Autonomous Database tools are available to you, including SQL worksheet, Data Studio, Machine Learning and Graph notebooks, etc. Go to Database Actions to access these tools. + +* **Database Actions:** Load, explore, transform, model, and catalog your data. Use an SQL worksheet, build REST interfaces and low-code apps, manage users and connections, build and apply machine learning models. + +Access Link is the graph_studio_url URL from the output. Example: +https://RDDAINSUH6U1OKC-ORACLEMOVIESTREAM.adb.us-ashburn-1.oraclecloudapps.com/ords/sql-developer + + +* **Graph Studio:** Oracle Graph Studio lets you create scalable property graph databases. Graph Studio automates the creation of graph models and in-memory graphs from database tables. It includes notebooks and developer APIs that allow you to execute graph queries using PGQL (an SQL-like graph query language) and over 50 built-in graph algorithms. Graph Studio also offers dozens of visualization, including native graph visualization. + +Access Link is the graph_studio_url URL from the output. Example: +https://RDDAINSUH6U1OKC-ORACLEMOVIESTREAM.adb.us-ashburn-1.oraclecloudapps.com/graphstudio/ + + +* **Application Express:** Oracle Application Express (APEX) is a low-code development platform that enables you to build scalable, secure enterprise apps that can be deployed anywhere. + +Access Link is the graph_studio_url URL from the output. Example: +https://RDDAINSUH6U1OKC-ORACLEMOVIESTREAM.adb.us-ashburn-1.oraclecloudapps.com/ords/sql-developer + + +* **Oracle Machine Learning User Notebooks:** Oracle Machine Learning notebooks provide easy access to Oracle's parallelized, scalable in-database implementations of a library of Oracle Advanced Analytics' machine learning algorithms (classification, regression, anomaly detection, clustering, associations, attribute importance, feature extraction, times series, etc.), SQL, PL/SQL and Oracle's statistical and analytical SQL functions. + +The stack's job output also includes URLs that take you directly to the tools. + +Access Link is the machine_learning_user_management_url URL from the output. Example: +https://RDDAINSUH6U1OKC-ORACLEMOVIESTREAM.adb.us-ashburn-1.oraclecloudapps.com/omlusers/ + + + +# Deploy Using the Terraform CLI + + +## Clone the Module +Now, you'll want a local copy of this repo. You can make that with the commands: + + git clone https://github.com/oracle-devrel/terraform-oci-oracle-cloud-foundation.git + cd terraform-oci-oracle-cloud-foundation/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration + ls + +## Deployment + +- Follow the instructions from Prerequisites links in order to install terraform. +- Download the terraform version suitable for your operating system. +- Unzip the archive. +- Add the executable to the PATH. +- You will have to generate an API signing key (public/private keys) and the public key should be uploaded in the OCI console, for the iam user that will be used to create the resources. Also, you should make sure that this user has enough permissions to create resources in OCI. In order to generate the API Signing key, follow the steps from: https://docs.us-phoenix-1.oraclecloud.com/Content/API/Concepts/apisigningkey.htm#How + The API signing key will generate a fingerprint in the OCI console, and that fingerprint will be used in a terraform file described below. +- You will also need to generate an OpenSSH public key pair. Please store those keys in a place accessible like your user home .ssh directory. + +## Prerequisites + +- Install Terraform v0.15 or greater: https://www.terraform.io/downloads.html +- Install sqlcl on your operating system: https://docs.oracle.com/en/database/oracle/apex/22.1/aeadm/downloading-and-installing-sqlcl.html +- Install Python 3.6: https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-local-programming-environment-on-centos-7 +- Generate an OCI API Key +- Create your config under \$home*directory/.oci/config (run \_oci setup config* and follow the steps) +- Gather Tenancy related variables (tenancy_id, user_id, local path to the oci_api_key private key, fingerprint of the oci_api_key_public key, and region) + +### Installing Terraform + +Go to [terraform.io](https://www.terraform.io/downloads.html) and download the proper package for your operating system and architecture. Terraform is distributed as a single binary. +Install Terraform by unzipping it and moving it to a directory included in your system's PATH. You will need the latest version available. + +### Prepare Terraform Provider Values + +**variables.tf** is located in the root directory. This file is used in order to be able to make API calls in OCI, hence it will be needed by all terraform automations. + +In order to populate the **variables.tf** file, you will need the following: + +- Tenancy OCID +- User OCID +- Local Path to your private oci api key +- Fingerprint of your public oci api key +- Region + + +#### **Getting the Tenancy and User OCIDs** + +You will have to login to the [console](https://console.us-ashburn-1.oraclecloud.com) using your credentials (tenancy name, user name and password). If you do not know those, you will have to contact a tenancy administrator. + +In order to obtain the tenancy ocid, after logging in, from the menu, select Administration -> Tenancy Details. The tenancy OCID, will be found under Tenancy information and it will be similar to **ocid1.tenancy.oc1..aaa…** + +In order to get the user ocid, after logging in, from the menu, select Identity -> Users. Find your user and click on it (you will need to have this page open for uploading the oci_api_public_key). From this page, you can get the user OCID which will be similar to **ocid1.user.oc1..aaaa…** + +#### **Creating the OCI API Key Pair and Upload it to your user page** + +Create an oci_api_key pair in order to authenticate to oci as specified in the [documentation](https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm#How): + +Create the .oci directory in the home of the current user + +`$ mkdir ~/.oci` + +Generate the oci api private key + +`$ openssl genrsa -out ~/.oci/oci_api_key.pem 2048` + +Make sure only the current user can access this key + +`$ chmod go-rwx ~/.oci/oci_api_key.pem` + +Generate the oci api public key from the private key + +`$ openssl rsa -pubout -in ~/.oci/oci_api_key.pem -out ~/.oci/oci_api_key_public.pem` + +You will have to upload the public key to the oci console for your user (go to your user page -> API Keys -> Add Public Key and paste the contents in there) in order to be able to do make API calls. + +After uploading the public key, you can see its fingerprint into the console. You will need that fingerprint for your variables.tf file. +You can also get the fingerprint from running the following command on your local workstation by using your newly generated oci api private key. + +`$ openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem | openssl md5 -c` + +#### **Generating an SSH Key Pair on UNIX or UNIX-Like Systems Using ssh-keygen** + +- Run the ssh-keygen command. + +`ssh-keygen -b 2048 -t rsa` + +- The command prompts you to enter the path to the file in which you want to save the key. A default path and file name are suggested in parentheses. For example: /home/user_name/.ssh/id_rsa. To accept the default path and file name, press Enter. Otherwise, enter the required path and file name, and then press Enter. +- The command prompts you for a passphrase. Enter a passphrase, or press ENTER if you don't want to havea passphrase. + Note that the passphrase isn't displayed when you type it in. Remember the passphrase. If you forget the passphrase, you can't recover it. When prompted, enter the passphrase again to confirm it. +- The command generates an SSH key pair consisting of a public key and a private key, and saves them in the specified path. The file name of the public key is created automatically by appending .pub to the name of the private key file. For example, if the file name of the SSH private key is id_rsa, then the file name of the public key would be id_rsa.pub. + Make a note of the path where you've saved the SSH key pair. + When you create instances, you must provide the SSH public key. When you log in to an instance, you must specify the corresponding SSH private key and enter the passphrase when prompted. + +#### **Getting the Region** + +Even though, you may know your region name, you will needs its identifier for the variables.tf file (for example, US East Ashburn has us-ashburn-1 as its identifier). +In order to obtain your region identifier, you will need to Navigate in the OCI Console to Administration -> Region Management +Select the region you are interested in, and save the region identifier. + + +#### **Prepare the variables.tf file** + +You will have to modify the **variables.tf** file to reflect the values that you’ve captured. + +``` +variable "tenancy_ocid" { + type = string + default = "" (tenancy ocid, obtained from OCI console - Profile -> Tenancy) +} + +variable "region" { + type = string + default = "" (the region used for deploying the infrastructure - ex: eu-frankfurt-1) +} + +variable "compartment_id" { + type = string + default = "" (the compartment used for deploying the solution - ex: compartment1) +} + +variable "user_ocid" { + type = string + default = "" (user ocid, obtained from OCI console - Profile -> User Settings) +} + +variable "fingerprint" { + type = string + default = "" (fingerprint obtained after setting up the API public key in OCI console - Profile -> User Settings -> API Keys -> Add Public Key) +} + +variable "private_key_path" { + type = string + default = "" (the path of your local oci api key - ex: /root/.ssh/oci_api_key.pem) +} + +``` + +## Repository files + + +* **modules(folder)** - ( this folder will be pressent only for the Resource Manager zipped files) Contains folders with subsystems and modules for each section of the project: networking, autonomous database, analytics cloud, object storage, data catalog etc. +Also in the modules folder there is a folder called provisioner - that will provision your full infrastructure with the data model. +* **scripts(folder)** - this folder contains the necessary scripts that will run on the DB. +* **CONTRIBUTING.md** - Contributing guidelines, also called Contribution guidelines, the CONTRIBUTING.md file, or software contribution guidelines, is a text file which project managers include in free and open-source software packages or other open media packages for the purpose of describing how others may contribute user-generated content to the project.The file explains how anyone can engage in activities such as formatting code for submission or submitting patches +* **LICENSE** - The Universal Permissive License (UPL), Version 1.0 +* **local.tf** - Local values can be helpful to avoid repeating the same values or expressions multiple times in a configuration, but if overused they can also make a configuration hard to read by future maintainers by hiding the actual values used.Here is the place where all the resources are defined. +* **main.tf** - Main Terraform script used for instantiating the Oracle Cloud Infrastructure provider and all subsystems modules +* **outputs.tf** - Defines project's outputs that you will see after the code runs successfuly +* **provider.tf** - The terraform provider that will be used (OCI) +* **README.md** - This file +* **schema.yaml** - Schema documents are recommended for Terraform configurations when using Resource Manager. Including a schema document allows you to extend pages in the Oracle Cloud Infrastructure Console. Facilitate variable entry in the Create Stack page by surfacing SSH key controls and by naming, grouping, dynamically prepopulating values, and more. Define text in the Application Information tab of the stack detail page displayed for a created stack. +* **variables.tf** - Project's global variables + +Secondly, populate the `terraform.tf` file with the disared configuration following the information: + + +# Autonomous Data Warehouse + +The ADW subsystem / module is able to create ADW/ATP databases. + +* Parameters: + * __db_name__ - The database name. The name must begin with an alphabetic character and can contain a maximum of 14 alphanumeric characters. Special characters are not permitted. The database name must be unique in the tenancy. + * __db_password__ - The password must be between 12 and 30 characters long, and must contain at least 1 uppercase, 1 lowercase, and 1 numeric character. It cannot contain the double quote symbol (") or the username "admin", regardless of casing. The password is mandatory if source value is "BACKUP_FROM_ID", "BACKUP_FROM_TIMESTAMP", "DATABASE" or "NONE". + * __db_compute_model__ - The compute model of the Autonomous Database. This is required if using the computeCount parameter. If using cpuCoreCount then it is an error to specify computeModel to a non-null value. + * __db_compute_count__ - The compute amount available to the database. Minimum and maximum values depend on the compute model and whether the database is on Shared or Dedicated infrastructure. For an Autonomous Database on Shared infrastructure, the 'ECPU' compute model requires values in multiples of two. Required when using the computeModel parameter. When using cpuCoreCount parameter, it is an error to specify computeCount to a non-null value. + * __db_size_in_tbs__ - The size, in gigabytes, of the data volume that will be created and attached to the database. This storage can later be scaled up if needed. The maximum storage value is determined by the infrastructure shape. See Characteristics of Infrastructure Shapes for shape details. + * __db_workload__ - The Autonomous Database workload type. The following values are valid: + - OLTP - indicates an Autonomous Transaction Processing database + - DW - indicates an Autonomous Data Warehouse database + - AJD - indicates an Autonomous JSON Database + - APEX - indicates an Autonomous Database with the Oracle APEX Application Development workload type. *Note: db_workload can only be updated from AJD to OLTP or from a free OLTP to AJD. + * __db_version__ - A valid Oracle Database version for Autonomous Database.db_workload AJD and APEX are only supported for db_version 19c and above. + * __db_enable_auto_scaling__ - Indicates if auto scaling is enabled for the Autonomous Database OCPU core count. The default value is FALSE. + * __db_is_free_tier__ - Indicates if this is an Always Free resource. The default value is false. Note that Always Free Autonomous Databases have 1 CPU and 20GB of memory. For Always Free databases, memory and CPU cannot be scaled. When db_workload is AJD or APEX it cannot be true. + * __db_license_model__ - The Oracle license model that applies to the Oracle Autonomous Database. Bring your own license (BYOL) allows you to apply your current on-premises Oracle software licenses to equivalent, highly automated Oracle PaaS and IaaS services in the cloud. License Included allows you to subscribe to new Oracle Database software licenses and the Database service. Note that when provisioning an Autonomous Database on dedicated Exadata infrastructure, this attribute must be null because the attribute is already set at the Autonomous Exadata Infrastructure level. When using shared Exadata infrastructure, if a value is not specified, the system will supply the value of BRING_YOUR_OWN_LICENSE. It is a required field when db_workload is AJD and needs to be set to LICENSE_INCLUDED as AJD does not support default license_model value BRING_YOUR_OWN_LICENSE. + * __db_data_safe_status__ - (Updatable) Status of the Data Safe registration for this Autonomous Database. Could be REGISTERED or NOT_REGISTERED. + * __db_operations_insights_status__ - (Updatable) Status of Operations Insights for this Autonomous Database. Values supported are ENABLED and NOT_ENABLED + * __db_database_management_status__ - Status of Database Management for this Autonomous Database. Values supported are ENABLED and NOT_ENABLED + +The Workshop Settings are: + +* Parameters: + * __llm_secret__ - Secret API key used to connect to AI model + * __tag__ - Pick the datasets to load. The default is gen-ai to start the graph lab. + * __run_post_load_procedures__ - Run procedures after loading data + + +Below is an example: + +``` + +variable "db_name" { + type = string + default = "MovieStreamWorkshop" +} + +variable "db_password" { + type = string + default = "" +} + +variable "db_compute_model" { + type = string + default = "ECPU" +} + +variable "db_compute_count" { + type = number + default = 4 +} + +variable "db_size_in_tbs" { + type = number + default = 1 +} + +variable "db_workload" { + type = string + default = "DW" +} + +variable "db_version" { + type = string + default = "19c" +} + +variable "db_enable_auto_scaling" { + type = bool + default = false +} + +variable "db_is_free_tier" { + type = bool + default = false +} + +variable "db_license_model" { + type = string + default = "LICENSE_INCLUDED" +} + +variable "db_data_safe_status" { + type = string + default = "NOT_REGISTERED" + # default = "REGISTERED" +} + +variable "db_operations_insights_status" { + type = string + default = "NOT_ENABLED" + # default = "ENABLED" +} + +variable "db_database_management_status" { + type = string + default = "NOT_ENABLED" + # default = "ENABLED" +} + +# Workshop Settings + +variable "llm_secret" { + type = string + default = "null" +} + +variable "tag" { + type = string + default = "gen-ai" +} + +variable "run_post_load_procedures" { + type = bool + default = true +} +``` + +## Running the code + +``` +# Run init to get terraform modules +$ terraform init + +# Create the infrastructure +$ terraform apply --auto-approve + +# If you are done with this infrastructure, take it down +$ terraform destroy --auto-approve +``` + +## What to do after the Deployment via Terraform CLI +---------------- + +- After the solution was deployed successfully from Terraform CLI you will have some outputs on the screen. + +Example of output: + +``` +Apply complete! Resources: 5 added, 0 changed, 0 destroyed. +Outputs: +ADW_Database_db_connection = tolist([ + { + "all_connection_strings" = tomap({ + "HIGH" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_high.adb.oraclecloud.com" + "LOW" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_low.adb.oraclecloud.com" + "MEDIUM" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_medium.adb.oraclecloud.com" + }) + "dedicated" = "" + "high" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_high.adb.oraclecloud.com" + "low" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_low.adb.oraclecloud.com" + "medium" = "adb.us-ashburn-1.oraclecloud.com:1522/rddainsuh6u1okc_moviestreamworkshopg_medium.adb.oraclecloud.com" + "profiles" = tolist([ + { + "consumer_group" = "HIGH" + "display_name" = "moviestreamworkshopg_high" + "host_format" = "FQDN" + "protocol" = "TCPS" + "session_mode" = "DIRECT" + "syntax_format" = "LONG" + "tls_authentication" = "MUTUAL" + "value" = "(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))(connect_data=(service_name=rddainsuh6u1okc_moviestreamworkshopg_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))" + }, + { + "consumer_group" = "LOW" + "display_name" = "moviestreamworkshopg_low" + "host_format" = "FQDN" + "protocol" = "TCPS" + "session_mode" = "DIRECT" + "syntax_format" = "LONG" + "tls_authentication" = "MUTUAL" + "value" = "(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))(connect_data=(service_name=rddainsuh6u1okc_moviestreamworkshopg_low.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))" + }, + { + "consumer_group" = "MEDIUM" + "display_name" = "moviestreamworkshopg_medium" + "host_format" = "FQDN" + "protocol" = "TCPS" + "session_mode" = "DIRECT" + "syntax_format" = "LONG" + "tls_authentication" = "MUTUAL" + "value" = "(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))(connect_data=(service_name=rddainsuh6u1okc_moviestreamworkshopg_medium.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))" + }, + ]) + }, +]) +Database_Actions = [ + "https://RDDAINSUH6U1OKC-MOVIESTREAMWORKSHOPG.adb.us-ashburn-1.oraclecloudapps.com/ords/sql-developer", +] +adb_admin_password = +adb_user_name = "MOVIESTREAM" +adb_user_password = "****************" +apex_url = [ + "https://RDDAINSUH6U1OKC-MOVIESTREAMWORKSHOPG.adb.us-ashburn-1.oraclecloudapps.com/ords/apex", +] +database_fully_qualified_name = "rddainsuh6u1okc-moviestreamworkshopg.adb.us-ashburn-1.oraclecloudapps.com" +graph_studio_url = [ + "https://RDDAINSUH6U1OKC-MOVIESTREAMWORKSHOPG.adb.us-ashburn-1.oraclecloudapps.com/graphstudio/", +] +machine_learning_user_management_url = [ + "https://RDDAINSUH6U1OKC-MOVIESTREAMWORKSHOPG.adb.us-ashburn-1.oraclecloudapps.com/omlusers/", +] +select_ai_demo_url = "https://rddainsuh6u1okc-moviestreamworkshopg.adb.us-ashburn-1.oraclecloudapps.com/ords/r/moviestream/chatdb" + +``` + +## Oracle MovieStream demonstration deployment + +This stack installs everything required to run the Oracle MovieStream Live Lab. Now you can follow the steps for the MovieStream Live lab 7 from https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/run-workshop?p210_wid=889&p210_wec=&session=112456050571777 + +You can find details for connecting to these services in the Stack's Job Details Output. + +## Connect to Autonomous Database +Go to Autonomous Database in the OCI console. The default name given to the database instance is: **OracleMovieStream**. You specified the ADMIN password when deploying the Oracle MovieStream stack. + +A database user was created during the deployment. You can connect as that user to look at the database schema, use analytic features, etc. + +* User: `MOVIESTREAM`, Password: `watchS0meMovies#` +* User: `ADMIN`, Password: `WlsAtpDb1234#` + +Please change these passwords after deployment. + +## Using database tools and applications + +All of the Autonomous Database tools are available to you, including SQL worksheet, Data Studio, Machine Learning and Graph notebooks, etc. Go to Database Actions to access these tools. + +* **Database Actions:** Load, explore, transform, model, and catalog your data. Use an SQL worksheet, build REST interfaces and low-code apps, manage users and connections, build and apply machine learning models. + +Access Link is the graph_studio_url URL from the output. Example: +https://RDDAINSUH6U1OKC-ORACLEMOVIESTREAM.adb.us-ashburn-1.oraclecloudapps.com/ords/sql-developer + + +* **Graph Studio:** Oracle Graph Studio lets you create scalable property graph databases. Graph Studio automates the creation of graph models and in-memory graphs from database tables. It includes notebooks and developer APIs that allow you to execute graph queries using PGQL (an SQL-like graph query language) and over 50 built-in graph algorithms. Graph Studio also offers dozens of visualization, including native graph visualization. + +Access Link is the graph_studio_url URL from the output. Example: +https://RDDAINSUH6U1OKC-ORACLEMOVIESTREAM.adb.us-ashburn-1.oraclecloudapps.com/graphstudio/ + + +* **Application Express:** Oracle Application Express (APEX) is a low-code development platform that enables you to build scalable, secure enterprise apps that can be deployed anywhere. + +Access Link is the graph_studio_url URL from the output. Example: +https://RDDAINSUH6U1OKC-ORACLEMOVIESTREAM.adb.us-ashburn-1.oraclecloudapps.com/ords/sql-developer + + +* **Oracle Machine Learning User Notebooks:** Oracle Machine Learning notebooks provide easy access to Oracle's parallelized, scalable in-database implementations of a library of Oracle Advanced Analytics' machine learning algorithms (classification, regression, anomaly detection, clustering, associations, attribute importance, feature extraction, times series, etc.), SQL, PL/SQL and Oracle's statistical and analytical SQL functions. + +The stack's job output also includes URLs that take you directly to the tools. + +Access Link is the machine_learning_user_management_url URL from the output. Example: +https://RDDAINSUH6U1OKC-ORACLEMOVIESTREAM.adb.us-ashburn-1.oraclecloudapps.com/omlusers/ + + +## Documentation + +[Autonomous Databases Overview](https://docs.oracle.com/en-us/iaas/Content/Database/Concepts/adboverview.htm) + +[Terraform Autonomous Databases Resource](https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/database_autonomous_database) + + +## The Team +- **Owners**: [Panaitescu Ionel](https://github.com/ionelpanaitescu) , [Marty Gubar](https://github.com/martygubar) + +## Feedback +We welcome your feedback. To post feedback, submit feature ideas or report bugs, please use the Issues section on this repository. + +## Known Issues +**At the moment, there are no known issues for this solution** + + diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/locals.tf b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/locals.tf new file mode 100644 index 0000000..ee33bd4 --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/locals.tf @@ -0,0 +1,66 @@ +# Copyright © 2023, Oracle and/or its affiliates. +# All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + +data "oci_identity_availability_domains" "ADs" { + compartment_id = var.tenancy_ocid +} + +data "oci_identity_tenancy" "tenancy" { + tenancy_id = var.tenancy_ocid +} + +data "template_file" "ad_names" { + count = length(data.oci_identity_availability_domains.ADs.availability_domains) + template = lookup(data.oci_identity_availability_domains.ADs.availability_domains[count.index], "name") +} + +data "oci_core_services" "sgw_services" { + filter { + name = "cidr_block" + values = ["all-.*-services-in-oracle-services-network"] + regex = true + } +} + +data "oci_identity_region_subscriptions" "home_region_subscriptions" { + tenancy_id = var.tenancy_ocid + + filter { + name = "is_home_region" + values = [true] + } +} + +locals{ + ad_names = compact(data.template_file.ad_names.*.rendered) + conn_db = module.adb.db_connection[0].profiles[1].value + +# Create Autonomous Data Warehouse + adw_params = { + adw = { + compartment_id = var.compartment_id + compute_model = var.db_compute_model + compute_count = var.db_compute_count + size_in_tbs = var.db_size_in_tbs + db_name = var.db_name + db_workload = var.db_workload + db_version = var.db_version + enable_auto_scaling = var.db_enable_auto_scaling + is_free_tier = var.db_is_free_tier + license_model = var.db_license_model + create_local_wallet = true + database_admin_password = var.db_password + database_wallet_password = var.db_password + data_safe_status = var.db_data_safe_status + operations_insights_status = var.db_operations_insights_status + database_management_status = var.db_database_management_status + is_mtls_connection_required = null + subnet_id = null + nsg_ids = null + defined_tags = {} + }, +} + +# End + +} diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/main.tf b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/main.tf new file mode 100644 index 0000000..29b55b3 --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/main.tf @@ -0,0 +1,8 @@ +# Copyright © 2023, Oracle and/or its affiliates. +# All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + +# Create ADW Database with Endpoint in private subnet or public ADW +module "adb" { + source = "./modules/cloud-foundation-library/database/adb" + adw_params = local.adw_params +} \ No newline at end of file diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/main.tf b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/main.tf new file mode 100644 index 0000000..547572e --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/main.tf @@ -0,0 +1,42 @@ +# Copyright © 2023, Oracle and/or its affiliates. +# All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + +locals { + adw_download_wallet = { for key, value in var.adw_params : key => value if value.create_local_wallet == true } +} + +resource "oci_database_autonomous_database_wallet" "autonomous_database_wallet" { + for_each = var.adw_params + autonomous_database_id = oci_database_autonomous_database.adw[each.key].id + password = each.value.database_wallet_password + base64_encode_content = "true" +} + +resource "local_file" "autonomous_data_warehouse_wallet_file" { + for_each = local.adw_download_wallet + content_base64 = oci_database_autonomous_database_wallet.autonomous_database_wallet[each.key].content + filename = "${path.cwd}/wallet_${each.value.db_name}.zip" +} + +resource "oci_database_autonomous_database" "adw" { + for_each = var.adw_params + admin_password = each.value.database_admin_password + compartment_id = each.value.compartment_id + compute_model = each.value.compute_model + compute_count = each.value.compute_count + data_storage_size_in_tbs = each.value.size_in_tbs + db_name = each.value.db_name + display_name = each.value.db_name + db_workload = each.value.db_workload + db_version = each.value.db_version + license_model = each.value.license_model + is_mtls_connection_required = each.value.is_mtls_connection_required + subnet_id = each.value.subnet_id + nsg_ids = each.value.nsg_ids + defined_tags = each.value.defined_tags + is_auto_scaling_enabled = each.value.enable_auto_scaling + is_free_tier = each.value.is_free_tier + data_safe_status = each.value.data_safe_status + operations_insights_status = each.value.operations_insights_status + database_management_status = each.value.database_management_status +} diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/outputs.tf b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/outputs.tf new file mode 100644 index 0000000..05a8498 --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/outputs.tf @@ -0,0 +1,64 @@ +# Copyright © 2023, Oracle and/or its affiliates. +# All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + +output "atp_db_id" { + value = { + for adw in oci_database_autonomous_database.adw: + adw.display_name => adw.id + } +} + +output "ad" { + value = { + for idx, ad in oci_database_autonomous_database.adw: + ad.db_name => { "connection_strings" : ad.connection_strings.0.all_connection_strings} + } +} + +output "db_connection" { + value = one([ for b in oci_database_autonomous_database.adw : b.connection_strings]) +} + +output "private_endpoint_ip" { + value = one([for b in oci_database_autonomous_database.adw : b.private_endpoint_ip]) +} + +output "private_endpoint" { + value = ([for b in oci_database_autonomous_database.adw : b.private_endpoint]) +} + +output "url" { + value = [for b in oci_database_autonomous_database.adw : b.connection_urls.0.sql_dev_web_url] +} + +output "graph_studio_url" { + value = [for b in oci_database_autonomous_database.adw : b.connection_urls.0.graph_studio_url] +} + +output "machine_learning_user_management_url" { + value = [for b in oci_database_autonomous_database.adw : b.connection_urls.0.machine_learning_user_management_url] +} + +output "adb_wallet_content" { +value = oci_database_autonomous_database_wallet.autonomous_database_wallet["adw"].content +} + +output "database_fully_qualified_name" { + value = lower(trimsuffix(trimprefix(join("\n", [for b in oci_database_autonomous_database.adw : b.connection_urls.0.graph_studio_url]), "https://"), "/graphstudio/")) +} + +output "adw" { + value = { + for adw in oci_database_autonomous_database.adw: + adw.display_name => adw.id + } +} + +output "apex_url" { + value = [for b in oci_database_autonomous_database.adw : b.connection_urls.0.apex_url] +} + +output "select_ai_demo_url" { + value = join("", [lower(trimsuffix(join("\n", [for b in oci_database_autonomous_database.adw : b.connection_urls.0.graph_studio_url]), "/graphstudio/")),"/ords/r/moviestream/chatdb"]) +} + diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/variables.tf b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/variables.tf new file mode 100644 index 0000000..e134afa --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/modules/cloud-foundation-library/database/adb/variables.tf @@ -0,0 +1,27 @@ +# Copyright © 2023, Oracle and/or its affiliates. +# All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + +variable "adw_params" { + type = map(object({ + compartment_id = string + compute_model = string + compute_count = number + size_in_tbs = number + db_name = string + db_workload = string + db_version = string + license_model = string + database_admin_password = string + database_wallet_password = string + enable_auto_scaling = bool + is_free_tier = bool + create_local_wallet = bool + is_mtls_connection_required = bool + subnet_id = string + data_safe_status = string + operations_insights_status = string + database_management_status = string + nsg_ids = list(string) + defined_tags = map(string) + })) +} diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/outputs.tf b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/outputs.tf new file mode 100644 index 0000000..0e76925 --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/outputs.tf @@ -0,0 +1,52 @@ +# Copyright © 2023, Oracle and/or its affiliates. +# All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + +# Autonomous Database Outputs: + +output "adb_admin_password" { + description = "ADB Admin password" + value = var.db_password + sensitive = true +} + +output "adb_user_name" { + description = "Workshop user name" + value = "MOVIESTREAM" +} + +output "adb_user_password" { + description = "Workshop user initial password" + value = "watchS0meMovies#" +} + +output "ADW_Database_db_connection" { + value = module.adb.db_connection +} + +output "database_fully_qualified_name" { + value = module.adb.database_fully_qualified_name +} + +output "ADW_Database_ip" { + value = module.adb.private_endpoint_ip +} + +output "Database_Actions" { + value = module.adb.url +} + +output "graph_studio_url" { + value = module.adb.graph_studio_url +} + +output "machine_learning_user_management_url" { + value = module.adb.machine_learning_user_management_url +} + +output "apex_url" { + value = module.adb.apex_url +} + +output "select_ai_demo_url" { + value = module.adb.select_ai_demo_url +} diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/provider.tf b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/provider.tf new file mode 100644 index 0000000..3daf300 --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/provider.tf @@ -0,0 +1,31 @@ +# Copyright © 2023, Oracle and/or its affiliates. +# All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + +terraform { + required_version = ">= 1.2.0" + required_providers { + oci = { + source = "oracle/oci" + version = ">= 5.9.0" + } + } +} + +provider "oci" { + tenancy_ocid = var.tenancy_ocid + user_ocid = var.user_ocid + fingerprint = var.fingerprint + private_key_path = var.private_key_path + region = var.region + disable_auto_retries = false +} + +provider "oci" { + alias = "homeregion" + tenancy_ocid = var.tenancy_ocid + user_ocid = var.user_ocid + fingerprint = var.fingerprint + private_key_path = var.private_key_path + region = data.oci_identity_region_subscriptions.home_region_subscriptions.region_subscriptions[0].region_name + disable_auto_retries = false +} \ No newline at end of file diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/provisioners.tf b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/provisioners.tf new file mode 100644 index 0000000..00cfdcf --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/provisioners.tf @@ -0,0 +1,35 @@ +# Copyright © 2023, Oracle and/or its affiliates. +# All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + +resource "null_resource" "sqlcl-create-usr" { + + provisioner "local-exec" { + command = <<-EOT + + echo 'Download the apex application' + chmod 777 ./scripts/ + wget https://objectstorage.us-ashburn-1.oraclecloud.com/p/JnW5Gl5btrPK_vx66MqWktIB_GKmdEkosRDcehPvc5hTGheJdD41pq2PmsBbdUUU/n/c4u04/b/building_blocks_utilities/o/select-ai-apex-demo/f101.sql -P ./scripts/ + + # install the data + + sql -cloudconfig wallet_${var.db_name}.zip admin/${var.db_password}@'${local.conn_db}' @./scripts/init.sql + + echo 'Start running install-apex-workspace.sql script' + sql -cloudconfig wallet_${var.db_name}.zip admin/${var.db_password}@'${local.conn_db}' @./scripts/install-apex-workspace.sql + + echo 'Start running tables.sql script to install data sets' + sql -cloudconfig wallet_${var.db_name}.zip moviestream/watchS0meMovies#@'${local.conn_db}' @./tables.sql + + echo 'Start running install-apex-app.sql script to install the apex app' + sql -cloudconfig wallet_${var.db_name}.zip moviestream/watchS0meMovies#@'${local.conn_db}' @./scripts/install-apex-app.sql + + rm -rf tables.sql + EOT + } +depends_on = [module.adb] +} + +resource "local_file" "this" { + content = templatefile("./scripts/tables.sql.tmpl", { tag = var.tag, run_post_load_procedures = var.run_post_load_procedures, llm_secret = var.llm_secret }) + filename = "./tables.sql" +} \ No newline at end of file diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/schema.yaml b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/schema.yaml new file mode 100644 index 0000000..2ec90cf --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/schema.yaml @@ -0,0 +1,300 @@ +# Copyright © 2023, Oracle and/or its affiliates. +# All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + +title: "Deploy ChatDB - Autonomous Database Select AI demonstration" +stackDescription: "Creates an ADB with MovieStream data plus the ChatDB APEX demo app" +schemaVersion: 1.1.0 +version: "20230112" +locale: "en" +groupings: + - title: "General Settings" + visible: true + variables: + - tenancy_ocid + - region + - compartment_id + - display_name_prefix + - title: "Autonomous Database Configuration" + variables: + - db_name + - db_is_free_tier + - db_license_model + - db_password + - db_version + - db_size_in_tbs + - db_enable_auto_scaling + - db_compute_model + - db_compute_count + - db_workload + - db_data_safe_status + - db_operations_insights_status + - db_database_management_status + - title: "Workshop Settings" + variables: + - llm_secret + - tag + - run_post_load_procedures + - title: "Hidden Variables" + visible: false + variables: + - user_ocid + - fingerprint + - private_key_path +# General Configuration Variables +variables: + tenancy_ocid: + title: Tenancy ID + description: The Oracle Cloud Identifier (OCID) for your tenancy. + type: string + required: true + visible: false + region: + title: Region + description: Select Region where all resources will be created. + type: oci:identity:region:name + required: true + visible: true + compartment_id: + title: Compartment + description: Choose the compartment where all resources will be provisioned. + type: oci:identity:compartment:id + required: true + visible: true + display_name_prefix: + title: Display Name Prefix + type: string + default: "Oracle MovieStream" + description: Enter the Display name for the solution. + required: true + visible: true +# Autonomous Database Configuration Variables + db_name: + title: Database Name + description: "Provide Database name. Constraints: 12 alphanumeric characters only. No Spaces." + required: true + type: string + maxLength: 30 + db_is_free_tier: + title: Do do want a always Free Oracle Autonomous Database instance? + description: "Provision Always Free Oracle Autonomous Database instance (20 GB Storage)?" + type: enum + enum: + - "true" + - "false" + default: "false" + required: true + visible: true + db_license_model: + title: "Provision Paid Oracle Autonomous Database instance (4 ECPUs 1 TB Storage) - License Included or BYOL?" + description: "Note: This configuration can be changed later from the OCI console." + type: enum + enum: + - LICENSE_INCLUDED + - BRING_YOUR_OWN_LICENSE + default: LICENSE_INCLUDED + required: true + visible: + eq: + - db_is_free_tier + - false + db_password: + title: Database Admin Password + description: "Provide admin password. Constraints: 12 - 30 characters. At least one uppercase letter, one lowercase letter, and one number. No special characters." + type: password + required: true + confirmation: true + pattern: ((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*[%!@^&)(]).{12,20}) + db_version: + title: "A valid Oracle Database version for Autonomous Database" + description: "A valid Oracle Database version for Autonomous Database" + type: enum + enum: + - "19c" + default: "19c" + required: true + visible: true + db_size_in_tbs: + title: "The quantity of data in the database, in terabytes." + description: "The quantity of data in the database, in terabytes." + type: enum + enum: + - 1 + - 2 + - 4 + - 6 + - 8 + - 10 + - 12 + - 16 + - 24 + - 36 + - 52 + - 128 + default: 1 + required: true + visible: + eq: + - db_is_free_tier + - false + db_enable_auto_scaling: + title: Indicates if auto scaling is enabled for the Autonomous Database CPU core count. + description: "Indicates if auto scaling is enabled for the Autonomous Database CPU core count. " + type: enum + enum: + - true + - false + default: false + required: true + visible: + eq: + - db_is_free_tier + - false + db_compute_model: + title: "The compute model of the Autonomous Database ECPUs" + description: "The compute model of the Autonomous Database ECPUs" + type: enum + enum: + - "ECPU" + default: "ECPU" + required: true + visible: + eq: + - db_is_free_tier + - false + db_compute_count: + title: The number of ECPUs cores to be made available to the database + description: "The number of ECPU cores to enable. For ECPUs count needs to be minimum 2 and maximum 512 ECPUs" + type: string + default: 4 + required: true + visible: + eq: + - db_is_free_tier + - false + db_workload: + title: Autonomous Database Type of workload. + description: "Autonomous Database Type of workload." + type: enum + enum: + - "DW" + default: "DW" + required: true + visible: false + db_data_safe_status: + title: "Status of the Data Safe registration for this Autonomous Database" + description: "Status of the Data Safe registration for this Autonomous Database. Could be REGISTERED or NOT_REGISTERED." + type: enum + enum: + - "NOT_REGISTERED" + - "REGISTERED" + default: "NOT_REGISTERED" + required: true + visible: true + db_database_management_status: + title: "Status of Database Management for this Autonomous Database" + description: "Status of Database Management for this Autonomous Database. Values supported are ENABLED and NOT_ENABLED" + type: enum + enum: + - "NOT_ENABLED" + - "ENABLED" + default: "NOT_ENABLED" + required: true + visible: true + db_operations_insights_status: + title: "Status of Operations Insights for this Autonomous Database" + description: "Status of Operations Insights for this Autonomous Database. Values supported are ENABLED and NOT_ENABLED" + type: enum + enum: + - "NOT_ENABLED" + - "ENABLED" + default: "NOT_ENABLED" + required: true + visible: true +# Workshop Settings + llm_secret: + title: Secret API key used to connect to AI model + description: "Enter your secret API key" + type: string + default: null + required: true + visible: true + tag: + title: Pick the datasets to load. + description: "Pick one from below" + type: enum + enum: + - "gen-ai" + default: "gen-ai" + required: true + visible: true + run_post_load_procedures: + title: Run procedures after loading data + description: "Pick one from below" + type: enum + enum: + - true + - false + default: true + required: true + visible: true +outputs: + ADW_Database_db_connection: + type: string + title: ADW_Database_db_connection + visible: true + ADW_Database_private_endpoint_ip: + type: string + title: ADW_Database_private_endpoint_ip + visible: true + Database_Actions: + type: link + title: url + visible: true + database_fully_qualified_name: + type: string + title: database_fully_qualified_name + visible: true + graph_studio_url: + type: link + title: graph_studio_url + visible: false + machine_learning_user_management_url: + type: link + title: machine_learning_user_management_url + visible: true + apex_url: + type: link + title: apex_url + visible: true + select_ai_demo_url: + type: link + title: select_ai_demo_url + visible: true + adb_admin_password: + type: string + title: adb_admin_password + visible: false + adb_user_name: + type: string + title: adb_user_name + visible: true + adb_user_password: + type: string + title: adb_user_password + visible: true +outputGroups: + - title: Database details + outputs: + - ADW_Database_db_connection + - ADW_Database_private_endpoint_ip + - database_fully_qualified_name + - title: ADB user details + outputs: + - Database_Actions + - apex_url + - graph_studio_url + - machine_learning_user_management_url + - adb_user_name + - adb_user_password +primaryOutputButton: graph_studio_url + diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/init.sql b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/init.sql new file mode 100644 index 0000000..a7488f7 --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/init.sql @@ -0,0 +1,44 @@ +-- **Copyright © 2023, Oracle and/or its affiliates. +-- **All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + + +-- **To install the database objects required for the demo. Connect to ADB as ADMIN:** + +declare + l_uri varchar2(500) := 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/c4u04/b/building_blocks_utilities/o/setup/workshop-setup.sql'; +begin + dbms_cloud_repo.install_sql( + content => to_clob(dbms_cloud.get_object(object_uri => l_uri)) + ); +end; +/ + +-- Add the MOVIESTREAM user +begin + workshop.write('Begin demo install'); + workshop.write('add user MOVIESTREAM', 1); + workshop.add_adb_user('MOVIESTREAM','watchS0meMovies#'); + + ords_admin.enable_schema ( + p_enabled => TRUE, + p_schema => 'MOVIESTREAM', + p_url_mapping_type => 'BASE_PATH', + p_auto_rest_auth => TRUE + ); + +end; +/ + +-- Open up access to openai for moviestream user +BEGIN + DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE ( + host => 'api.openai.com', + lower_port => 443, + upper_port => 443, + ace => xs$ace_type( + privilege_list => xs$name_list('http'), + principal_name => 'MOVIESTREAM', + principal_type => xs_acl.ptype_db)); +END; +/ + diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/install-apex-app.sql b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/install-apex-app.sql new file mode 100644 index 0000000..dd11b6d --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/install-apex-app.sql @@ -0,0 +1,57 @@ +-- as moviestream +BEGIN + admin.workshop.write('setup for app install as moviestream', 2); + + -- Set the name of the workspace in which the app needs to be installed + apex_application_install.set_workspace('MOVIESTREAM'); + + -- Setting the application id to 101 + apex_application_install.set_application_id(101); + apex_application_install.generate_offset(); + + -- Setting the Schema + apex_application_install.set_schema('MOVIESTREAM'); + + -- Setting application alias + apex_application_install.set_application_alias('CHATDB'); + + -- Set Auto Install Supporting Objects + apex_application_install.set_auto_install_sup_obj( p_auto_install_sup_obj => true ); + +END; +/ + +@./scripts/f101.sql + +-- Setup Select AI +begin + admin.workshop.write('Setup ai profile', 2); + + dbms_cloud_ai.drop_profile( + profile_name => 'openai_gpt35', + force => true + ); + + dbms_cloud_ai.create_profile( + profile_name => 'openai_gpt35', + attributes => + '{"provider": "openai", + "credential_name": "OPENAI_CRED", + "comments":"true", + "temperature":0.2, + "object_list": [ + {"owner": "MOVIESTREAM", "name": "GENRE"}, + {"owner": "MOVIESTREAM", "name": "CUSTOMER"}, + {"owner": "MOVIESTREAM", "name": "PIZZA_SHOP"}, + {"owner": "MOVIESTREAM", "name": "STREAMS"}, + {"owner": "MOVIESTREAM", "name": "MOVIES"}, + {"owner": "MOVIESTREAM", "name": "ACTORS"} + ] + }' + ); + + dbms_cloud_ai.set_profile( + profile_name => 'openai_gpt35' + ); +end; +/ \ No newline at end of file diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/install-apex-workspace.sql b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/install-apex-workspace.sql new file mode 100644 index 0000000..b1d2b87 --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/install-apex-workspace.sql @@ -0,0 +1,31 @@ +-- download the app using wget: +-- wget https://martygubar.github.io/adb/shared/adb-speaks-human/apex-setup/f101.sql + +-- as admin +DECLARE + l_workspace_name VARCHAR2(100) := 'MOVIESTREAM'; + l_schema_name VARCHAR2(100) := 'MOVIESTREAM'; + l_workspace_usr_pwd VARCHAR2(100) := 'watchS0meMovies#'; +begin + admin.workshop.write('install Ask-Oracle', 1); + admin.workshop.write('add workspace as admin', 2); + apex_instance_admin.add_workspace( + p_workspace_id => null, + p_workspace => l_workspace_name, + p_primary_schema => l_schema_name); + + -- We must set the APEX workspace security group ID in our session before we can call create_user + apex_util.set_security_group_id( apex_util.find_security_group_id( p_workspace => l_workspace_name)); + apex_util.create_user( + p_user_name => 'MOVIESTREAM', + p_email_address => 'admin@o.com', + p_default_schema => l_schema_name, + p_allow_access_to_schemas => l_schema_name, + p_web_password => l_workspace_usr_pwd, + p_change_password_on_first_use => 'N', + p_developer_privs => 'ADMIN:CREATE:DATA_LOADER:EDIT:HELP:MONITOR:SQL' ); -- workspace administrator + + + commit; +end; +/ \ No newline at end of file diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/tables.sql.tmpl b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/tables.sql.tmpl new file mode 100644 index 0000000..1fd6983 --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/scripts/tables.sql.tmpl @@ -0,0 +1,22 @@ +-- **Copyright © 2023, Oracle and/or its affiliates. +-- **All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + + -- Tables will be installed in the current schema + -- Connect as the MOVIESTREAM user + + begin + workshop.add_dataset + ( + tag => '${tag}', + run_post_load_procedures => ${run_post_load_procedures} + ); + + DBMS_CLOUD.CREATE_CREDENTIAL ( + credential_name => 'OPENAI_CRED', + username => 'OPENAI', + password => '${llm_secret}' + ); + + end; + / + diff --git a/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/variables.tf b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/variables.tf new file mode 100644 index 0000000..17521cd --- /dev/null +++ b/cloud-foundation/solutions/Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration/variables.tf @@ -0,0 +1,124 @@ +# Copyright © 2023, Oracle and/or its affiliates. +# All rights reserved. Licensed under the Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl. + + +terraform { + required_version = ">= 0.15.0" +} + +variable "tenancy_ocid" { + type = string + default = "" +} + +variable "region" { + type = string + # default = "" +} + +variable "compartment_id" { + type = string + # default = "" +} + +variable "user_ocid" { + type = string + default = "" +} + +variable "fingerprint" { + type = string + default = "" +} + +variable "private_key_path" { + type = string + default = "" +} + +# ADW Database Variables: + +variable "db_name" { + type = string + default = "MovieStreamWorkshop" +} + +variable "db_password" { + type = string + default = "" +} + +variable "db_compute_model" { + type = string + default = "ECPU" +} + +variable "db_compute_count" { + type = number + default = 4 +} + +variable "db_size_in_tbs" { + type = number + default = 1 +} + +variable "db_workload" { + type = string + default = "DW" +} + +variable "db_version" { + type = string + default = "19c" +} + +variable "db_enable_auto_scaling" { + type = bool + default = false +} + +variable "db_is_free_tier" { + type = bool + default = false +} + +variable "db_license_model" { + type = string + default = "LICENSE_INCLUDED" +} + +variable "db_data_safe_status" { + type = string + default = "NOT_REGISTERED" + # default = "REGISTERED" +} + +variable "db_operations_insights_status" { + type = string + default = "NOT_ENABLED" + # default = "ENABLED" +} + +variable "db_database_management_status" { + type = string + default = "NOT_ENABLED" + # default = "ENABLED" +} + +# Workshop Settings + +variable "llm_secret" { + type = string + default = "null" +} + +variable "tag" { + type = string + default = "gen-ai" +} + +variable "run_post_load_procedures" { + type = bool + default = true +} \ No newline at end of file diff --git a/cloud-foundation/solutions/README.md b/cloud-foundation/solutions/README.md index 3a9f608..47265aa 100644 --- a/cloud-foundation/solutions/README.md +++ b/cloud-foundation/solutions/README.md @@ -26,4 +26,5 @@ For the moment we have implemented the following solutions: - Sam-Workbench - Deploy-Exadata-Database-Service-with-cross-region-Data-Guard - Deploy-Exadata-Database-Service-with-in-region-Data-Guard +- Deploy-ChatDB-Autonomous-Database-Select-AI-demonstration