From 10131df8d24b2ffe7d518ffde096a060e64f37d2 Mon Sep 17 00:00:00 2001 From: Michael Williams Date: Thu, 5 Sep 2019 15:01:04 -0600 Subject: [PATCH] Fixed a few minor typos and some paragraph formatting here and there. Pretty minor stuff --- 0-Setup.md | 5 +-- 1-Labs.md | 14 +++--- 3-First-Function.md | 26 +++++------ 4-Java-Functions.md | 2 +- 6-Container-as-Function.md | 8 ++-- 7-Functions-Clients-oci-curl.md | 12 +++--- 8-Functions-Clients-SDK.md | 8 ++-- 9-Functions-Invoke-OCI-Events.md | 74 ++++++++++++++++---------------- README.md | 4 +- 9 files changed, 75 insertions(+), 78 deletions(-) diff --git a/0-Setup.md b/0-Setup.md index 2af4504..e1a77f3 100644 --- a/0-Setup.md +++ b/0-Setup.md @@ -51,7 +51,7 @@ Phoenix region console. ## Configuring your Environment Now that your user account is accessible, let's log into the provided VM where -you'll be ready to start no configuration. +you'll be ready to start your configuration. To access your cloud-based development environment you'll need a VNC client on your laptop. You can use whatever you have previously installed or you can @@ -95,7 +95,7 @@ CURRENT NAME PROVIDER API URL REGI * workshop oracle https://functions.us-phoenix-1.oraclecloud.com phx.ocir.io/cloudnative-devrel/workshop-NNN ``` -Now to make sure you can be authenticated correctly and communicate with +Now to make sure you can be authenticated correctly and communicate with Oracle Functions let's run a command to list all of the existing applications. It doesn't matter what the results--just that it runs successfully to confirm connectivity. @@ -134,4 +134,3 @@ Now that you're logged into your development machine and are able to communicate with Oracle Functions it's time to get started! NEXT: [*Function Labs*](1-Labs.md), UP: [*INDEX*](README.md) - diff --git a/1-Labs.md b/1-Labs.md index beac3a6..54aaa4b 100644 --- a/1-Labs.md +++ b/1-Labs.md @@ -25,7 +25,7 @@ So let's [create and deploy your first function](3-First-Function.md). Fn provides an FDK (Function Development Kit) for each of the core supported programming languages. But the Java FDK is the most advanced with support for -Maven builds, automatic function argument type conversions, and comprehenive +Maven builds, automatic function argument type conversions, and comprehensive support for function testing with JUnit. The [Introduction to Java Functions](4-Java-Functions.md) lab covers all these @@ -42,19 +42,19 @@ introduces techniques you can use to track down the source of a failure. ## Automatically invoke Functions using OCI Events service -OCI Events service lets you monitor OCI resource changes and send -notifications and/or trigger a function automatically in response to that -change. We'll explore sending email notifications, and invoking a function via -the OCI Events when an image is uploaded to an OCI Object Storage bucket in +OCI Events service lets you monitor OCI resource changes and send +notifications and/or trigger a function automatically in response to that +change. We'll explore sending email notifications, and invoking a function via +the OCI Events when an image is uploaded to an OCI Object Storage bucket in [Automatically invoke Functions using OCI Events](9-Functions-Invoke-OCI-Events.md). ## Functions Clients Functions can be invoked over HTTP using their "invoke endpoint". You can -either invoke the endpoint directly or use the OCI SDK to both manage and +either invoke the endpoint directly or use the OCI SDK to both manage and invoke functions. We'll explore how to invoke a function using: * [OCI SDK for Functions](8-Functions-Clients-SDK.md) -* [`oci-curl` utility](7-Functions-Clients-oci-curl.md) +* [`oci-curl` utility](7-Functions-Clients-oci-curl.md) ## Containers as Functions diff --git a/3-First-Function.md b/3-First-Function.md index 14efef4..0b1468e 100644 --- a/3-First-Function.md +++ b/3-First-Function.md @@ -2,7 +2,7 @@ In this introductory lab we'll walk through developing a function using the JavaScript programming language and Node.js (without installing any Node.js -tools!) and deploying that function Oracle Functions. We'll also learn about +tools!) and deploying that function to Oracle Functions. We'll also learn about the core Fn concepts like applications and triggers. > As you make your way through this lab, look out for this icon. @@ -116,7 +116,7 @@ declares a number of properties including: There are other user-specifiable properties but these will suffice for this example. Note that if not specified, the name of your function will be taken -from the containing folder name. +from the containing folder name. ### Other Function Files @@ -162,9 +162,9 @@ process. ### Creating an Application Before you can deploy a function you'll need to create an application. You can -do this using the `fn` CLI or in the Oracle Functions web console. We'll use the -console as it's somewhat simpler to click on options than to copy/paste network -IDs for use on the command line. +do this using the `fn` CLI or in the Oracle Functions web console. We'll use +the console as it's somewhat simpler to click on options than to copy/paste +network IDs for use on the command line. Open your browser to the Oracle Functions console and login: @@ -179,8 +179,8 @@ login: ![Applications List](images/applications-compartment.png) -If you haven't selected the `us-phoenix-1` region you'll see the following error. To -correct simply choose the Phoenix region from the drop down menu. +If you haven't selected the `us-phoenix-1` region you'll see the following +error. To correct simply choose the Phoenix region from the drop down menu. ![Functions Unavailable](images/functions-unavailable.png) @@ -201,9 +201,9 @@ substitute in your number. ![Create Application](images/create-application.png) Functions deployed as part of this application will be attached to the -specifiied vcn and subnet. +specified VCN and subnet. -![user input](images/userinput.png) click "Create" to finish. +![user input](images/userinput.png) Click "Create" to finish. ### Building and Deploying your Function @@ -327,7 +327,7 @@ Dockerfile. Of course this is exactly what's happening! When you deploy a function like this the `fn` CLI is dynamically generating a Dockerfile for your function and building a container image. -> __NOTE__: two images are actually being used. The first contains the language +> __NOTE__: Two images are actually being used. The first contains the language > compiler and all the necessary build tools. The second image packages all > dependencies and any necessary language runtime components. Using this > strategy, the final function image size can be kept as small and secure as @@ -336,9 +336,9 @@ function and building a container image. > technique see [Multi-Stage Docker Builds for Creating Tiny Go > Images](https://medium.com/travis-on-docker/multi-stage-docker-builds-for-creating-tiny-go-images-e0e1867efe5a). -As the `fn` CLI is built on Docker you can use the `docker` command to see the local -container image you just generated. You may have a number of Docker images so -use the following command to see only versions of nodefn: +As the `fn` CLI is built on Docker you can use the `docker` command to see the +local container image you just generated. You may have a number of Docker images +so use the following command to see only versions of nodefn: ![user input](images/userinput.png) >```sh diff --git a/4-Java-Functions.md b/4-Java-Functions.md index 0890e26..e8fc93d 100644 --- a/4-Java-Functions.md +++ b/4-Java-Functions.md @@ -104,7 +104,7 @@ everything you need to deploy the function to Oracle Functions. Make sure your context is set to point to Oracle Functions. Use the `fn list context` command to check. If everything is fine then let's deploy the function to the app you created in the previous lab. It should be named `labapp-NNN` -where `NNN` is your lap participant number. +where `NNN` is your lab participant number. ![user input](images/userinput.png) >`fn --v deploy --app labapp-NNN ` diff --git a/6-Container-as-Function.md b/6-Container-as-Function.md index 43ec0f2..928317a 100644 --- a/6-Container-as-Function.md +++ b/6-Container-as-Function.md @@ -35,7 +35,7 @@ have to install the native library in addition to adding the Node module to our ![](images/userinput.png) > In an **empty folder** create a file named `func.js` and copy/paste the following as its content: - + ```javascript const fdk = require('@fnproject/fdk'); const fs = require('fs'); @@ -104,7 +104,7 @@ image processing. ## Function Metadata -Now that we have a Node.js function and it's dependencies captured in the +Now that we have a Node.js function and it's dependencies captured in the `package.json` we need a `func.yaml` to capture the function metadata. ![](images/userinput.png) @@ -156,7 +156,7 @@ It's a two stage build with the `fnproject/node:dev` image containing `npm` and other build tools, and the `fnproject/node` image containing just the Node runtime. This approach is designed to ensure that deployable function container images are as small as possible--which is beneficial for a number of reasons -including the time it takes to transfer the image from a Docker respository to +including the time it takes to transfer the image from a Docker repository to the compute node where the function is to be run. ## Custom Node.js Function Dockerfile @@ -262,7 +262,7 @@ With the function deployed let's invoke it to make sure it's working as expected. You'll need a jpeg or png file so either find one on your machine or download one. If you've cloned this lab's Git repo you can use the `3x3.jpg` image that has a height and width of 3 pixels, or you can download -it from the `images` folder in github. +it from the `images` folder in GitHub. ![](images/userinput.png) >``` diff --git a/7-Functions-Clients-oci-curl.md b/7-Functions-Clients-oci-curl.md index a272eb9..522db1b 100644 --- a/7-Functions-Clients-oci-curl.md +++ b/7-Functions-Clients-oci-curl.md @@ -67,10 +67,10 @@ which will return a JSON object similar to the following: } ``` -If you look closely you can see there's an `fnproject.io/fn/invokeEndpoint` +If you look closely you can see there's an `fnproject.io/fn/invokeEndpoint` property buried in the JSON. You could copy/paste from here but there's a somewhat more convenient way to just get the invoke endpoint. You just add -`--endpoint` to your ispect command: +`--endpoint` to your inspect command: ![user input](images/userinput.png) >``` @@ -122,13 +122,13 @@ of your function endpoint, but using those from our example we'd have: You'll be prompted for the passphrase for your private key, which is **workshop**. ![](images/userinput.png) ->``` +>``` > Enter pass phrase for /home/demo/.oci/workshop_pri_key.pem .pem: workshop -> +> >``` -If all goes well you should see the output concatinating "Hello, " with the +If all goes well you should see the output concatenating "Hello, " with the contents of the payload.txt file. ```sh @@ -138,5 +138,5 @@ Hello, Functions You've successfully invoked a function using a signed HTTP request using curl! Next we'll look how we can call functions from client code using the OCI SDK. -NEXT: [*Container as Function*](6-Container-as-Function.md), +NEXT: [*Container as Function*](6-Container-as-Function.md), UP: [*Labs*](1-Labs.md), HOME: [*INDEX*](README.md) diff --git a/8-Functions-Clients-SDK.md b/8-Functions-Clients-SDK.md index 33f1bca..445dbd6 100644 --- a/8-Functions-Clients-SDK.md +++ b/8-Functions-Clients-SDK.md @@ -2,7 +2,7 @@ This lab walks you through how to invoke a function deployed to Oracle Functions using (a preview version of) the Oracle Cloud Infrastructure Java SDK. The OCI -Java SDK exposes two endpoints specificially for Oracle Functions: +Java SDK exposes two endpoints specifically for Oracle Functions: - `FunctionsManagementClient` - which provides APIs for function and application lifecycle management (e.g., CRUD operations) @@ -55,7 +55,7 @@ AuthenticationDetailsProvider authProvider = new ConfigFileAuthenticationDetails ``` The next two lines instantiate a `FunctionsInvokeClient` using the config file -auth provide and sets the Oracle Functions service endpoint for the region. +auth provider and sets the Oracle Functions service endpoint for the region. ```java try (FunctionsInvokeClient fnInvokeClient = new FunctionsInvokeClient(authProvider)) { @@ -108,7 +108,7 @@ an `InvokeFunctionResponse` in return. for your tenancy, compartment, user id, etc. So it's ready to go! There's only one profile defined, but you can have many profiles for use with different tenancies or compartments. - + Review your `~/.oci/config` file to become familiar with its contents and structure. In a terminal type: @@ -203,5 +203,5 @@ Functions to invoke a function. The OCI SDK provides support for the entire Functions API so you can both invoke and manage functions and applications. Please refer to the SDK docs for more details. -NEXT: [*Functions Clients-oci curl*](7-Functions-Clients-oci-curl.md), +NEXT: [*Functions Clients-oci curl*](7-Functions-Clients-oci-curl.md), UP: [*Labs*](1-Labs.md), HOME: [*INDEX*](README.md) diff --git a/9-Functions-Invoke-OCI-Events.md b/9-Functions-Invoke-OCI-Events.md index 437e24e..d0c5ce9 100644 --- a/9-Functions-Invoke-OCI-Events.md +++ b/9-Functions-Invoke-OCI-Events.md @@ -16,7 +16,7 @@ Computing Foundation (CNCF) CloudEvents for seamless interoperability with the cloud native ecosystem. You can build event-driven, cloud native, serverless applications using Oracle Functions -and OCI Events. +and OCI Events. ![OCI Events Service](images/oci-events-service.jpg) @@ -101,11 +101,11 @@ the following values: >``` > Name: cloud-events-NNN -> +> > Select "Event Type" > Service Name: Object Storage > Event Type: Object Storage - Create Object -> +> > Add Condition and select "Attribute" > Attribute Name: bucketName > Attribute Value: object-upload-NNN @@ -206,7 +206,7 @@ function in response to the event. ## Create a function -Now, let us create a function to process the cloud event. +Now, let us create a function to process the cloud event. ![user input](images/userinput.png) Create a boilerplate Java function using the fn CLI: @@ -230,9 +230,9 @@ func.yaml created. Now we will add two dependencies to the pom.xml file. One for the cloudevents-api, and another for metadata-extractor so we can extract the image -metadata later on. +metadata later on. -![user input](images/userinput.png) +![user input](images/userinput.png) Edit the pom.xml file and add the following dependencies: ```xml @@ -248,7 +248,7 @@ Edit the pom.xml file and add the following dependencies: ``` -Next, lets implement a function to handle the incoming cloud event. Since OCI +Next, let's implement a function to handle the incoming cloud event. Since OCI Cloud Events conform to the CNCF Cloud Events specification, we can safely type our incoming parameter as a CloudEvent and the FDK will handle properly serializing the parameter when the function is triggered. Once we have our @@ -256,7 +256,7 @@ CloudEvent data we can construct a URL that points to our image (a public image in this case) and open that URL as a stream that can be passed to the metadata extractor. -![user input](images/userinput.png) +![user input](images/userinput.png) Replace the definition of HelloFunction with the following: ```java @@ -303,7 +303,7 @@ public class HelloFunction { Before we run an end-to-end test, let us write a simple test for our function. -**Note: This test assumes the image `sachin-in.jpg` has been uploaded to +**Note: This test assumes the image `sachin-in.jpg` has been uploaded to your `public` bucket `object-upload-NNN` in the above step** ![user input](images/userinput.png) @@ -340,16 +340,16 @@ Generate a string representation of the Object Created cloud event JSON using a JSON-to-string conversion tool like https://tools.knowledgewalls.com/jsontostring -**Note: In the string representation, look for `application\/json` and remove +**Note: In the string representation, look for `application\/json` and remove the backslash `\` so that it looks like `application/json`** - + ```json "{\"cloudEventsVersion\":\"0.1\",\"eventID\":\"aa00367d-8281-476a-b918-0e821f1e2f6d\",\"eventType\":\"com.oraclecloud.objectstorage.createobject\",\"source\":\"objectstorage\",\"eventTypeVersion\":\"1.0\",\"eventTime\":\"2019-08-25T14:01:46Z\",\"schemaURL\":null,\"contentType\":\"application/json\",\"extensions\":{\"compartmentId\":\"ocid1.compartment.oc1..aaaa...\"},\"data\":{\"compartmentId\":\"ocid1.compartment.oc1..aaaa...\",\"compartmentName\":\"your-compartment-name\",\"resourceName\":\"sachin-in.jpg\",\"resourceId\":\"\",\"availabilityDomain\":null,\"freeFormTags\":{},\"definedTags\":{},\"additionalDetails\":{\"eTag\":\"65efdaae-9464-45e8-b564-4df86f11198a\",\"namespace\":\"your-tenancy-namepsace\",\"archivalState\":\"Available\",\"bucketName\":\"object-upload-NNN\",\"bucketId\":\"ocid1.bucket.oc1.iad.aaa...\"}}}" ``` ![user input](images/userinput.png) -In HelloFunctionTest.java, replace the test event "your test image event +In HelloFunctionTest.java, replace the test event "your test image event JSON" with the generated string representation of the cloud event JSON: ```java @@ -376,7 +376,7 @@ You should see the following output: ```shell Deploying cloud-events-demo-fn to app: labapp-NNN Bumped to version 0.0.8 -Building image iad.ocir.io/tenant-namespace/workshop-NNN/cloud-events-demo-fn:0.0.8 +Building image iad.ocir.io/tenant-namespace/workshop-NNN/cloud-events-demo-fn:0.0.8 FN_REGISTRY: iad.ocir.io/tenant-namespace/workshop-NNN Current Context: workshop Sending build context to Docker daemon 16.9kB @@ -399,29 +399,29 @@ Step 6/11 : ADD src /function/src Step 7/11 : RUN ["mvn", "package"] ---> Running in 4d481e7bfa33 [INFO] Scanning for projects... -[INFO] +[INFO] [INFO] ------------------------< com.example.fn:hello >------------------------ [INFO] Building hello 1.0.0 [INFO] --------------------------------[ jar ]--------------------------------- -[INFO] +[INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /function/src/main/resources -[INFO] +[INFO] [INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ hello --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to /function/target/classes -[INFO] +[INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ hello --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /function/src/test/resources -[INFO] +[INFO] [INFO] --- maven-compiler-plugin:3.3:testCompile (default-testCompile) @ hello --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to /function/target/test-classes -[INFO] +[INFO] [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ hello --- -[INFO] +[INFO] [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- @@ -429,12 +429,12 @@ Step 7/11 : RUN ["mvn", "package"] imageUrl: https://objectstorage.us-phoenix-1.oraclecloud.com/n/tenant-namespace/b/object-upload-NNN/o/sachin-in.jpg {"directoryCount":6,"directories":[{"imageWidth":500,"imageHeight":324,"numberOfComponents":3,"name":"JPEG","tagCount":8,"errorCount":0,"tags":[{"description":"Baseline","tagName":"Compression Type","tagType":-3,"tagTypeHex":"0xfffffffd","directoryName":"JPEG"},{"description":"8 bits","tagName":"Data Precision","tagType":0,"tagTypeHex":"0x0000","directoryName":"JPEG"},{"description":"324 pixels","tagName":"Image Height","tagType":1,"tagTypeHex":"0x0001","directoryName":"JPEG"},{"description":"500 pixels","tagName":"Image Width","tagType":3,"tagTypeHex":"0x0003","directoryName":"JPEG"},{"description":"3","tagName":"Number of Components","tagType":5,"tagTypeHex":"0x0005","directoryName":"JPEG"},{"description":"Y component: Quantization table 0, Sampling factors 1 horiz/1 vert","tagName":"Component 1","tagType":6,"tagTypeHex":"0x0006","directoryName":"JPEG"},{"description":"Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert","tagName":"Component 2","tagType":7,"tagTypeHex":"0x0007","directoryName":"JPEG"},{"description":"Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert","tagName":"Component 3","tagType":8,"tagTypeHex":"0x0008","directoryName":"JPEG"}],"errors":[],"empty":false,"parent":null},{"version":258,"resUnits":0,"resY":100,"resX":100,"imageWidth":100,"imageHeight":100,"name":"JFIF","tagCount":6,"errorCount":0,"tags":[{"description":"1.2","tagName":"Version","tagType":5,"tagTypeHex":"0x0005","directoryName":"JFIF"},{"description":"none","tagName":"Resolution Units","tagType":7,"tagTypeHex":"0x0007","directoryName":"JFIF"},{"description":"100 dots","tagName":"X Resolution","tagType":8,"tagTypeHex":"0x0008","directoryName":"JFIF"},{"description":"100 dots","tagName":"Y Resolution","tagType":10,"tagTypeHex":"0x000a","directoryName":"JFIF"},{"description":"0","tagName":"Thumbnail Width Pixels","tagType":12,"tagTypeHex":"0x000c","directoryName":"JFIF"},{"description":"0","tagName":"Thumbnail Height Pixels","tagType":13,"tagTypeHex":"0x000d","directoryName":"JFIF"}],"errors":[],"empty":false,"parent":null},{"name":"Ducky","tagCount":2,"errorCount":0,"tags":[{"description":"64","tagName":"Quality","tagType":1,"tagTypeHex":"0x0001","directoryName":"Ducky"},{"description":"Oct 1989: Portrait of Sachin Tendulkar of India in Lahore, Pakistan. \\ Mandatory Credit: Ben Radford/Allsport","tagName":"Comment","tagType":2,"tagTypeHex":"0x0002","directoryName":"Ducky"}],"errors":[],"empty":false,"parent":null},{"name":"Adobe JPEG","tagCount":4,"errorCount":0,"tags":[{"description":"25600","tagName":"DCT Encode Version","tagType":0,"tagTypeHex":"0x0000","directoryName":"Adobe JPEG"},{"description":"192","tagName":"Flags 0","tagType":1,"tagTypeHex":"0x0001","directoryName":"Adobe JPEG"},{"description":"0","tagName":"Flags 1","tagType":2,"tagTypeHex":"0x0002","directoryName":"Adobe JPEG"},{"description":"YCbCr","tagName":"Color Transform","tagType":3,"tagTypeHex":"0x0003","directoryName":"Adobe JPEG"}],"errors":[],"empty":false,"parent":null},{"numberOfTables":4,"typical":false,"optimized":true,"name":"Huffman","tagCount":1,"errorCount":0,"tags":[{"description":"4 Huffman tables","tagName":"Number of Tables","tagType":1,"tagTypeHex":"0x0001","directoryName":"Huffman"}],"errors":[],"empty":false,"parent":null},{"name":"File Type","tagCount":4,"errorCount":0,"tags":[{"description":"JPEG","tagName":"Detected File Type Name","tagType":1,"tagTypeHex":"0x0001","directoryName":"File Type"},{"description":"Joint Photographic Experts Group","tagName":"Detected File Type Long Name","tagType":2,"tagTypeHex":"0x0002","directoryName":"File Type"},{"description":"image/jpeg","tagName":"Detected MIME Type","tagType":3,"tagTypeHex":"0x0003","directoryName":"File Type"},{"description":"jpg","tagName":"Expected File Name Extension","tagType":4,"tagTypeHex":"0x0004","directoryName":"File Type"}],"errors":[],"empty":false,"parent":null}]} [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.969 s - in com.example.fn.HelloFunctionTest -[INFO] +[INFO] [INFO] Results: -[INFO] +[INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 -[INFO] -[INFO] +[INFO] +[INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ hello --- [INFO] Building jar: /function/target/hello-1.0.0.jar [INFO] ------------------------------------------------------------------------ @@ -461,29 +461,29 @@ Successfully tagged iad.ocir.io/tenant-namespace/workshop-NNN/cloud-events-demo- Parts: [iad.ocir.io tenant-namespace workshop-NNN cloud-events-demo-fn:0.0.8] Pushing iad.ocir.io/tenant-namespace/workshop-NNN/cloud-events-demo-fn:0.0.8 to docker registry...The push refers to repository [iad.ocir.io/tenant-namespace/workshop-NNN/cloud-events-demo-fn] -d910070a76f0: Pushed -41b8a6435811: Layer already exists -9f47f6e68a04: Layer already exists -815ce0cceeb3: Layer already exists -580508f3f933: Layer already exists -be4626a574d8: Layer already exists -15d57950dad3: Layer already exists -2bf534399aca: Layer already exists -1c95c77433e8: Layer already exists +d910070a76f0: Pushed +41b8a6435811: Layer already exists +9f47f6e68a04: Layer already exists +815ce0cceeb3: Layer already exists +580508f3f933: Layer already exists +be4626a574d8: Layer already exists +15d57950dad3: Layer already exists +2bf534399aca: Layer already exists +1c95c77433e8: Layer already exists 0.0.8: digest: sha256:ed7f354009fd2a990e3a03eabd6fd0a887c7cb24ef32aee600bfaed4518448f6 size: 2208 Updating function cloud-events-demo-fn using image iad.ocir.io/tenant-namespace/workshop-NNN/cloud-events-demo-fn:0.0.8... ``` Congratulations! You have successfully built, tested and deployed your function. -Before we run the end-to-end test, let us try and invoke the deployed function -manually. +Before we run the end-to-end test, let us try and invoke the deployed function +manually. ## Manually invoke your function We can manually invoke our function by passing the above cloud event string. -**Note: This test assumes the image `sachin-in.jpg` has been uploaded to +**Note: This test assumes the image `sachin-in.jpg` has been uploaded to your `public` bucket `object-upload-NNN` in the above step** ![user input](images/userinput.png) @@ -513,7 +513,7 @@ imageUrl: https://objectstorage.us-phoenix-1.oraclecloud.com/n/tenant-namespace/ ``` And we see that our function works as expected. Now let's use a cloud event rule -to trigger the function! +to trigger the function! ## Update the OCI Event rule action diff --git a/README.md b/README.md index 2c11ff4..fd76e8b 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ development experience is exactly the same so any experience you have with Fn will be 100% applicable. The key differences are that Oracle Functions is a managed service so there's no need to start and manage an Fn server (it's truly serverless!) and being a cloud service Oracle Functions is integrated with the -Oracle Cloud Infrastructure (OCI) Idenity and Acess Management (IAM), +Oracle Cloud Infrastructure (OCI) Identity and Access Management (IAM), Networking, Events and other services. ## Overview @@ -29,5 +29,3 @@ including: Step one is getting your environment setup. NEXT: [*Setup*](0-Setup.md) - -