diff --git a/oic-gen3/features-2024/native-actions/create-flow/create-flow.md b/oic-gen3/features-2024/native-actions/create-flow/create-flow.md new file mode 100644 index 0000000..ac77eaa --- /dev/null +++ b/oic-gen3/features-2024/native-actions/create-flow/create-flow.md @@ -0,0 +1,487 @@ +# Create an Integration Flow to Read Excel file and convert to CSV + +## Introduction + +This lab walks you through the steps to create an Integration flow as per the below Integration Architecture. + +This use case describes how to use Native Actions in Oracle Integration to connect with file server, object storage and serverless functions. + +1. Vendors drop Excel files into the system. +2. Oracle Integration orchestrates the logic as below: + - A scheduler triggers the Integration flow. + - File Server Native Action gets the file from the source. + - OCI Object Storage Native Action uploads the Excel file to Object Storage. + - OCI Function is converts the Excel format to CSV format and uploads the file to Object Storage bucket + - The transformed CSV is retrieved using Object Storage Native Action operations + - The data is staged in a Virtual File System (VFS). + - Records are parsed and inserted into the DB system (Optional) +3. OCI Serverless Functions are used to process the files: + - A function is triggered to perform operations on the files. + - The function interacts with Object Storage, reading from and writing to a bucket. + +4. The OIC File Server stores the Excel files for reference. +5. The parsed and processed data is ultimately stored in the ATP DB (Autonomous Transaction Processing Database). +6. User Groups have access to the processed files. + + +The following diagram shows the interaction between the systems involved in this use case. +![Usecase Architecture](images/native-actions-hla.png) + +The Final Integration Flow should look like below. +![Final Integration Flow](images/complete-integration-flow.png) + +Estimated Time: 60 minutes + +### Objectives + +In this lab, you will: + +* Use Object Storage Native Action +* Use File Server Native Action +* Use Functions Native Action + +### Prerequisites + +This lab assumes you have: + +* All previous labs completed. + +## Task 1: Pre-Requisites setup for Native Actions + +You will create a dynamic group and add policies to use functions and manage objects. + +1. Sign in to the OCI Console as a tenancy administrator. + +2. Obtain the client ID of the OAuth application for the Oracle Integration instance. In the upper right corner, select Profile, then click the identity domain. +![Select Profile](images/select-profile.png) + +3. In the left navigation pane, click *Oracle Cloud Services*. +![Select Oracle Cloud Services](images/select-oracle-cloud-services.png) + +4. Select the OIC service instance, and scroll down to **General Information** and copy the client ID value to use it in the dynamic group creation. + +5. In the OCI Console, Open the navigation menu and click *Identity & Security*, Select the domain (example: Default domain). +![Select Domain](images/default-domain.png) + +6. In the left navigation pane, click *Dynamic groups* + +7. Click *Create Dynamic Group*. + +8. Provide a name (example: ll-dynamic-group) and description. In the **Matching Rules** section, enter the below rules. The resource ID you specify mush match the client ID of the OAuth application of your Oracle Integration instance. Provide the functions compartment ocid in the below rule + + ``` + + resource.id = 'oic-instance-client-ID' + ALL {resource.type = 'fnfunc', resource.compartment.id = ''} + + ``` +TIP: Get the ocid of the functions compartment by navigating to Identity > Compartments > ll-native-actions. The first rule is required to group the OIC instance which matches the client id. The second rule groups the functions of a given compartment ocid. + +![Dynamic Group Rules](images/dynamic-group-rules.png) + +9. Open the navigation menu and click *Identity & Security*. Under Identity, click *Policies*. + +10. Select the Policy **ll-native-actions-policy** , and Click on **Edit policy statements**. In the Policy builder add the following statements. Modify the dynamic group name, group name and compartment name as per your configuration. + + ``` + + Allow dynamic-group ll-dynamic-group to use functions-family in compartment + Allow dynamic-group ll-dynamic-group to manage object-family in compartment + Allow dynamic-group ll-dynamic-group to inspect compartments in compartment + Allow group ll-group to manage objects in compartment + + ``` +![Native Action Policies](images/native-action-policies.png) + +## Task 2: Create Object Storage Buckets + +You will create two buckets namely, bucket-excel and bucket-csv. These buckets are used to upload the source file and processed files. + +1. In the OCI Console, Open the navigation menu and click *Storage > Buckets*. + +2. Select the Compartment **ll-native-actions** + +3. Click *Create Bucket* and provide a name (example: bucket-excel) and description. Click **Create** + +![Create Bucket](images/create-bucket-excel.png) + +4. Similarly, create another bucket and name it (example: bucket-csv) + + +## Task 3: Create Integration Flow + +Create a Project in OIC console which provides a single unified workspace for all stakeholders to design, manage, and monitor integrations. Additionally, projects provide robust life-cycle management. + +***Create Project*** + +1. Login into OIC Console + +2. In the left Navigation pane of OIC console, Click *Projects* and Click *Add*, then *Create* + +3. In the **Create Project** dialog, enter the following information and click on *Create*: + +| **Field** | **Value** | +| --- | ----------- | +| Name | OIC Native Actions | +| Identifier | Generated automatically | +| Description | This project is the workspace to create integrations to invoke OCI resources | +{: title="Create Project"} + +![Create Project](images/create-project.png) + +***Create Integration Flow*** + +1. In the *Integrations tile*, click *Add*, then *Create* + +2. On the *Create integration* dialog, select and click on **Schedule**. + +3. In the *Create integration* dialog, enter the following information: + + | **Element** | **Value** | + | --- | ----------- | + |Name | Use Native Actions | + |Description | Integration to invoke native actions and process excel files, which converts to csv format | + {: title="Create Integration Flow"} + + Accept all other default values. + + ![Create Integration](images/create-integration.png) + +***Assign Variables*** + +Create 3 variables ObjectstoreNamespace, ObjectstoreSource, ObjectstoreTarget + +1. Click *+* icon next to the **Schedule** activity and Select *Assign* action from the action palette and name it as **AssignBucketVariables** + + ![Select Assign Action](images/select-assign-action.png) + +2. Click on *+* icon and create a **String** data type. Provide the name as **ObjectstoreNamespace** and value **<your-object-storage-namespace>** + + ![Create Assign Variable](images/select-assign-action.png) + + +**TIP**: To view your Object Storage namespace string, do the following: + +Select the Profile menu (Profile menu icon), which is on the upper-right side of the navigation bar at the top of the page, and then click Tenancy: . Your namespace string is listed under Object Storage Settings. + +3. Similarly, Create 2 more variables per below + + | **Variable Name** | **Value** | + | --- | ----------- | + | ObjectstoreSource | 'bucket-excel' | + | ObjectstoreTarget | 'bucket-csv' | + {: title="Assign OS Variables"} + + ![List of Assign Variables](images/list-of-os-variables.png) + +***List Files in object storage bucket (bucket-excel)*** + +1. Click *+* icon next to the **AssignBucketVariables** activity and Select *File Server* action from the action palette. + +2. In the **Configure FS Native Action** provide per below values. + + | **Property** | **Value** | + | --- | ----------- | + | What do you want to call your endpoint? | listFSFiles | + | Select Resource | Directory | + | Select Operation | List Directory | + | Input Directory | < directory path configured in File Server for your user > | + | File Name Pattern | *.xlsx | + {: title="Configure FS Native Action "} + + ![Configure FS Native Action Step 1](images/config-fs-native-action-step1.png) + + Click *Continue* and **Finish** the wizard. **Save** your integration. + +***Add for-each action*** + +1. Click *+* icon next to the **listFSFiles** action and Select *For Each* action from the action palette. + +2. In the **Configure For Each** pane provide array reference in the for-each **Repeating element**. In the Source variable, Expand variable $listFSFiles > ListDirectoryResponse > Directory Definitions > fileList >. + + Drag and drop the **file** element to the **Repeating Element** box, and provide the name **Current element name** as *currentFile* per below. + + ![For Each Configuration](images/for-each-config.png) + + **Save** your integration. + +***Get Excel File*** + +1. In the For Each scope click on *+* icon and add a **File Server** Native Action + +2. In the **Configure FS Native Action** provide per below values. + + | **Property** | **Value** | + | --- | ----------- | + | What do you want to call your endpoint? | getExcelFile | + | Select Resource | File | + | Select Operation | Get File Reference | + | Input Directory | < directory path configured in File Server for your user > | + | File Name | sample.xlsx | + {: title="Configure FS Native Action "} + + ![Configure FS Native Action Step 1](images/get-fs-excel-file-config.png) + + Click *Continue* and **Finish** the wizard. **Save** your integration. + +3. *Edit* the **getExcelFile** map activity and perform the mapping per below. + + In the **Sources** pane expand the variable: currentFile > File. + + In the **Target** pane expand the variable: getExcelFile Request > QueryParameters. + + | **Source** | **Target** | + | --- | ----------- | + | Directory | Directory | + | File Name| File Name | + {: title="Map Get Excel File Properties "} + + ![Get Excel File Mapping](images/get-fs-excel-file-config.png) + + Click *Validate*. Click **<** icon to Navigate back to the Integration Flow + +***Transfer Excel File from File Server to Object Storage Bucket*** + +1. **Add** a *OCI Object Storage* action after the **getExcelFile** activity. + +2. In the **Configure Object Storage** provide per below values. + + | **Property** | **Value** | + | --- | ----------- | + | What do you want to call your endpoint? | MoveFSExcelToOS | + | Select the resource type you want to manage | Manage Objects | + | Select Operation | Upload Object | + | Select Compartment | < Compartment you have created in the previous lab example: ll-native-actions > | + | Select Bucket | bucket-excel | + {: title="Configure OS Native Action "} + + ![Configure FS Native Action Step 1](images/config-os-native-action-step1.png) + + Click *Continue* and **Finish** the wizard. **Save** your integration. + +3. *Edit* the **Map to MoveFSExcelToOS** map activity and perform the mapping per below. + + In the **Sources** pane expand the variable: getExcelFile Response > Get File Reference Response > File Definitions.. > + + In the **Target** pane expand the variable: MoveFSExcelToOS Request. + + | **Source** | **Target** | + | --- | ----------- | + | File Reference | Query Parameters > Stream Reference | + | File Name| Template Parameters > Object Name | + {: title="Map Get Excel File Properties "} + + Click *Validate*. Click **<** icon to Navigate back to the Integration Flow. + + ![Integration Flow Milestone After Object Storage](images/integration-flow-after-os-action.png) + +***Invoke OCI Function to transform excel file to csv*** + +1. **Add** a *OCI Function* action after the **MoveFSExcelToOS** activity. + +2. In the **Configure OCI Function Call** page provide per below values. + + | **Property** | **Value** | + | --- | ----------- | + | What do you want to call your endpoint? | invokeOCIFunction | + | Region | < select-your-function-region >| + | Compartment | Upload Object | + | Select Compartment | < select-your-function-compartment example: ll-native-actions > | + | Application | < select-your-function-application example: oicnativeaction > | + | Fucntion | < select-your-function-deployed example: convert2CSV > | + {: title="Configure Function Native Action "} + + ![Configure Function Native Action Step 1](images/config-fn-native-action-step1.png) + + Click *Continue*. + +3. In the **Configure Request** Page select *Payload Type* as **JSON Sample**, and provide the below request payload. In the JSON payload include your object storage namespace. + + ``` + + { + "file_name": "SourceFile.xlsx", + "source_bucket": "bucket-excel", + "target_bucket": "bucket-csv", + "namespace": "" + } + + ``` + + Click *Continue* + +4. In the **Configure Response** Page select *Payload Type* as **JSON Sample**, and provide the below provide request payload. + + ``` + + { + "fileconversion": "SUCCESS", + "target_bucket": "bucket_csv", + "target_filename": "SourceAPFile.csv" + } + + ``` + + Click *Continue* and **Finish** the wizard, Save your integration flow. + +5. *Edit* the **Map to invokeOCIFunction** map activity and perform the mapping per below. + + In the **Target** pane expand the variable: invokeOCIFunction Request > Request Wrapper. + + | **Source** | **Target** | + | --- | ----------- | + | $currentFile > File > Filename | File Name | + | $ObjectstoreSource | Source Bucket | + | $ObjectstoreTarget | Target Bucket | + | $ObjectstoreNamespace| Namespace | + {: title="Map Invoke OCI Fn Properties "} + + Click *Validate*. Click **<** icon to Navigate back to the Integration Flow. + + ![Mapping Invoke OCI Function](images/map-invoke-function.png) + +***Get Transformed CSV File*** + +1. **Add** a *OCI Object Storage* action after the **invokeOCIFunction** activity. + +2. In the **Configure Object Storage** provide per below values. + + | **Property** | **Value** | + | --- | ----------- | + | What do you want to call your endpoint? | getCSV | + | Select the resource type you want to manage | Manage Objects | + | Select Operation | Download Object | + | Select Compartment | < Compartment you have created in the previous lab example: ll-native-actions > | + | Select Bucket | bucket-csv | + {: title="Configure OS Native Action Get CSV"} + + Click *Continue* and **Finish** the wizard. **Save** your integration. + +3. *Edit* the **Map to getCSV** map activity and perform the mapping per below. + + In the **Sources** pane expand the variable: invokeOCIFunction Response > Invoke Response > Response Wrapper + + In the **Target** pane expand the variable: getCSV Request > Template Parameters + + | **Source** | **Target** | + | --- | ----------- | + | Target File Name | Object Name | + {: title="Map Get CSV Properties "} + + Click *Validate*. Click **<** icon to Navigate back to the Integration Flow. + + ![Mapping Get CSV](images/map-getcsv.png) + +***Add Stage Action*** + +1. **Add** a *Stage File* action after the **getCSV** activity. + +2. In the **Configure Stage File Action** provide the name **ReadCSVFile** and Click on *Continue* + +3. In the **Configure Operation Page** configure properties per below + + | **Property** | **Value** | + | --- | ----------- | + | Choose Stage File Operation | Read Entire File | + | Configure File Reference | Yes | + | Specify File Reference | Switch to Developer View and map the $getCSV > Get_ObjectResponse > StreamReference element | + {: title="Configure OS Native Action Get CSV"} + + ![Configure Stage File Reference](images/stage-file-config-reference.png) + + Click *Continue* + +4. In the **Configure Schema Options** page, Select the file structure as **CSV**. Click *Continue* + +5. In the **Configure Format Definition** page, Configure the properties per below and rest as defaults. + + | **Property** | **Value** | + | --- | ----------- | + | Drag and Drop Schema File | Select **Sample-10.csv** file from lab artifacts downloaded in the previous labs. | + | Enter the Record Name | CustomerRecord | + | Enter the Recordset Name | CustomerBatch | + | Select the Field Delimiter | Comma (,) | + | First Row as Column Header | Yes | + {: title="Read CSV Stage File Format Definition Properties"} + + ![Configure Stage File Format Options](images/stage-file-format-options.png) + + Click *Continue* and **Finish** the wizard. **Save** your integration. + +***Add logger Action*** + +1. **Add** a *logger* action after the **ReadCSVFile** activity. + +2. In the **Configure Logger** page, drag and drop **$ReadCSVFile > ReadResponse** element to the **logger message** text box. This will print the entire csv data in activity stream. + + ![Configure Log Message](images/config-log-message.png) + +***Define Business Identifiers & Activate the Integration Flow*** + +1. Manage business identifiers that enable you to track fields in messages during runtime. + +2. Click on the *(I) Business Identifiers* menu on the top right. + ![Open Business Identifiers For Tracking](images/open-business-identifiers-dialog.png) + +3. From the **Source** section, expand *Schedule* > *start Time* fields to the right side section tracking\_var\_1 + +4. Click on the *(I) Business Identifiers* menu on the top right and Click *Save* and Click on *<* *(Go back)* button. + +## Task 4: Activate the Integration. + +1. In the Project **Design** View, Select three dots (...) which is next to the Integration Flow. From the list of Actions select *Activate*. You can create a deployment and activate. Alternatively, you can activate individual integration as well. + + ![Activate Individual Integration](images/activate-integration.png) + +2. In the **Activate Integration** page select *Tracing Level* as *Debug*, and Click on *Activate* + +## Task 5: Test & Monitor the Integration. + +1. Upload the .xlsx file (available in the lab artifacts) to the directory configured in the Integration Flow File Server Action. + +2. In the Project **Design** View, Select three dots (...) which is next to the Integration Flow. From the list of Actions select *Run*. + +3. In the **Configure & Run** page, Select *Request Type* as **Ad hoc Request**. Click on *Run* + +4. An Instance of the integration is created. Select *Instance Id*. In the Instance Monitoring page, Activity Stream section expand the *For Each* action - Iteration 1 + + ![Monitoring Activity Stream](images/monitoring-activity-stream.png) + +5. Click on the *Eye* icon next to the Logger Action in the activity stream. You should the parsed csv data. + +## Task 6: Bonus Section + +Extend the use case to delete the csv file uploaded in the Object Storage + +1. Orchestrate Object Storage native action in the existing Integration flow + +2. Use the delete object operation + +3. In the map activity refer the object name to delete the file from the bucket-csv. + +## Task 7: Congratulations 🎉 + +🎉 Congratulations on completing the Workshop! 🎉 + +You've successfully navigated through the creation and testing of a powerful integration flow using Oracle Integration (OIC) and Oracle Cloud Infrastructure (OCI) services. By automating the transfer, conversion, and processing of Excel files, you’ve harnessed the full potential of OIC's native actions and OCI’s serverless functions to build a seamless, efficient, and scalable data integration solution. + +Key Takeaways: + +- You’ve learned how to list and transfer files from an FTP server using OIC’s native actions. +- You’ve successfully invoked an OCI function to convert Excel files to CSV, showcasing the power of serverless computing. +- You’ve mastered the art of reading, staging, and processing data files within OIC, paving the way for real-time analytics and business insights. + +## Learn More + +* [Getting Started with Oracle Integration 3](https://docs.oracle.com/en/cloud/paas/application-integration/index.html) + +* [About Projects](https://docs.oracle.com/en/cloud/paas/application-integration/integrations-user/integration-projects.html) + +* [Activate Integration](https://docs.oracle.com/en/cloud/paas/application-integration/integrations-user/activate-and-deactivate-integrations.html) + +* [Monitor Integration](https://docs.oracle.com/en/cloud/paas/application-integration/integrations-user/track-integration-instances.html#GUID-46A7C0A0-CBE4-4F1B-9B45-62A5AFA89D74) + +## Acknowledgements + +* **Author** - Kishore Katta, Director Product Management, Oracle Integration & OPA +* **Last Updated By/Date** - Kishore Katta, August 2024 diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/activate-integration.png b/oic-gen3/features-2024/native-actions/create-flow/images/activate-integration.png new file mode 100644 index 0000000..144e4d7 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/activate-integration.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/complete-integration-flow.png b/oic-gen3/features-2024/native-actions/create-flow/images/complete-integration-flow.png new file mode 100644 index 0000000..be01be2 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/complete-integration-flow.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/config-fn-native-action-step1.png b/oic-gen3/features-2024/native-actions/create-flow/images/config-fn-native-action-step1.png new file mode 100644 index 0000000..d47ae43 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/config-fn-native-action-step1.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/config-fs-native-action-step1.png b/oic-gen3/features-2024/native-actions/create-flow/images/config-fs-native-action-step1.png new file mode 100644 index 0000000..408fd78 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/config-fs-native-action-step1.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/config-log-message.png b/oic-gen3/features-2024/native-actions/create-flow/images/config-log-message.png new file mode 100644 index 0000000..7ee99b1 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/config-log-message.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/config-os-native-action-step1.png b/oic-gen3/features-2024/native-actions/create-flow/images/config-os-native-action-step1.png new file mode 100644 index 0000000..8675e75 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/config-os-native-action-step1.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/create-bucket-excel.png b/oic-gen3/features-2024/native-actions/create-flow/images/create-bucket-excel.png new file mode 100644 index 0000000..a7e986f Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/create-bucket-excel.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/create-integration.png b/oic-gen3/features-2024/native-actions/create-flow/images/create-integration.png new file mode 100644 index 0000000..a34eed3 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/create-integration.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/create-project.png b/oic-gen3/features-2024/native-actions/create-flow/images/create-project.png new file mode 100644 index 0000000..2171d09 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/create-project.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/default-domain.png b/oic-gen3/features-2024/native-actions/create-flow/images/default-domain.png new file mode 100644 index 0000000..20e1dd3 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/default-domain.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/dynamic-group-rules.png b/oic-gen3/features-2024/native-actions/create-flow/images/dynamic-group-rules.png new file mode 100644 index 0000000..416ab2a Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/dynamic-group-rules.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/for-each-config.png b/oic-gen3/features-2024/native-actions/create-flow/images/for-each-config.png new file mode 100644 index 0000000..e3c95b5 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/for-each-config.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/get-fs-excel-file-config.png b/oic-gen3/features-2024/native-actions/create-flow/images/get-fs-excel-file-config.png new file mode 100644 index 0000000..6064197 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/get-fs-excel-file-config.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/instance-monitoring-page.png b/oic-gen3/features-2024/native-actions/create-flow/images/instance-monitoring-page.png new file mode 100644 index 0000000..0fcc619 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/instance-monitoring-page.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/integration-flow-after-os-action.png b/oic-gen3/features-2024/native-actions/create-flow/images/integration-flow-after-os-action.png new file mode 100644 index 0000000..5925e57 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/integration-flow-after-os-action.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/list-of-os-variables.png b/oic-gen3/features-2024/native-actions/create-flow/images/list-of-os-variables.png new file mode 100644 index 0000000..5a94b60 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/list-of-os-variables.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/map-get-excel-file.png b/oic-gen3/features-2024/native-actions/create-flow/images/map-get-excel-file.png new file mode 100644 index 0000000..6b31c8c Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/map-get-excel-file.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/map-getcsv.png b/oic-gen3/features-2024/native-actions/create-flow/images/map-getcsv.png new file mode 100644 index 0000000..aa3e8c4 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/map-getcsv.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/map-invoke-function.png b/oic-gen3/features-2024/native-actions/create-flow/images/map-invoke-function.png new file mode 100644 index 0000000..8c36713 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/map-invoke-function.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/monitoring-activity-stream.png b/oic-gen3/features-2024/native-actions/create-flow/images/monitoring-activity-stream.png new file mode 100644 index 0000000..c13e8b3 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/monitoring-activity-stream.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/native-action-policies.png b/oic-gen3/features-2024/native-actions/create-flow/images/native-action-policies.png new file mode 100644 index 0000000..4d0f323 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/native-action-policies.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/native-actions-hla.png b/oic-gen3/features-2024/native-actions/create-flow/images/native-actions-hla.png new file mode 100644 index 0000000..6c26b3f Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/native-actions-hla.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/open-business-identifiers-dialog.png b/oic-gen3/features-2024/native-actions/create-flow/images/open-business-identifiers-dialog.png new file mode 100644 index 0000000..2694e92 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/open-business-identifiers-dialog.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/select-assign-action.png b/oic-gen3/features-2024/native-actions/create-flow/images/select-assign-action.png new file mode 100644 index 0000000..f8aaa2a Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/select-assign-action.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/select-oracle-cloud-services.png b/oic-gen3/features-2024/native-actions/create-flow/images/select-oracle-cloud-services.png new file mode 100644 index 0000000..d1c1d83 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/select-oracle-cloud-services.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/select-profile.png b/oic-gen3/features-2024/native-actions/create-flow/images/select-profile.png new file mode 100644 index 0000000..adb6e9a Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/select-profile.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/stage-file-config-reference.png b/oic-gen3/features-2024/native-actions/create-flow/images/stage-file-config-reference.png new file mode 100644 index 0000000..b55f1b3 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/stage-file-config-reference.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/stage-file-format-options.png b/oic-gen3/features-2024/native-actions/create-flow/images/stage-file-format-options.png new file mode 100644 index 0000000..0232a0b Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/stage-file-format-options.png differ diff --git a/oic-gen3/features-2024/native-actions/create-flow/images/variable-osnamespace.png b/oic-gen3/features-2024/native-actions/create-flow/images/variable-osnamespace.png new file mode 100644 index 0000000..697d3a7 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-flow/images/variable-osnamespace.png differ diff --git a/oic-gen3/features-2024/native-actions/create-function/create-function.md b/oic-gen3/features-2024/native-actions/create-function/create-function.md new file mode 100644 index 0000000..678b24f --- /dev/null +++ b/oic-gen3/features-2024/native-actions/create-function/create-function.md @@ -0,0 +1,203 @@ +# Setup + +## Introduction + +This lab walks you through the pre requisite setup required to create a function application and deploy the function. + +Oracle Functions is a fully managed, highly scalable, on-demand, Functions-as-a-Service platform, built on enterprise-grade Oracle Cloud Infrastructure and powered by the Fn Project open source engine. Use Oracle Functions (sometimes abbreviated to just Functions) when you want to focus on writing code to meet business needs. You don't have to worry about the underlying infrastructure because Oracle Functions will ensure your app is highly-available, scalable, secure, and monitored. With Oracle Functions, you can deploy your code, call it directly or trigger it from OIC, and get billed only for the resources consumed during the function execution. + + +Estimated Time: 45 minutes + +### Objectives +In this lab, you will: +- Setup Function prerequisites +- Create a function application +- Modify the boilerplate code generated function application using Python. +- Deploy the function + +### Prerequisites +This lab assumes you have: +- Completed all the previous labs + +## Task 1: Create a function application + +1. Sign in to the OCI Console as a functions developer. + +2. Open the navigation menu, click *Developer Services*. Under **Functions**, click *Applications* + +3. Select the region you're using with OCI Functions. + +4. Select the same compartment (example: ll-native-actions) you have used to provision OIC instance in the previous lab. We will create the Function application in the same compartment. + +5. Click *Create Application* + +6. Specify: + - **oicnativeaction** as the name for the new application. You'll deploy your first function in this application, and specify this application when deploying/invoking the function. + - The VCN and subnet in which to run the function. Select the **public subnet** in the VCN **ll-native-actions-vcn** , and a **private subnet** in the same VCN. + - Leave the shape with defaults + +![Create Function Application](images/create-function-app.png) + +7. Click **Create** + +## Task 2: Set up your Cloud Shell dev environment + +We will use OCI Cloud Shell environment to develop and deploy our function + +1. Click the **oicnativeaction** function application you just created to display the application details page. + +2. Click the *Getting Started* link, and then click *Cloud Shell Setup*. Duplicate a browser window to copy paste few commands in cloud shell as we follow through the next steps. + +![Get Started Page](images/function-app-cloudshell-select.png) + +**Tip:** The Getting Started page now displays commands tailored specifically for you. You copy and paste these commands to configure your Cloud Shell environment for functions development. + +![Functions All Commands Page](images/functions-all-commands-page.png) + +3. Click *Launch Cloud Shell* to display the Cloud Shell terminal window. Make sure the Network is selected as public in the green banner. + +## Task 3: Set up Fn Project CLI context + +Copy and paste commands from the Getting Started page into the Cloud Shell terminal window to configure your environment, as follows: + +1. Find the name of the pre-created Fn Project context for the current region in which you created the application: + + ``` + + fn list context + + ``` + At least two Fn Project contexts are returned, a default context and a context for the current region (for example, named us-phoenix-1). + +2. Set the Fn Project context to use the region context. where is the context for the current region. For example: + + ``` + + fn use context + + ``` + +3. Configure the Fn Project context with the OCID of the current compartment that will own deployed functions: + + ``` + + fn update context oracle.compartment-id + + ``` + + The current context should be updated. + +4. Configure the Fn Project context with the Oracle Cloud Infrastructure Registry address in the current region and tenancy that you want to use with OCI Functions. Provide a unique repository name suffix (for example: oic-native-actions-repo) to distinguish your function images + + ``` + + fn update context registry .ocir.io// + + ``` + where for example: is a prefix of your choosing for the Oracle Cloud Infrastructure Registry repository in which to store images for the function + +5. Configure the Fn Project context with the OCID of the compartment for repositories to and from which you want OCI Functions to push and pull function images, by entering: + + ``` + + fn update context oracle.image-compartment-id + + ``` + If you do not specify a value for oracle.image-compartment-id, OCI Functions pushes and pulls images to and from repositories in the root compartment. + +## Task 4: Generate Auth token + +In continuation to the above the next step is to generate auth token to login into registry + +1. Click *Generate an Auth Token* to display the Auth Tokens page, and click **Generate Token**. + +2. Enter a meaningful description for the auth token in the Generate Token dialog, and click *Generate Token*. The new auth token is displayed (for example, 6aN...6MqX). + +3. Copy the auth token immediately to a secure location from where you can retrieve it later, because you won't see the auth token again in the Console. + +4. Close the **Generate Token** dialog. + +## Task 5: Log in to Registry + +In continuation to the previous task the next step is to login to docker registry with the auth token generated. This step confirms that you have access and ready to register and deploy the function code. + +1. Copy the following command. Modify the command as per your tenancy namespace, username and region key. + + ``` + + docker login -u '/' .ocir.io + + ``` + +2. When prompted for a password, enter the Oracle Cloud Infrastructure auth token that you created and copied earlier. + You should see login succeeded message. You're now ready to start creating, deploying, and invoking functions. + +3. Execute the below to confirm function apps are listed + + ``` + + fn list apps + + ``` + + You should see function apps in the respective compartment displayed + +## Task 6: Create and Deploy your function + +In this section we will initialize function workspace which generates a boilerplate code in python. We will create our excel to csv function code in python. We will make some modifications as per the code in the artifact provided. [Download](https://objectstorage.us-phoenix-1.oraclecloud.com/p/SrKYt_S-_e5uWp_jo44A1sGMQwYnybC86-ZaQzHUbyKw5oRRKBG-wdN3sZHQHEFG/n/oicpm/b/oiclivelabs/o/oic3/oic-native-actions/native-actions.zip) lab artifacts to your desktop and unzip the file. + +1. In the **Cloud Shell** command line execute the below commands to create a directory and initialize the workspace. + + ``` + + mkdir functions + cd functions + fn init --runtime python convert2CSV + cd convert2CSV + ls + + ``` + You should see 3 files func.py, func.yaml, requirments.txt files created. + +2. From the developer tools at the top banner, open **Cloud Editor**. + +![Open Cloud Editor](images/open-cloud-shell.png) + +3. Select **func.py** file. On th eright hand side code editor sample boilerplate code is available. Replace the entire code with code snippet in the downloaded artifacts (func.py file) and save. + +4. Select the **requirements.txt** file. In the boilerplate code generated, replace the below snippet and save the code. + + ``` + + fdk>=0.1.36 + oci + pandas + openpyxl + xlrd + + ``` + +5. Enter the following single Fn Project command to build the function and its dependencies as a Docker image called **convert2CSV**, push the image to the specified Docker registry, and deploy the function to OCI Functions in the **oicnativeaction** application that you created earlier: + + ``` + + fn -v deploy --app oicnativeaction + + ``` +Note: The function image build might take a bit because of some pre req py libraries. +![Function Created](images/create-function-image-success.png) + +6. Confirm that the function has been deployed to OCI Functions by clicking Functions (under Resources on the details page for the **oicnativeaction** application) and noting that the **convert2CSV** function now appears. + +![List Function In The App](images/list-function-in-app.png) + +You may now **proceed to the next lab**. + +## Learn More + +* [Setup Your Tenancy with Functions Pre-Requisites](https://docs.oracle.com/en-us/iaas/Content/Functions/Tasks/functionsquickstartcloudshell.htm) + +## Acknowledgements +* **Author** - Kishore Katta, Director Product Management - Oracle Integration & OPA +* **Last Updated By/Date** - Kishore Katta - August 2024 diff --git a/oic-gen3/features-2024/native-actions/create-function/images/create-function-app.png b/oic-gen3/features-2024/native-actions/create-function/images/create-function-app.png new file mode 100644 index 0000000..76a2839 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-function/images/create-function-app.png differ diff --git a/oic-gen3/features-2024/native-actions/create-function/images/create-function-image-success.png b/oic-gen3/features-2024/native-actions/create-function/images/create-function-image-success.png new file mode 100644 index 0000000..50dd733 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-function/images/create-function-image-success.png differ diff --git a/oic-gen3/features-2024/native-actions/create-function/images/function-app-cloudshell-select.png b/oic-gen3/features-2024/native-actions/create-function/images/function-app-cloudshell-select.png new file mode 100644 index 0000000..5b71f71 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-function/images/function-app-cloudshell-select.png differ diff --git a/oic-gen3/features-2024/native-actions/create-function/images/function-app-step2.png b/oic-gen3/features-2024/native-actions/create-function/images/function-app-step2.png new file mode 100644 index 0000000..8a06125 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-function/images/function-app-step2.png differ diff --git a/oic-gen3/features-2024/native-actions/create-function/images/functions-all-commands-page.png b/oic-gen3/features-2024/native-actions/create-function/images/functions-all-commands-page.png new file mode 100644 index 0000000..193a932 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-function/images/functions-all-commands-page.png differ diff --git a/oic-gen3/features-2024/native-actions/create-function/images/list-function-in-app.png b/oic-gen3/features-2024/native-actions/create-function/images/list-function-in-app.png new file mode 100644 index 0000000..1582500 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-function/images/list-function-in-app.png differ diff --git a/oic-gen3/features-2024/native-actions/create-function/images/open-cloud-shell.png b/oic-gen3/features-2024/native-actions/create-function/images/open-cloud-shell.png new file mode 100644 index 0000000..f40e21d Binary files /dev/null and b/oic-gen3/features-2024/native-actions/create-function/images/open-cloud-shell.png differ diff --git a/oic-gen3/features-2024/native-actions/functions-setup/functions-setup.md b/oic-gen3/features-2024/native-actions/functions-setup/functions-setup.md new file mode 100644 index 0000000..778b8af --- /dev/null +++ b/oic-gen3/features-2024/native-actions/functions-setup/functions-setup.md @@ -0,0 +1,64 @@ +# Setup + +## Introduction + +This lab walks you through the pre requisite setup like creating VCN and policies required to access OCI resources to complete the workshop. + +Estimated Time: 45 minutes + +### Objectives +In this lab, you will: +- Create VCN and subnets +- Create policy for group and service to create serverless functions + +### Prerequisites +This lab assumes you have: +- Ensure that your cloud tenancy uses identity domains. Invoking Oracle Cloud Infrastructure functions from an integration does not work in cloud tenancies that are not enabled for identity domains. +- Completed all the previous labs +- Created a group and added the required User to the group. + + +## Task 1: Create VCN and subnets + +If a suitable VCN in which to create network resources doesn't exist already: + +1. Sign in to the OCI Console as a tenancy administrator. + +2. Open the navigation menu, click *Networking*, and then click *Virtual cloud networks*. + +3. Select the same compartment (example: ll-native-actions) you have used to provision OIC instance in the previous lab. We will create the OCI resources in the same compartment. + +3. Click *Start VCN Wizard* to create a new VCN. + +![Start VCN Wizard](images/start-vcn-wizard.png) + +4. In the Start VCN Wizard dialog box, select **VCN with Internet Connectivity** and click *Start VCN Wizard*. + +5. Enter a name for the new VCN (example: ll-native-actions-vcn), click *Next*, and then click *Create* to create the VCN along with the related network resources. + +![Start VCN Wizard Step 1](images/start-vcn-wizard-step1.png) + +6. VCN is created with the all the resources such as Subnets, Route Tables, CIDR blocks, Internet Gateway, Security Lists, NAT Gateways, Service Gateways along with DHCP options + +![Start VCN Wizard Resources List](images/start-vcn-wizard-step2.png) + +## Task 2: Create policy for group and service + +1. In the OCI Console, Open the navigation menu and click *Identity & Security*. Under Identity, click *Policies*. + +2. Click Create *Policy*, specify a name (example: ll-native-actions-policy) and description for the new policy, and select the tenancy's root compartment. + +3. Use the Policy Builder to create the policy. Select *Functions* from the list of Policy use cases, and base the policy on the policy template *Let users create, deploy, and manage functions and applications*. Select the **Identity Domain**, **Groups** , **Location** (example: ll-native-actions compartment) + +![Create Policy](images/create-policy.png) + + +You may now **proceed to the next lab**. + +## Learn More + +* [Setup Your Tenancy with Functions Pre-Requisites](https://docs.oracle.com/en-us/iaas/Content/Functions/Tasks/functionsquickstartcloudshell.htm) + +## Acknowledgements +* **Author** - Kishore Katta, Director Product Management - Oracle Integration & OPA +* **Last Updated By/Date** - Kishore Katta - August 2024 diff --git a/oic-gen3/features-2024/native-actions/functions-setup/images/create-policy.png b/oic-gen3/features-2024/native-actions/functions-setup/images/create-policy.png new file mode 100644 index 0000000..79f7561 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/functions-setup/images/create-policy.png differ diff --git a/oic-gen3/features-2024/native-actions/functions-setup/images/start-vcn-wizard-step1.png b/oic-gen3/features-2024/native-actions/functions-setup/images/start-vcn-wizard-step1.png new file mode 100644 index 0000000..1634b5e Binary files /dev/null and b/oic-gen3/features-2024/native-actions/functions-setup/images/start-vcn-wizard-step1.png differ diff --git a/oic-gen3/features-2024/native-actions/functions-setup/images/start-vcn-wizard-step2.png b/oic-gen3/features-2024/native-actions/functions-setup/images/start-vcn-wizard-step2.png new file mode 100644 index 0000000..fa7617b Binary files /dev/null and b/oic-gen3/features-2024/native-actions/functions-setup/images/start-vcn-wizard-step2.png differ diff --git a/oic-gen3/features-2024/native-actions/functions-setup/images/start-vcn-wizard.png b/oic-gen3/features-2024/native-actions/functions-setup/images/start-vcn-wizard.png new file mode 100644 index 0000000..0a2b143 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/functions-setup/images/start-vcn-wizard.png differ diff --git a/oic-gen3/features-2024/native-actions/introduction/images/native-actions-hla.png b/oic-gen3/features-2024/native-actions/introduction/images/native-actions-hla.png new file mode 100644 index 0000000..6c26b3f Binary files /dev/null and b/oic-gen3/features-2024/native-actions/introduction/images/native-actions-hla.png differ diff --git a/oic-gen3/features-2024/native-actions/introduction/images/uc-highlevel-workflow.png b/oic-gen3/features-2024/native-actions/introduction/images/uc-highlevel-workflow.png new file mode 100644 index 0000000..d861197 Binary files /dev/null and b/oic-gen3/features-2024/native-actions/introduction/images/uc-highlevel-workflow.png differ diff --git a/oic-gen3/features-2024/native-actions/introduction/introduction.md b/oic-gen3/features-2024/native-actions/introduction/introduction.md new file mode 100644 index 0000000..e80b971 --- /dev/null +++ b/oic-gen3/features-2024/native-actions/introduction/introduction.md @@ -0,0 +1,84 @@ +# Introduction + +In today's fast-paced business environment, the ability to efficiently manage and process data is crucial for maintaining a competitive edge. For many organizations, including global retailers like GlobeShoppe Inc., data is generated and stored in various formats across different systems. To streamline operations and enable real-time decision-making, these organizations must integrate and process this data seamlessly. + +This workshop will guide you through an end-to-end integration flow using Oracle Integration (OIC) to automate the transfer, conversion, and processing of Excel files stored on a File server. By leveraging native actions in OIC to invoke Oracle Cloud Infrastructure (OCI) services, you can create a robust and scalable solution for your data integration needs. + +**Business Scenario:** + +Imagine GlobeShoppe Inc., a global retail company with regional offices that maintain daily records of inventory, sales, and shipments in Excel files. These files are stored on a centralized File server, making manual processing time-consuming and error-prone. To overcome these challenges, GlobeShoppe Inc. aims to automate the entire process, from transferring files to converting and processing them for real-time analytics and reporting. + +In this workshop, we will implement a seamless and automated integration flow using Oracle Integration Cloud (OIC) to transfer, convert, and process Excel files stored on an FTP server. Below is a detailed description of the functional flow for the integration steps: + +**Listing Files on the File Server:** + - The process begins with a scheduled orchestration in OIC that triggers at specified intervals. + - Using OIC’s native file server action, the orchestration lists all the Excel files available on the embedded File server. + +**Processing Files in Iteration:** + - For each file listed, OIC uses the file server native action to obtain a file reference. + - The file is then pushed to an OCI Object Storage bucket (named bucket-excel) using OIC’s native Object Storage action. This temporary storage serves as a staging area for the file conversion process. + +**Invoking the Excel-to-CSV Conversion Function:** + - Once the Excel file is stored in a bucket ex: bucket-excel, OIC invokes a serverless function hosted in Oracle Cloud Infrastructure (OCI). + - The function is responsible for converting the Excel file to CSV format. It processes both .xlsx and .xls files. + - After conversion, the function pushes the resulting CSV file to a target Object Storage bucket (named bucket-csv). + +**Reading and Staging the CSV File in OIC:** + - The final step involves OIC picking up the newly generated CSV file from bucket-csv. + - The CSV file is read and staged in OIC using the stage file action, preparing it for further data processing and integration tasks, such as updating a database or generating reports. + +## About this Workshop + +This hands-on workshop is designed to equip you with the knowledge and skills to automate data workflows by integrating Oracle Integration (OIC) with Oracle Cloud Infrastructure (OCI) services. + +In this workshop, you will learn how to: + +1. Transfer Excel Files from an FTP Server to OCI Object Storage +2. Convert Excel Files to CSV Using an OCI Serverless Function +3. Process CSV Files in OIC + +Note: Inserting records into database is out of the scope of this workshop. However, feel free to play around with the transformed data and push it to the downstream systems. + + +Here is the high level architecture reference of the workshop +![Usecase Architecture](images/native-actions-hla.png) + +Estimated Time: 3 hours + +### Objectives + +Here are some high-level objectives for the workshop on Oracle Integration using native actions: + +1. Understand OIC Native Actions + - Gain insights into the capabilities of OIC native actions and how they can be used to integrate with OCI services effectively +2. Automate File Transfer + - Learn how to configure OIC to list and download Excel files from a File server and upload them to OCI Object Storage +3. Implement Serverless Functions + - Deploy and use an OCI serverless function to convert Excel files to CSV format. +4. Process CSV Files in OIC + - Discover functions, how to pick up, stage, and finally process CSV files within OIC +5. Hands-on activities and exercises + - Provide hands-on exercises to practice usage of native actions to invoke file server, object storage and serverless functions. + +By the end of this workshop, you will have a comprehensive understanding of how to leverage OIC's native actions to invoke OCI services, creating a seamless and automated integration design. + +**High level workflow of the Workshop** + +![Usecase Workflow](images/uc-highlevel-workflow.png) + +### Prerequisites + +This lab assumes you have the following: +* Oracle Cloud Account with credits to provision services. +* Access to Oracle Cloud Infrastructure (OCI) with permissions to create and manage serverless functions and Object Storage buckets. + +You may now **proceed to the next lab**. + +## Learn More + +* [Oracle Integration 3 Documentation](https://docs.oracle.com/en/cloud/paas/application-integration/index.html) +* [Oracle Integration 3 Native Actions](https://docs.oracle.com/en/cloud/paas/application-integration/integrations-user/add-actions-app-driven-orchestration-integration.html#GUID-63CCAB23-A32C-4655-9490-191A011E9EEA) + +## Acknowledgements +* **Author** - Kishore Katta, Oracle Integration Product Management +* **Last Updated By/Date** - Kishore Katta, August 2024 diff --git a/oic-gen3/features-2024/native-actions/workshops/tenancy/index.html b/oic-gen3/features-2024/native-actions/workshops/tenancy/index.html new file mode 100644 index 0000000..e0c1f86 --- /dev/null +++ b/oic-gen3/features-2024/native-actions/workshops/tenancy/index.html @@ -0,0 +1,62 @@ + + + + + + + + + Oracle LiveLabs + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + + + + diff --git a/oic-gen3/features-2024/native-actions/workshops/tenancy/manifest.json b/oic-gen3/features-2024/native-actions/workshops/tenancy/manifest.json new file mode 100644 index 0000000..a01a79b --- /dev/null +++ b/oic-gen3/features-2024/native-actions/workshops/tenancy/manifest.json @@ -0,0 +1,45 @@ +{ + "workshoptitle": "Oracle Integration 3 - Using OIC Native Actions to Harness OCI Services", + "help": "livelabs-help-oic_us@oracle.com", + "tutorials": [ + { + "title": "Introduction", + "description":"Introduction", + "filename": "../../introduction/introduction.md" + }, + { + "title": "Get Started", + "description": "This is the prerequisites for customers using Free Trial and Paid tenancies, and Always Free accounts (if applicable). The title of the lab and the Contents Menu title (the title above) match for Prerequisite lab. This lab is always first.", + "filename": "https://oracle-livelabs.github.io/common//labs/cloud-login/cloud-login.md" + }, + { + "title": "Lab 1: Provision Oracle Integration 3", + "filename": "../../../../common/provision-oic/provision.md" + }, + { + "title": "Lab 2: Enable File Server", + "filename": "../../../../common/enable-file-server/enable-file-server.md" + }, + { + "title": "Lab 3: File Server Setup", + "filename": "../../../../common/setup/setup.md" + }, + { + "title": "Lab 4: Serverless Functions Prerequisite Setup", + "filename": "../../functions-setup/functions-setup.md" + }, + { + "title": "Lab 5: Create a Function Application", + "filename": "../../create-function/create-function.md" + }, + { + "title": "Lab 6: Create an Integration flow", + "filename": "../../create-flow/create-flow.md" + }, + { + "title": "Need Help?", + "description": "Solutions to Common Problems and Directions for Receiving Live Help", + "filename":"https://oracle-livelabs.github.io/common//labs/need-help/need-help-freetier.md" + } + ] +}