diff --git a/docs/fg/umn/ALL_META.TXT.json b/docs/fg/umn/ALL_META.TXT.json new file mode 100644 index 00000000..2a52a308 --- /dev/null +++ b/docs/fg/umn/ALL_META.TXT.json @@ -0,0 +1,2881 @@ +[ + { + "dockw":"User Guide" + }, + { + "uri":"en-us_topic_0000001540362886.html", + "node_id":"en-us_topic_0000001540362886.xml", + "product_code":"", + "code":"1", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"", + "kw":"Service Overview", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Service Overview", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0100_0.html", + "node_id":"functiongraph_01_0100_0.xml", + "product_code":"functiongraph", + "code":"2", + "des":"FunctionGraph hosts and computes event-driven functions in a serverless context while ensuring high availability, high scalability, and zero maintenance. All you need to ", + "doc_type":"usermanual", + "kw":"What Is FunctionGraph?,Service Overview,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"What Is FunctionGraph?", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0200_0.html", + "node_id":"functiongraph_01_0200_0.xml", + "product_code":"functiongraph", + "code":"3", + "des":"FunctionGraph provides console-based function management.The Node.js, Java, Python, Go, and custom runtimes are supported. Table 1 provides the details.You are advised to", + "doc_type":"usermanual", + "kw":"Product Features,Service Overview,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Product Features", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0180_0.html", + "node_id":"functiongraph_01_0180_0.xml", + "product_code":"functiongraph", + "code":"4", + "des":"FunctionGraph automatically runs your code and frees you from provisioning and managing servers, allowing you to focus on business innovation.FunctionGraph automatically ", + "doc_type":"usermanual", + "kw":"Product Advantages,Service Overview,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Product Advantages", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0140_0.html", + "node_id":"functiongraph_01_0140_0.xml", + "product_code":"functiongraph", + "code":"5", + "des":"FunctionGraph is suitable for various scenarios, such as real-time file processing, real-time data stream processing, web & mobile application backends, and AI applicatio", + "doc_type":"usermanual", + "kw":"Application Scenarios,Service Overview,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Application Scenarios", + "githuburl":"" + }, + { + "uri":"functiongraph_02_1000.html", + "node_id":"functiongraph_02_1000.xml", + "product_code":"", + "code":"6", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"", + "kw":"Function Types", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Function Types", + "githuburl":"" + }, + { + "uri":"functiongraph_02_1001.html", + "node_id":"functiongraph_02_1001.xml", + "product_code":"", + "code":"7", + "des":"FunctionGraph supports event functions. An event can trigger function execution. Generally, it is in JSON format. You can create an event to trigger your function through", + "doc_type":"", + "kw":"Event Functions,Function Types,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Event Functions", + "githuburl":"" + }, + { + "uri":"functiongraph_02_1002.html", + "node_id":"functiongraph_02_1002.xml", + "product_code":"", + "code":"8", + "des":"FunctionGraph supports event functions and HTTP functions. HTTP functions are designed to optimize web services. You can send HTTP requests to URLs to trigger function ex", + "doc_type":"", + "kw":"HTTP Functions,Function Types,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"HTTP Functions", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0150.html", + "node_id":"functiongraph_01_0150.xml", + "product_code":"functiongraph", + "code":"9", + "des":"Valid payload size of invocation response body (synchronous invocation): The returned character string or the JSON character string of the serialized response body is les", + "doc_type":"usermanual", + "kw":"Notes and Constraints,Service Overview,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Notes and Constraints", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0160_0.html", + "node_id":"functiongraph_01_0160_0.xml", + "product_code":"functiongraph", + "code":"10", + "des":"If you need to assign different permissions to employees in your enterprise to access your FunctionGraph resources, IAM is a good choice for fine-grained permissions mana", + "doc_type":"usermanual", + "kw":"Permissions Management,Service Overview,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Permissions Management", + "githuburl":"" + }, + { + "uri":"functiongraph_02_1005.html", + "node_id":"functiongraph_02_1005.xml", + "product_code":"", + "code":"11", + "des":"Functions are code defined to handle events.An event source is a public cloud service or custom application that publishes events.Clients wait for explicit responses to t", + "doc_type":"", + "kw":"Concepts,Service Overview,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Concepts", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0130_0.html", + "node_id":"functiongraph_01_0130_0.xml", + "product_code":"functiongraph", + "code":"12", + "des":"Table 1 describes the cloud services that have been interconnected with FunctionGraph.", + "doc_type":"usermanual", + "kw":"Relationships Between FunctionGraph and Other Services,Service Overview,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Relationships Between FunctionGraph and Other Services", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0505.html", + "node_id":"functiongraph_01_0505.xml", + "product_code":"", + "code":"13", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"", + "kw":"Getting Started", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Getting Started", + "githuburl":"" + }, + { + "uri":"functiongraph_04_0100.html", + "node_id":"functiongraph_04_0100.xml", + "product_code":"", + "code":"14", + "des":"FunctionGraph allows you to run your code without provisioning or managing servers, while ensuring high availability and scalability. All you need to do is upload your co", + "doc_type":"", + "kw":"Introduction,Getting Started,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Introduction", + "githuburl":"" + }, + { + "uri":"functiongraph_04_0101.html", + "node_id":"functiongraph_04_0101.xml", + "product_code":"", + "code":"15", + "des":"This section describes how to quickly create and test a HelloWorld function on the FunctionGraph console.To perform the operations described in this section, ensure that ", + "doc_type":"", + "kw":"Creating a Function from Scratch,Getting Started,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Creating a Function from Scratch", + "githuburl":"" + }, + { + "uri":"functiongraph_04_0102.html", + "node_id":"functiongraph_04_0102.xml", + "product_code":"", + "code":"16", + "des":"FunctionGraph provides templates to automatically complete code and running environment configurations when you create a function, helping you quickly build applications.", + "doc_type":"", + "kw":"Creating a Function Using a Template,Getting Started,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Creating a Function Using a Template", + "githuburl":"" + }, + { + "uri":"functiongraph_04_0105.html", + "node_id":"functiongraph_04_0105.xml", + "product_code":"", + "code":"17", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"", + "kw":"Deploying a Function Using a Container Image", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Deploying a Function Using a Container Image", + "githuburl":"" + }, + { + "uri":"functiongraph_04_0103.html", + "node_id":"functiongraph_04_0103.xml", + "product_code":"", + "code":"18", + "des":"When developing an HTTP function using a custom image, implement an HTTP server in the image and listen on port 8000 for requests. (Do not change port 8000 in the example", + "doc_type":"", + "kw":"Developing an HTTP Function,Deploying a Function Using a Container Image,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Developing an HTTP Function", + "githuburl":"" + }, + { + "uri":"functiongraph_04_0104.html", + "node_id":"functiongraph_04_0104.xml", + "product_code":"functiongraph", + "code":"19", + "des":"When developing an event function using a custom image, implement an HTTP server in the image and listen on port 8000 for requests. By default, the request path /init is ", + "doc_type":"qs", + "kw":"Developing an Event Function,Deploying a Function Using a Container Image,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"qs", + "IsBot":"Yes", + "IsMulti":"Yes" + } + ], + "title":"Developing an Event Function", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0100.html", + "node_id":"functiongraph_01_0100.xml", + "product_code":"functiongraph", + "code":"20", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Before You Start", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Before You Start", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0110.html", + "node_id":"functiongraph_01_0110.xml", + "product_code":"functiongraph", + "code":"21", + "des":"FunctionGraph allows you to run your code without provisioning or managing servers, while ensuring high availability and scalability. All you need to do is upload your co", + "doc_type":"usermanual", + "kw":"Use of FunctionGraph,Before You Start,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Use of FunctionGraph", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0140.html", + "node_id":"functiongraph_01_0140.xml", + "product_code":"functiongraph", + "code":"22", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Permissions Management", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Permissions Management", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0141.html", + "node_id":"functiongraph_01_0141.xml", + "product_code":"functiongraph", + "code":"23", + "des":"This section describes how to use Identity and Access Management (IAM) to implement fine-grained permissions control for your FunctionGraph resources. With IAM, you can:C", + "doc_type":"usermanual", + "kw":"Creating a User and Granting Permissions,Permissions Management,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Creating a User and Granting Permissions", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0215.html", + "node_id":"functiongraph_01_0215.xml", + "product_code":"functiongraph", + "code":"24", + "des":"Custom policies can be created as a supplement to the system policies of FunctionGraph.You can create custom policies in either of the following ways:Visual editor: Selec", + "doc_type":"usermanual", + "kw":"Creating a Custom Policy,Permissions Management,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Creating a Custom Policy", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0151.html", + "node_id":"functiongraph_01_0151.xml", + "product_code":"functiongraph", + "code":"25", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Supported Programming Languages", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Supported Programming Languages", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1822.html", + "node_id":"functiongraph_01_1822.xml", + "product_code":"", + "code":"26", + "des":"√: Supported. ×: Not supported.", + "doc_type":"", + "kw":"Node.js,Supported Programming Languages,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Node.js", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1823.html", + "node_id":"functiongraph_01_1823.xml", + "product_code":"", + "code":"27", + "des":"√: Supported. ×: Not supported.", + "doc_type":"", + "kw":"Python,Supported Programming Languages,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Python", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1824.html", + "node_id":"functiongraph_01_1824.xml", + "product_code":"", + "code":"28", + "des":"√: Supported. ×: Not supported.", + "doc_type":"", + "kw":"Java,Supported Programming Languages,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Java", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1825.html", + "node_id":"functiongraph_01_1825.xml", + "product_code":"", + "code":"29", + "des":"√: Supported. ×: Not supported.", + "doc_type":"", + "kw":"Go,Supported Programming Languages,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Go", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0406.html", + "node_id":"functiongraph_01_0406.xml", + "product_code":"functiongraph", + "code":"30", + "des":"A runtime runs the code of a function, reads the handler name from an environment variable, and reads invocation events from the runtime APIs of FunctionGraph. The runtim", + "doc_type":"usermanual", + "kw":"Custom Runtime,Supported Programming Languages,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Custom Runtime", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0150_0.html", + "node_id":"functiongraph_01_0150_0.xml", + "product_code":"functiongraph", + "code":"31", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Building Functions", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Building Functions", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0152.html", + "node_id":"functiongraph_01_0152.xml", + "product_code":"functiongraph", + "code":"32", + "des":"To create a function, you must create a deployment package which includes your code and all dependencies. You can create a deployment package locally or edit code on the ", + "doc_type":"usermanual", + "kw":"Creating a Deployment Package,Building Functions,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Creating a Deployment Package", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0153.html", + "node_id":"functiongraph_01_0153.xml", + "product_code":"functiongraph", + "code":"33", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Creating a Function from Scratch", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Creating a Function from Scratch", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1441.html", + "node_id":"functiongraph_01_1441.xml", + "product_code":"", + "code":"34", + "des":"A function is customized code for processing events. You can create a function from scratch and configure the function based on site requirements.FunctionGraph manages th", + "doc_type":"", + "kw":"Creating an Event Function,Creating a Function from Scratch,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Creating an Event Function", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1442.html", + "node_id":"functiongraph_01_1442.xml", + "product_code":"", + "code":"35", + "des":"HTTP functions are designed to optimize web services. You can send HTTP requests to URLs to trigger function execution. HTTP functions support APIG triggers only.HTTP fun", + "doc_type":"", + "kw":"Creating an HTTP Function,Creating a Function from Scratch,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Creating an HTTP Function", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0401.html", + "node_id":"functiongraph_01_0401.xml", + "product_code":"functiongraph", + "code":"36", + "des":"FunctionGraph provides templates to automatically complete code, and running environment configurations when you create a function, helping you quickly build applications", + "doc_type":"usermanual", + "kw":"Creating a Function Using a Template,Building Functions,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Creating a Function Using a Template", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1047.html", + "node_id":"functiongraph_01_1047.xml", + "product_code":"", + "code":"37", + "des":"Package your container images complying with the Open Container Initiative (OCI) standard, and upload them to FunctionGraph. The images will be loaded and run by Function", + "doc_type":"", + "kw":"Deploying a Function Using a Container Image,Building Functions,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Deploying a Function Using a Container Image", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0300.html", + "node_id":"functiongraph_01_0300.xml", + "product_code":"functiongraph", + "code":"38", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Configuring Functions", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Configuring Functions", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0201.html", + "node_id":"functiongraph_01_0201.xml", + "product_code":"functiongraph", + "code":"39", + "des":"The initializer of a function is executed after an instance is started. The instance starts to process requests only after the initializer is executed. The initializer is", + "doc_type":"usermanual", + "kw":"Configuring Initialization,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Configuring Initialization", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1828.html", + "node_id":"functiongraph_01_1828.xml", + "product_code":"", + "code":"40", + "des":"After a function is created, Memory (MB), Handler, and Execution Timeout (s) are automatically set based on your runtime. If needed, modify them based on this section.You", + "doc_type":"", + "kw":"Configuring Basic Settings,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Configuring Basic Settings", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0920.html", + "node_id":"functiongraph_01_0920.xml", + "product_code":"functiongraph", + "code":"41", + "des":"FunctionGraph works with other cloud services in most scenarios. Create a cloud service agency so that FunctionGraph can perform resource O&M in other cloud services on y", + "doc_type":"usermanual", + "kw":"Configuring Agency Permissions,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Configuring Agency Permissions", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0222.html", + "node_id":"functiongraph_01_0222.xml", + "product_code":"functiongraph", + "code":"42", + "des":"By default, functions can access services on public networks. If the target public network service requires whitelist verification using a fixed IP address, enable VPC ac", + "doc_type":"usermanual", + "kw":"Configuring the Network,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Configuring the Network", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0402.html", + "node_id":"functiongraph_01_0402.xml", + "product_code":"functiongraph", + "code":"43", + "des":"FunctionGraph allows you to mount file systems to your functions. Multiple functions can share the same file system. This greatly expands the function execution and stora", + "doc_type":"usermanual", + "kw":"Configuring Disk Mounting,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Configuring Disk Mounting", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0154.html", + "node_id":"functiongraph_01_0154.xml", + "product_code":"functiongraph", + "code":"44", + "des":"Environment variables allow you to pass dynamic parameters to a function without modifying code.Environment distinguishing: Configure different environment variables for ", + "doc_type":"usermanual", + "kw":"Configuring Environment Variables,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Configuring Environment Variables", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0390_03.html", + "node_id":"functiongraph_01_0390_03.xml", + "product_code":"", + "code":"45", + "des":"Functions can be invoked synchronously or asynchronously. In asynchronous mode, FunctionGraph sends a response immediately after persisting a request. The request result ", + "doc_type":"", + "kw":"Configuring Asynchronous Execution Notification,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Configuring Asynchronous Execution Notification", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0303.html", + "node_id":"functiongraph_01_0303.xml", + "product_code":"functiongraph", + "code":"46", + "des":"By default, each function instance processes only one request at a specific time. For example, to process three concurrent requests, FunctionGraph triggers three function", + "doc_type":"usermanual", + "kw":"Configuring Single-Instance Multi-Concurrency,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Configuring Single-Instance Multi-Concurrency", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0180.html", + "node_id":"functiongraph_01_0180.xml", + "product_code":"functiongraph", + "code":"47", + "des":"FunctionGraph allows you to publish one or more versions throughout the development, test, and production processes to manage your function code. The code and environment", + "doc_type":"usermanual", + "kw":"Managing Versions,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Managing Versions", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1829.html", + "node_id":"functiongraph_01_1829.xml", + "product_code":"", + "code":"48", + "des":"An alias points to a specific function version. Create an alias and expose it to clients, for example, bind a trigger to the alias instead of the corresponding version. T", + "doc_type":"", + "kw":"Managing Aliases,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Managing Aliases", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0310.html", + "node_id":"functiongraph_01_0310.xml", + "product_code":"functiongraph", + "code":"49", + "des":"By default, a function is bound with only one resource specification. After enabling dynamic memory, you can configure a specification for request processing. If no speci", + "doc_type":"usermanual", + "kw":"Configuring Dynamic Memory,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Configuring Dynamic Memory", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1839.html", + "node_id":"functiongraph_01_1839.xml", + "product_code":"", + "code":"50", + "des":"Tags help you identify your cloud resources. When you have many cloud resources of the same type, you can use tags to classify them by dimension (for example, use, owner,", + "doc_type":"", + "kw":"Configuring Tags,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Configuring Tags", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1841.html", + "node_id":"functiongraph_01_1841.xml", + "product_code":"", + "code":"51", + "des":"This feature is supported only by FunctionGraph V2.You can bind a log group and log stream to a function to store its invocation logs. By default, the logs are stored in ", + "doc_type":"", + "kw":"Configuring a Log Group and Log Stream,Configuring Functions,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Configuring a Log Group and Log Stream", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0302.html", + "node_id":"functiongraph_01_0302.xml", + "product_code":"functiongraph", + "code":"52", + "des":"Event data is passed to the handler of your function as an input. After configuration, event data is persisted for later use. Each function can have a maximum of 10 test ", + "doc_type":"usermanual", + "kw":"Online Debugging,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Online Debugging", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0200.html", + "node_id":"functiongraph_01_0200.xml", + "product_code":"functiongraph", + "code":"53", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Creating Triggers", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Creating Triggers", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0301.html", + "node_id":"functiongraph_01_0301.xml", + "product_code":"functiongraph", + "code":"54", + "des":"You can enable or disable triggers as required. Note that OBS and APIG triggers cannot be disabled and can only be deleted.You can delete triggers that will no longer be ", + "doc_type":"usermanual", + "kw":"Managing Triggers,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Managing Triggers", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0207.html", + "node_id":"functiongraph_01_0207.xml", + "product_code":"functiongraph", + "code":"55", + "des":"This section describes how to create a timer trigger to invoke your function based on a fixed rate or cron expression.", + "doc_type":"usermanual", + "kw":"Using a Timer Trigger,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Using a Timer Trigger", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0204.html", + "node_id":"functiongraph_01_0204.xml", + "product_code":"functiongraph", + "code":"56", + "des":"This section describes how to create an APIG trigger and call an API to trigger a function.", + "doc_type":"usermanual", + "kw":"Using an APIG (Dedicated) Trigger,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Using an APIG (Dedicated) Trigger", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0205.html", + "node_id":"functiongraph_01_0205.xml", + "product_code":"functiongraph", + "code":"57", + "des":"This section describes how to create an OBS trigger and upload an image package to a specified OBS bucket to trigger a function.", + "doc_type":"usermanual", + "kw":"Using an OBS Trigger,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Using an OBS Trigger", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0214.html", + "node_id":"functiongraph_01_0214.xml", + "product_code":"functiongraph", + "code":"58", + "des":"This section describes how to create a Kafka trigger and configure a Kafka event to trigger a function.After a Kafka trigger is used, FunctionGraph periodically polls for", + "doc_type":"usermanual", + "kw":"Using a Kafka Trigger,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Using a Kafka Trigger", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0206.html", + "node_id":"functiongraph_01_0206.xml", + "product_code":"functiongraph", + "code":"59", + "des":"This section describes how to create a DIS trigger for a function, and configure a DIS event by using the built-in event template to trigger the function.", + "doc_type":"usermanual", + "kw":"Using a DIS Trigger,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Using a DIS Trigger", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0202.html", + "node_id":"functiongraph_01_0202.xml", + "product_code":"", + "code":"60", + "des":"This section describes how to create an SMN trigger and publish a message to trigger a function.For details about the SMN event source, see section \"Supported Event Sourc", + "doc_type":"", + "kw":"Using an SMN Trigger,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Using an SMN Trigger", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0208.html", + "node_id":"functiongraph_01_0208.xml", + "product_code":"functiongraph", + "code":"61", + "des":"This section describes how to create an LTS trigger for a function, and invoke the function when log events occur.", + "doc_type":"usermanual", + "kw":"Using an LTS Trigger,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Using an LTS Trigger", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0209.html", + "node_id":"functiongraph_01_0209.xml", + "product_code":"functiongraph", + "code":"62", + "des":"This section describes how to create a CTS trigger for a function, and invoke the function in response to cloud resource operations recorded by CTS.", + "doc_type":"usermanual", + "kw":"Using a CTS Trigger,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Using a CTS Trigger", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0210.html", + "node_id":"functiongraph_01_0210.xml", + "product_code":"functiongraph", + "code":"63", + "des":"This section describes how to create a DDS trigger for a function, and invoke the function when a database table changes.A function using a DDS trigger will be triggered ", + "doc_type":"usermanual", + "kw":"Using a DDS Trigger,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Using a DDS Trigger", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1838.html", + "node_id":"functiongraph_01_1838.xml", + "product_code":"", + "code":"64", + "des":"This section describes how to create an open-source Kafka trigger and configure an event to trigger a function.If you use an open-source Kafka trigger for a function, Fun", + "doc_type":"", + "kw":"Using an Open-Source Kafka Trigger,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Using an Open-Source Kafka Trigger", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0908.html", + "node_id":"functiongraph_01_0908.xml", + "product_code":"", + "code":"65", + "des":"You can configure a cron expression in the following formats for a function timer trigger:@every formatThe format is \"@every N unit\". N is a positive integer. unit can be", + "doc_type":"", + "kw":"Cron Expressions for a Function Timer Trigger,Creating Triggers,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Cron Expressions for a Function Timer Trigger", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0160.html", + "node_id":"functiongraph_01_0160.xml", + "product_code":"functiongraph", + "code":"66", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Invoking the Function", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Invoking the Function", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1061.html", + "node_id":"functiongraph_01_1061.xml", + "product_code":"", + "code":"67", + "des":"When triggering a function, clients wait for the result before proceeding. Currently, functions with APIG (dedicated) triggers are executed synchronously. Alternatively, ", + "doc_type":"", + "kw":"Synchronous Invocation,Invoking the Function,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Synchronous Invocation", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1062.html", + "node_id":"functiongraph_01_1062.xml", + "product_code":"", + "code":"68", + "des":"When a client triggers a function, FunctionGraph persists the request and sends a response immediately to the client. The client proceeds without waiting for the executio", + "doc_type":"", + "kw":"Asynchronous Invocation,Invoking the Function,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Asynchronous Invocation", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1814.html", + "node_id":"functiongraph_01_1814.xml", + "product_code":"", + "code":"69", + "des":"If synchronous or asynchronous invocation fails, do as follows:Synchronous invocationTry again.Try again.Asynchronous invocationYou can set the maximum number of retries ", + "doc_type":"", + "kw":"Retry Mechanism,Invoking the Function,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Retry Mechanism", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0390_01.html", + "node_id":"functiongraph_01_0390_01.xml", + "product_code":"", + "code":"70", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"", + "kw":"Monitoring", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Monitoring", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0211.html", + "node_id":"functiongraph_01_0211.xml", + "product_code":"functiongraph", + "code":"71", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Metrics", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Metrics", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0212.html", + "node_id":"functiongraph_01_0212.xml", + "product_code":"functiongraph", + "code":"72", + "des":"FunctionGraph is interconnected with Cloud Eye, allowing you to view function metrics without the need for any configurations.FunctionGraph collects function metrics and ", + "doc_type":"usermanual", + "kw":"Function Monitoring,Metrics,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Function Monitoring", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0213.html", + "node_id":"functiongraph_01_0213.xml", + "product_code":"functiongraph", + "code":"73", + "des":"This section describes the FunctionGraph namespaces, function metrics, and dimensions reported to Cloud Eye. You can view function metrics and alarms by using the Cloud E", + "doc_type":"usermanual", + "kw":"Function Metrics,Metrics,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Function Metrics", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0304.html", + "node_id":"functiongraph_01_0304.xml", + "product_code":"functiongraph", + "code":"74", + "des":"After creating a function and trigger, you can monitor the invocation and running statuses of the function in real time.FunctionGraph differentiates the metrics of a func", + "doc_type":"usermanual", + "kw":"Creating an Alarm Rule,Metrics,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Creating an Alarm Rule", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1833.html", + "node_id":"functiongraph_01_1833.xml", + "product_code":"", + "code":"75", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"", + "kw":"Logs", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Logs", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0170.html", + "node_id":"functiongraph_01_0170.xml", + "product_code":"functiongraph", + "code":"76", + "des":"FunctionGraph is interconnected with LTS, allowing you to view function logs without the need for any configurations.On the FunctionGraph console, view function logs in t", + "doc_type":"usermanual", + "kw":"Querying Function Logs,Logs,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Querying Function Logs", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1834.html", + "node_id":"functiongraph_01_1834.xml", + "product_code":"", + "code":"77", + "des":"You can enable LTS to better manage function logs. After you enable LTS, FunctionGraph automatically creates a log group starting with functiongraph. When you create a fu", + "doc_type":"", + "kw":"Managing Function Logs,Logs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Managing Function Logs", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0320.html", + "node_id":"functiongraph_01_0320.xml", + "product_code":"functiongraph", + "code":"78", + "des":"Function is a combination of code, runtime, resources, and settings required to achieve a specific purpose. It is the minimum unit that can run independently. A function ", + "doc_type":"usermanual", + "kw":"Function Management,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Function Management", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0391.html", + "node_id":"functiongraph_01_0391.xml", + "product_code":"functiongraph", + "code":"79", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Dependency Management", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Dependency Management", + "githuburl":"" + }, + { + "uri":"functiongraph_01_2119.html", + "node_id":"functiongraph_01_2119.xml", + "product_code":"", + "code":"80", + "des":"Generally, the code of a function consists of public libraries and service logic. The public libraries can be packaged as a dependency and shared among functions, reducin", + "doc_type":"", + "kw":"Configuring Dependency Packages,Dependency Management,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Configuring Dependency Packages", + "githuburl":"" + }, + { + "uri":"functiongraph_01_2102.html", + "node_id":"functiongraph_01_2102.xml", + "product_code":"", + "code":"81", + "des":"Supported Dependent LibrariesFunctionGraph supports both standard and third-party libraries.Standard librariesWhen using standard libraries, you can import them to your i", + "doc_type":"", + "kw":"Dependent Libraries,Dependency Management,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Dependent Libraries", + "githuburl":"" + }, + { + "uri":"functiongraph_01_1837.html", + "node_id":"functiongraph_01_1837.xml", + "product_code":"", + "code":"82", + "des":"FunctionGraph provides on-demand and reserved instances.On-demand instances are created and released by FunctionGraph based on actual function usage. When receiving reque", + "doc_type":"", + "kw":"Reserved Instance Management,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Reserved Instance Management", + "githuburl":"" + }, + { + "uri":"functiongraph_01_0503.html", + "node_id":"functiongraph_01_0503.xml", + "product_code":"", + "code":"83", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"", + "kw":"FAQs", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"FAQs", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0110_00.html", + "node_id":"functiongraph_03_0110_00.xml", + "product_code":"functiongraph", + "code":"84", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"General FAQs", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"General FAQs", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0110.html", + "node_id":"functiongraph_03_0110.xml", + "product_code":"functiongraph", + "code":"85", + "des":"FunctionGraph allows you to run you code without provisioning or managing servers, while ensuring high availability and scalability. All you need to do is upload your cod", + "doc_type":"usermanual", + "kw":"What Is FunctionGraph?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"What Is FunctionGraph?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0120.html", + "node_id":"functiongraph_03_0120.xml", + "product_code":"functiongraph", + "code":"86", + "des":"When using FunctionGraph, you do not need to apply for or pre-configure any computing, storage, or network services, but need to upload and run code in supported runtimes", + "doc_type":"usermanual", + "kw":"Do I Need to Apply for Any Compute, Storage, or Network Services When Using FunctionGraph?,General F", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"Do I Need to Apply for Any Compute, Storage, or Network Services When Using FunctionGraph?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0160.html", + "node_id":"functiongraph_03_0160.xml", + "product_code":"functiongraph", + "code":"87", + "des":"After programming, you only need to package your code into a ZIP file (Java, Node.js, Python, and Go) or JAR file (Java), and upload the file to FunctionGraph for executi", + "doc_type":"usermanual", + "kw":"Do I Need to Deploy My Code After Programming?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"Do I Need to Deploy My Code After Programming?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0260.html", + "node_id":"functiongraph_03_0260.xml", + "product_code":"functiongraph", + "code":"88", + "des":"Table 1 lists the runtimes supported by FunctionGraph.", + "doc_type":"usermanual", + "kw":"What Runtimes Does FunctionGraph Support?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"What Runtimes Does FunctionGraph Support?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0170.html", + "node_id":"functiongraph_03_0170.xml", + "product_code":"functiongraph", + "code":"89", + "des":"Each FunctionGraph function is allocated 512 MB ephemeral disk space. You can upload deployment packages up to 10 GB in size. For more information, see section \"Notes and", + "doc_type":"usermanual", + "kw":"How Much Disk Space Is Allocated to Each FunctionGraph Function?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"How Much Disk Space Is Allocated to Each FunctionGraph Function?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0240.html", + "node_id":"functiongraph_03_0240.xml", + "product_code":"functiongraph", + "code":"90", + "des":"Yes. For details, see section \"Managing Versions\".", + "doc_type":"usermanual", + "kw":"Does FunctionGraph Support Function Versioning?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"Does FunctionGraph Support Function Versioning?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0330.html", + "node_id":"functiongraph_03_0330.xml", + "product_code":"functiongraph", + "code":"91", + "des":"A function can read files in the code directory. The working directory of a function is the upper-level directory of the handler file. Assume that you have uploaded a fol", + "doc_type":"usermanual", + "kw":"How Does a Function Read or Write Files?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"How Does a Function Read or Write Files?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0341.html", + "node_id":"functiongraph_03_0341.xml", + "product_code":"functiongraph", + "code":"92", + "des":"FunctionGraph has integrated non-standard libraries such as redis, http, and obs_client. You can directly use these libraries when developing functions.Alternatively, use", + "doc_type":"usermanual", + "kw":"Does FunctionGraph Support Function Extension?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"Does FunctionGraph Support Function Extension?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0342.html", + "node_id":"functiongraph_03_0342.xml", + "product_code":"functiongraph", + "code":"93", + "des":"If you are prompted insufficient permissions when creating, deleting, modifying, or querying functions and triggers in FunctionGraph as an IAM user, contact the administr", + "doc_type":"usermanual", + "kw":"Which Permissions Are Required for an IAM User to Use FunctionGraph?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"Which Permissions Are Required for an IAM User to Use FunctionGraph?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0830.html", + "node_id":"functiongraph_03_0830.xml", + "product_code":"", + "code":"94", + "des":"For OS-dependent packages (for example, unixODBC), download the source code to compile dependency packages.Log in to your ECS on the ECS console (ensure that the GCC and ", + "doc_type":"", + "kw":"How Can I Create an ODBC Drive-based Python Dependency Package for Database Query?,General FAQs,User", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Can I Create an ODBC Drive-based Python Dependency Package for Database Query?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0352.html", + "node_id":"functiongraph_03_0352.xml", + "product_code":"functiongraph", + "code":"95", + "des":"For details about the resource quota of FunctionGraph, see section \"Notes and Constraints\".", + "doc_type":"usermanual", + "kw":"What Is the Quota of FunctionGraph?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"What Is the Quota of FunctionGraph?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0872.html", + "node_id":"functiongraph_03_0872.xml", + "product_code":"", + "code":"96", + "des":"FunctionGraph functions created with a container image cannot directly parse private Domain Name Service (DNS) domain names. However, you can call DNS APIs to achieve thi", + "doc_type":"", + "kw":"How Does a Container Image–based Function Resolve a Private DNS Domain Name?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Does a Container Image–based Function Resolve a Private DNS Domain Name?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0840.html", + "node_id":"functiongraph_03_0840.xml", + "product_code":"functiongraph", + "code":"97", + "des":"The domain name www.test.com is used as an example. The procedure is as follows:", + "doc_type":"usermanual", + "kw":"How Do I Use a Domain Name to Access an API Registered with API Gateway (Dedicated)?,General FAQs,Us", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual", + "IsMulti":"No", + "IsBot":"Yes" + } + ], + "title":"How Do I Use a Domain Name to Access an API Registered with API Gateway (Dedicated)?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0817.html", + "node_id":"functiongraph_03_0817.xml", + "product_code":"", + "code":"98", + "des":"Web applications: mini programs, web pages/apps, chatbots, and Backends for Frontends (BFF).Event-driven applications: file processing, image processing, live video strea", + "doc_type":"", + "kw":"What Are the Common Application Scenarios of FunctionGraph?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"What Are the Common Application Scenarios of FunctionGraph?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0826.html", + "node_id":"functiongraph_03_0826.xml", + "product_code":"", + "code":"99", + "des":"Currently, FunctionGraph resolves only DNS domain names and POD domain names.", + "doc_type":"", + "kw":"Why Can't the API Gateway Domain Name Bound to a Service Be Resolved During Function Invocation?,Gen", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Why Can't the API Gateway Domain Name Bound to a Service Be Resolved During Function Invocation?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0828.html", + "node_id":"functiongraph_03_0828.xml", + "product_code":"", + "code":"100", + "des":"Not currently.", + "doc_type":"", + "kw":"Does FunctionGraph Support Synchronous Transmission at the Maximum Intranet Bandwidth?,General FAQs,", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Does FunctionGraph Support Synchronous Transmission at the Maximum Intranet Bandwidth?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0832.html", + "node_id":"functiongraph_03_0832.xml", + "product_code":"", + "code":"101", + "des":"A tenant can create up to 4 VPCs. To create more VPCs, submit a service ticket.", + "doc_type":"", + "kw":"What If the VPC Quota Is Used Up?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"What If the VPC Quota Is Used Up?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0833.html", + "node_id":"functiongraph_03_0833.xml", + "product_code":"", + "code":"102", + "des":"Take Java as an example. You can use this demo to print logs.", + "doc_type":"", + "kw":"How Can I Print Info, Error, or Warn Logs?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Can I Print Info, Error, or Warn Logs?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0841.html", + "node_id":"functiongraph_03_0841.xml", + "product_code":"", + "code":"103", + "des":"Yes. The procedure is as follows:", + "doc_type":"", + "kw":"Can I Set the Domain Name of an API to My Own Domain Name?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Can I Set the Domain Name of an API to My Own Domain Name?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0842.html", + "node_id":"functiongraph_03_0842.xml", + "product_code":"", + "code":"104", + "des":"No. Once a function is created, its runtime cannot be changed.", + "doc_type":"", + "kw":"Can I Change the Runtime?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Can I Change the Runtime?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0858.html", + "node_id":"functiongraph_03_0858.xml", + "product_code":"", + "code":"105", + "des":"No. A function's name cannot be changed once the function is created.", + "doc_type":"", + "kw":"Can I Change a Function's Name?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Can I Change a Function's Name?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0843.html", + "node_id":"functiongraph_03_0843.xml", + "product_code":"", + "code":"106", + "des":"When you see this message, mount the file to a new path.User ID/user group ID: Can be any number except 1000. The value –1 will be automatically converted to 1003. The tw", + "doc_type":"", + "kw":"Why Is Message \"failed to mount exist system path\" Displayed?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Why Is Message \"failed to mount exist system path\" Displayed?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0846.html", + "node_id":"functiongraph_03_0846.xml", + "product_code":"", + "code":"107", + "des":"Take Python as an example. If you use os.getcwd() to query the current directory, the directory will be /opt/function. However, code has actually been uploaded to /opt/fu", + "doc_type":"", + "kw":"How Do I Obtain Uploaded Files?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I Obtain Uploaded Files?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0848.html", + "node_id":"functiongraph_03_0848.xml", + "product_code":"", + "code":"108", + "des":"If the E2E function execution latency exceeds 90s, asynchronous invocation is recommended. If synchronous invocation is used, no responses can be received after 90s due t", + "doc_type":"", + "kw":"Why Can't I Receive Responses for Synchronous Invocation?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Why Can't I Receive Responses for Synchronous Invocation?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0849.html", + "node_id":"functiongraph_03_0849.xml", + "product_code":"", + "code":"109", + "des":"Do not use os.system(\"command &\"). The background command output will not be collected. To obtain the command output, use subprocess.Popen instead.", + "doc_type":"", + "kw":"What Should I Do If the os.system(\"command &\") Execution Logs Are Not Collected?,General FAQs,User G", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"What Should I Do If the os.system(\"command &\") Execution Logs Are Not Collected?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0855.html", + "node_id":"functiongraph_03_0855.xml", + "product_code":"", + "code":"110", + "des":"By default, only the /tmp directory can be accessed, for example, for creating or downloading files.", + "doc_type":"", + "kw":"Which Directories Can Be Accessed When a Custom Runtime Is Used?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Which Directories Can Be Accessed When a Custom Runtime Is Used?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0856.html", + "node_id":"functiongraph_03_0856.xml", + "product_code":"", + "code":"111", + "des":"3.6.8 and 3.9.2.", + "doc_type":"", + "kw":"Which Minor Versions of Python 3.6 and 3.9 Are Supported?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Which Minor Versions of Python 3.6 and 3.9 Are Supported?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0857.html", + "node_id":"functiongraph_03_0857.xml", + "product_code":"", + "code":"112", + "des":"The actions listed in Table 1 can be used.", + "doc_type":"", + "kw":"Which Actions Can Be Used Instead of a VPC Administrator Agency for VPC Access?,General FAQs,User Gu", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Which Actions Can Be Used Instead of a VPC Administrator Agency for VPC Access?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0859.html", + "node_id":"functiongraph_03_0859.xml", + "product_code":"", + "code":"113", + "des":"The code logic timed out. In this case, optimize the code or increase the timeout.The network timed out. To fix this issue, increase the timeout.It took a long time to lo", + "doc_type":"", + "kw":"What Are the Possible Causes for Function Timeout?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"What Are the Possible Causes for Function Timeout?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0871.html", + "node_id":"functiongraph_03_0871.xml", + "product_code":"", + "code":"114", + "des":"Log in to the FunctionGraph console, and click the name of the target function to go to the details page. Choose Operation > Export function in the upper right, and click", + "doc_type":"", + "kw":"How Do I Obtain the Code of a Function?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I Obtain the Code of a Function?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0882.html", + "node_id":"functiongraph_03_0882.xml", + "product_code":"", + "code":"115", + "des":"Yes. See the following examples:Node.jsexports.initializer = function(context, callback) {\n callback(null, '');\n };Pythondef my_initializer(context):\n print(\"hel", + "doc_type":"", + "kw":"Do You Have Sample Code for Initializers?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Do You Have Sample Code for Initializers?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0884.html", + "node_id":"functiongraph_03_0884.xml", + "product_code":"", + "code":"116", + "des":"To check the status of asynchronous invocation requests, view the records by choosing Configuration > Configure Async Notification on the function details page, as shown ", + "doc_type":"", + "kw":"How Do I Enable Structured Log Query?,General FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I Enable Structured Log Query?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0771.html", + "node_id":"functiongraph_03_0771.xml", + "product_code":"", + "code":"117", + "des":"No. FunctionGraph does not support this feature currently. Functions are about serverless computing, and compute resources are allocated while functions are running. Cust", + "doc_type":"", + "kw":"Can I Enable a Listening Port in a Function to Receive External TCP Requests via EIP?,General FAQs,U", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Can I Enable a Listening Port in a Function to Receive External TCP Requests via EIP?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0344.html", + "node_id":"functiongraph_03_0344.xml", + "product_code":"functiongraph", + "code":"118", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Function Creation FAQs", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Function Creation FAQs", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0190.html", + "node_id":"functiongraph_03_0190.xml", + "product_code":"functiongraph", + "code":"119", + "des":"You can create additional threads and processes in your function by using runtime and OS features.", + "doc_type":"usermanual", + "kw":"Can I Add Threads and Processes in Function Code?,Function Creation FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"Can I Add Threads and Processes in Function Code?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0280.html", + "node_id":"functiongraph_03_0280.xml", + "product_code":"functiongraph", + "code":"120", + "des":"In addition to inline code editing, you can create a function by uploading a ZIP or JAR file, or uploading a ZIP file from OBS. For details, see Packaging Rules and Examp", + "doc_type":"usermanual", + "kw":"What Are the Rules for Packaging a Function Project?,Function Creation FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"What Are the Rules for Packaging a Function Project?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0270.html", + "node_id":"functiongraph_03_0270.xml", + "product_code":"functiongraph", + "code":"121", + "des":"Each FunctionGraph function runs in its own environment and has its own resources and file system.", + "doc_type":"usermanual", + "kw":"How Does FunctionGraph Isolate Code?,Function Creation FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"How Does FunctionGraph Isolate Code?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0837.html", + "node_id":"functiongraph_03_0837.xml", + "product_code":"", + "code":"122", + "des":"To create an HTTP function, create a bootstrap file. For details, see section \"Creating a Bootstrap File\".", + "doc_type":"", + "kw":"How Do I Create the Bootstrap File for an HTTP Function?,Function Creation FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I Create the Bootstrap File for an HTTP Function?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0100.html", + "node_id":"functiongraph_03_0100.xml", + "product_code":"functiongraph", + "code":"123", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Trigger Management FAQs", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"Trigger Management FAQs", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0290.html", + "node_id":"functiongraph_03_0290.xml", + "product_code":"functiongraph", + "code":"124", + "des":"Ensure that the function response for an invocation by API Gateway has been encapsulated and contains body(String), statusCode(int), headers(Map), and isBase64Encoded(boo", + "doc_type":"usermanual", + "kw":"What If Error Code 500 Is Reported When Functions that Use APIG Triggers Return Strings?,Trigger Man", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"What If Error Code 500 Is Reported When Functions that Use APIG Triggers Return Strings?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0320.html", + "node_id":"functiongraph_03_0320.xml", + "product_code":"functiongraph", + "code":"125", + "des":"Cursors LATEST and TRIM_HORIZON specify the start points for reading data in Data Ingestion Service (DIS) streams.TRIM_HORIZON: Data is read from the earliest valid recor", + "doc_type":"usermanual", + "kw":"What Do LATEST and TRIM_HORIZON Mean in DIS Trigger Configuration?,Trigger Management FAQs,User Guid", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"What Do LATEST and TRIM_HORIZON Mean in DIS Trigger Configuration?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0819.html", + "node_id":"functiongraph_03_0819.xml", + "product_code":"", + "code":"126", + "des":"OBS does not support pull triggers. Therefore, OBS triggers cannot be enabled or disabled.", + "doc_type":"", + "kw":"Why Can't I Enable or Disable OBS Triggers by Calling APIs?,Trigger Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Why Can't I Enable or Disable OBS Triggers by Calling APIs?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0835.html", + "node_id":"functiongraph_03_0835.xml", + "product_code":"", + "code":"127", + "des":"For details, see section \"Using an APIG Trigger\".", + "doc_type":"", + "kw":"How Do I Use an APIG Trigger to Invoke a Function?,Trigger Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I Use an APIG Trigger to Invoke a Function?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0860.html", + "node_id":"functiongraph_03_0860.xml", + "product_code":"", + "code":"128", + "des":"By default, the request path or parameters are included in event. A function invokes APIG using its event template. You can obtain the request path or parameters from the", + "doc_type":"", + "kw":"How Does a Function Obtain the Request Path or Parameters When Using an APIG Trigger?,Trigger Manage", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Does a Function Obtain the Request Path or Parameters When Using an APIG Trigger?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0874.html", + "node_id":"functiongraph_03_0874.xml", + "product_code":"", + "code":"129", + "des":"Yes. If a message is displayed indicating that the configuration of the current trigger conflicts with that of another one, the two triggers have the same bucket, prefix,", + "doc_type":"", + "kw":"Can I Create an OBS Trigger with an Existing Bucket?,Trigger Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Can I Create an OBS Trigger with an Existing Bucket?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0883.html", + "node_id":"functiongraph_03_0883.xml", + "product_code":"", + "code":"130", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"", + "kw":"Dependency Management FAQs", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Dependency Management FAQs", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0890.html", + "node_id":"functiongraph_03_0890.xml", + "product_code":"", + "code":"131", + "des":"A dependency is a program package and also an environment required for running a software package. The software package relies on and can only run in the environment.", + "doc_type":"", + "kw":"What Is a Dependency?,Dependency Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"What Is a Dependency?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0885.html", + "node_id":"functiongraph_03_0885.xml", + "product_code":"", + "code":"132", + "des":"When you install a program or develop code that relies on an environment to run, you need to introduce the dependency.", + "doc_type":"", + "kw":"When Do I Need a Dependency?,Dependency Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"When Do I Need a Dependency?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0847.html", + "node_id":"functiongraph_03_0847.xml", + "product_code":"", + "code":"133", + "des":"The name of each file in a dependency cannot end with a tilde (~).There should be no more than 30,000 files in a dependency.You can upload a ZIP dependency file within 10", + "doc_type":"", + "kw":"What Are the Precautions for Using a Dependency?,Dependency Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"What Are the Precautions for Using a Dependency?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0886.html", + "node_id":"functiongraph_03_0886.xml", + "product_code":"", + "code":"134", + "des":"Supported DependenciesFunctionGraph supports standard libraries and third-party dependencies.Standard librariesWhen using standard libraries, you can import them to your ", + "doc_type":"", + "kw":"What Dependencies Does FunctionGraph Support?,Dependency Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"What Dependencies Does FunctionGraph Support?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0180.html", + "node_id":"functiongraph_03_0180.xml", + "product_code":"functiongraph", + "code":"135", + "des":"Yes. FunctionGraph supports both standard libraries and non-standard third-party libraries. For details, see What Dependencies Does FunctionGraph Support?", + "doc_type":"usermanual", + "kw":"Does FunctionGraph Support Class Libraries?,Dependency Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"Does FunctionGraph Support Class Libraries?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0887.html", + "node_id":"functiongraph_03_0887.xml", + "product_code":"", + "code":"136", + "des":"Package third-party libraries into a ZIP package by referring to How Do I Create Function Dependencies?Create a dependency on the FunctionGraph console by referring to Ho", + "doc_type":"", + "kw":"How Do I Use Third-Party Dependencies on FunctionGraph?,Dependency Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I Use Third-Party Dependencies on FunctionGraph?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0343.html", + "node_id":"functiongraph_03_0343.xml", + "product_code":"functiongraph", + "code":"137", + "des":"You are advised to create function dependencies in EulerOS. If other OSs are used, an error may occur due to underlying dependent libraries. For example, the dynamic link", + "doc_type":"usermanual", + "kw":"How Do I Create Function Dependencies?,Dependency Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"How Do I Create Function Dependencies?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0888.html", + "node_id":"functiongraph_03_0888.xml", + "product_code":"", + "code":"138", + "des":"Log in to the FunctionGraph console, and choose Functions > Dependencies in the navigation pane.Click Create Dependency.Set the following parameters.Dependency configurat", + "doc_type":"", + "kw":"How Do I Create a Dependency on the FunctionGraph Console?,Dependency Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I Create a Dependency on the FunctionGraph Console?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0889.html", + "node_id":"functiongraph_03_0889.xml", + "product_code":"", + "code":"139", + "des":"On the function details page, click the Code tab, and click Add in the Dependencies area.Public: Public dependencies are provided by FunctionGraph and can be directly add", + "doc_type":"", + "kw":"How Do I Add a Dependency to a Function?,Dependency Management FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I Add a Dependency to a Function?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0346.html", + "node_id":"functiongraph_03_0346.xml", + "product_code":"functiongraph", + "code":"140", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Function Execution FAQs", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Function Execution FAQs", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0250.html", + "node_id":"functiongraph_03_0250.xml", + "product_code":"functiongraph", + "code":"141", + "des":"Within 900s for synchronous execution and 72 hours for asynchronous execution.The default execution timeout is 3s. You can set the timeout (unit: s) to an integer from 3 ", + "doc_type":"usermanual", + "kw":"How Long Does It Take to Execute a FunctionGraph Function?,Function Execution FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"How Long Does It Take to Execute a FunctionGraph Function?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0347.html", + "node_id":"functiongraph_03_0347.xml", + "product_code":"functiongraph", + "code":"142", + "des":"Function execution includes two steps:Select an idle instance with required memory.Run specified code.", + "doc_type":"usermanual", + "kw":"Which Steps Are Included in Function Execution?,Function Execution FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Which Steps Are Included in Function Execution?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0348.html", + "node_id":"functiongraph_03_0348.xml", + "product_code":"functiongraph", + "code":"143", + "des":"FunctionGraph automatically scales in or out function instances based on the number of requests. If the number of concurrent requests increases, FunctionGraph allocates m", + "doc_type":"usermanual", + "kw":"How Does FunctionGraph Process Concurrent Requests?,Function Execution FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"How Does FunctionGraph Process Concurrent Requests?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0349.html", + "node_id":"functiongraph_03_0349.xml", + "product_code":"functiongraph", + "code":"144", + "des":"If a function has not been executed for a period of time, all instances related to the function will be released.", + "doc_type":"usermanual", + "kw":"What If Function Instances Have Not Been Executed for a Long Time?,Function Execution FAQs,User Guid", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"What If Function Instances Have Not Been Executed for a Long Time?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0350.html", + "node_id":"functiongraph_03_0350.xml", + "product_code":"functiongraph", + "code":"145", + "des":"C# and Go support a lower startup speed than other languages due to mechanism issues. You can use the following methods to speed up initial access to a function:Allocate ", + "doc_type":"usermanual", + "kw":"How Can I Speed Up Initial Access to a Function?,Function Execution FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"How Can I Speed Up Initial Access to a Function?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0210.html", + "node_id":"functiongraph_03_0210.xml", + "product_code":"functiongraph", + "code":"146", + "des":"The returned information about a function contains the maximum memory consumed. Alternatively, check the memory usage in the execution result.", + "doc_type":"usermanual", + "kw":"How Do I Know the Actual Memory Used for Function Execution?,Function Execution FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"How Do I Know the Actual Memory Used for Function Execution?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0820.html", + "node_id":"functiongraph_03_0820.xml", + "product_code":"", + "code":"147", + "des":"Functions are cold-started. If initialization or a lengthy operation is performed during the first function execution, the first request will be delayed. However, subsequ", + "doc_type":"", + "kw":"Why Is My First Request Slow?,Function Execution FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Why Is My First Request Slow?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0821.html", + "node_id":"functiongraph_03_0821.xml", + "product_code":"", + "code":"148", + "des":"Rectify the fault by referring to section \"Error Codes\". If the fault persists, contact technical support.", + "doc_type":"", + "kw":"What Do I Do If an Error Occurs When Calling an API?,Function Execution FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"What Do I Do If an Error Occurs When Calling an API?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0838.html", + "node_id":"functiongraph_03_0838.xml", + "product_code":"functiongraph", + "code":"149", + "des":"The first parameter in the function handler contains the request header. You can print the function execution result to obtain required fields.As shown in the following f", + "doc_type":"usermanual", + "kw":"How Do I Read the Request Header of a Function?,Function Execution FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual", + "IsMulti":"No", + "IsBot":"Yes" + } + ], + "title":"How Do I Read the Request Header of a Function?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0868.html", + "node_id":"functiongraph_03_0868.xml", + "product_code":"", + "code":"150", + "des":"Event parsing and cache consume extra memory during function invocation.After the invocation is complete, reclaimed memory is often put in the internal pool instead of ba", + "doc_type":"", + "kw":"Why Does a Function Use More Memory Than Estimated and Even Trigger the Out of Memory Alarm?,Functio", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Why Does a Function Use More Memory Than Estimated and Even Trigger the Out of Memory Alarm?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0869.html", + "node_id":"functiongraph_03_0869.xml", + "product_code":"", + "code":"151", + "des":"Check the used memory in the response.", + "doc_type":"", + "kw":"How Do I Check the Memory Usage When Seeing \"runtime memory limit exceeded\"?,Function Execution FAQs", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I Check the Memory Usage When Seeing \"runtime memory limit exceeded\"?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0870.html", + "node_id":"functiongraph_03_0870.xml", + "product_code":"", + "code":"152", + "des":"The message \"CrashLoopBackOff: The application inside the container keeps crashing\" is displayed when a custom image execution failure occurs. In this case, perform the f", + "doc_type":"", + "kw":"How Do I Troubleshoot \"CrashLoopBackOff\"?,Function Execution FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I Troubleshoot \"CrashLoopBackOff\"?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0875.html", + "node_id":"functiongraph_03_0875.xml", + "product_code":"", + "code":"153", + "des":"Use a non-latest tag to manage image updates, and do not use the same image name.", + "doc_type":"", + "kw":"After I Updated an Image with the Same Name, Reserved Instances Still Use the Old Image. What Can I ", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"After I Updated an Image with the Same Name, Reserved Instances Still Use the Old Image. What Can I Do?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0351.html", + "node_id":"functiongraph_03_0351.xml", + "product_code":"functiongraph", + "code":"154", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"Function Configuration FAQs", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"Function Configuration FAQs", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0220.html", + "node_id":"functiongraph_03_0220.xml", + "product_code":"functiongraph", + "code":"155", + "des":"Yes. Set variables to dynamically pass settings to your function code and libraries without changing your code. For more information, see section \"Configuring Environment", + "doc_type":"usermanual", + "kw":"Can I Set Environment Variables When Creating Functions?,Function Configuration FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"Can I Set Environment Variables When Creating Functions?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0230.html", + "node_id":"functiongraph_03_0230.xml", + "product_code":"functiongraph", + "code":"156", + "des":"FunctionGraph displays all the information you enter in plain text. Therefore, do not enter insensitive information such as passwords when you define environment variable", + "doc_type":"usermanual", + "kw":"Can I Enter Sensitive Information in Environment Variables?,Function Configuration FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "documenttype":"usermanual", + "prodname":"functiongraph" + } + ], + "title":"Can I Enter Sensitive Information in Environment Variables?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0836.html", + "node_id":"functiongraph_03_0836.xml", + "product_code":"", + "code":"157", + "des":"See section \"Watermarking Images\".", + "doc_type":"", + "kw":"How Can I Watermark Images?,Function Configuration FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Can I Watermark Images?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0355.html", + "node_id":"functiongraph_03_0355.xml", + "product_code":"functiongraph", + "code":"158", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"usermanual", + "kw":"External Resource Access FAQs", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"External Resource Access FAQs", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0130.html", + "node_id":"functiongraph_03_0130.xml", + "product_code":"functiongraph", + "code":"159", + "des":"Perform the following operations:Check whether the MySQL database is deployed in a VPC.Yes: Configure the same VPC and subnet as the MySQL database for the function by re", + "doc_type":"usermanual", + "kw":"How Does a Function Access the MySQL Database?,External Resource Access FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"How Does a Function Access the MySQL Database?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0300.html", + "node_id":"functiongraph_03_0300.xml", + "product_code":"functiongraph", + "code":"160", + "des":"Perform the following operations:Check whether the Redis instance is deployed in a VPC.If the Redis instance is deployed in a VPC, configure the same VPC and subnet as th", + "doc_type":"usermanual", + "kw":"How Does a Function Access Redis?,External Resource Access FAQs,User Guide", + "search_title":"", + "metedata":[ + { + "prodname":"functiongraph", + "documenttype":"usermanual" + } + ], + "title":"How Does a Function Access Redis?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0834.html", + "node_id":"functiongraph_03_0834.xml", + "product_code":"", + "code":"161", + "des":"By default, functions deployed in a VPC are isolated from the Internet. If a function needs to access both internal and external networks, add a NAT gateway for the VPC.P", + "doc_type":"", + "kw":"How Do I Configure External Network Access?,External Resource Access FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I Configure External Network Access?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0824.html", + "node_id":"functiongraph_03_0824.xml", + "product_code":"", + "code":"162", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"", + "kw":"Other FAQs", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Other FAQs", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0825.html", + "node_id":"functiongraph_03_0825.xml", + "product_code":"", + "code":"163", + "des":"Log in to the Cloud Eye console and view alarm rules.", + "doc_type":"", + "kw":"How Do I View the Alarm Rules Configured for a Function?,Other FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"How Do I View the Alarm Rules Configured for a Function?", + "githuburl":"" + }, + { + "uri":"functiongraph_03_0827.html", + "node_id":"functiongraph_03_0827.xml", + "product_code":"", + "code":"164", + "des":"No. Please decompile your files before uploading them.", + "doc_type":"", + "kw":"Does FunctionGraph Support ZIP Decompiling During Video Transcoding?,Other FAQs,User Guide", + "search_title":"", + "metedata":[ + { + + } + ], + "title":"Does FunctionGraph Support ZIP Decompiling During Video Transcoding?", + "githuburl":"" + } +] \ No newline at end of file diff --git a/docs/fg/umn/CLASS.TXT.json b/docs/fg/umn/CLASS.TXT.json new file mode 100644 index 00000000..9589174e --- /dev/null +++ b/docs/fg/umn/CLASS.TXT.json @@ -0,0 +1,1478 @@ +[ + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Service Overview", + "uri":"en-us_topic_0000001540362886.html", + "doc_type":"usermanual", + "p_code":"", + "code":"1" + }, + { + "desc":"FunctionGraph hosts and computes event-driven functions in a serverless context while ensuring high availability, high scalability, and zero maintenance. All you need to ", + "product_code":"functiongraph", + "title":"What Is FunctionGraph?", + "uri":"functiongraph_01_0100_0.html", + "doc_type":"usermanual", + "p_code":"1", + "code":"2" + }, + { + "desc":"FunctionGraph provides console-based function management.The Node.js, Java, Python, Go, and custom runtimes are supported. Table 1 provides the details.You are advised to", + "product_code":"functiongraph", + "title":"Product Features", + "uri":"functiongraph_01_0200_0.html", + "doc_type":"usermanual", + "p_code":"1", + "code":"3" + }, + { + "desc":"FunctionGraph automatically runs your code and frees you from provisioning and managing servers, allowing you to focus on business innovation.FunctionGraph automatically ", + "product_code":"functiongraph", + "title":"Product Advantages", + "uri":"functiongraph_01_0180_0.html", + "doc_type":"usermanual", + "p_code":"1", + "code":"4" + }, + { + "desc":"FunctionGraph is suitable for various scenarios, such as real-time file processing, real-time data stream processing, web & mobile application backends, and AI applicatio", + "product_code":"functiongraph", + "title":"Application Scenarios", + "uri":"functiongraph_01_0140_0.html", + "doc_type":"usermanual", + "p_code":"1", + "code":"5" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Function Types", + "uri":"functiongraph_02_1000.html", + "doc_type":"usermanual", + "p_code":"1", + "code":"6" + }, + { + "desc":"FunctionGraph supports event functions. An event can trigger function execution. Generally, it is in JSON format. You can create an event to trigger your function through", + "product_code":"functiongraph", + "title":"Event Functions", + "uri":"functiongraph_02_1001.html", + "doc_type":"usermanual", + "p_code":"6", + "code":"7" + }, + { + "desc":"FunctionGraph supports event functions and HTTP functions. HTTP functions are designed to optimize web services. You can send HTTP requests to URLs to trigger function ex", + "product_code":"functiongraph", + "title":"HTTP Functions", + "uri":"functiongraph_02_1002.html", + "doc_type":"usermanual", + "p_code":"6", + "code":"8" + }, + { + "desc":"Valid payload size of invocation response body (synchronous invocation): The returned character string or the JSON character string of the serialized response body is les", + "product_code":"functiongraph", + "title":"Notes and Constraints", + "uri":"functiongraph_01_0150.html", + "doc_type":"usermanual", + "p_code":"1", + "code":"9" + }, + { + "desc":"If you need to assign different permissions to employees in your enterprise to access your FunctionGraph resources, IAM is a good choice for fine-grained permissions mana", + "product_code":"functiongraph", + "title":"Permissions Management", + "uri":"functiongraph_01_0160_0.html", + "doc_type":"usermanual", + "p_code":"1", + "code":"10" + }, + { + "desc":"Functions are code defined to handle events.An event source is a public cloud service or custom application that publishes events.Clients wait for explicit responses to t", + "product_code":"functiongraph", + "title":"Concepts", + "uri":"functiongraph_02_1005.html", + "doc_type":"usermanual", + "p_code":"1", + "code":"11" + }, + { + "desc":"Table 1 describes the cloud services that have been interconnected with FunctionGraph.", + "product_code":"functiongraph", + "title":"Relationships Between FunctionGraph and Other Services", + "uri":"functiongraph_01_0130_0.html", + "doc_type":"usermanual", + "p_code":"1", + "code":"12" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Getting Started", + "uri":"functiongraph_01_0505.html", + "doc_type":"usermanual", + "p_code":"", + "code":"13" + }, + { + "desc":"FunctionGraph allows you to run your code without provisioning or managing servers, while ensuring high availability and scalability. All you need to do is upload your co", + "product_code":"functiongraph", + "title":"Introduction", + "uri":"functiongraph_04_0100.html", + "doc_type":"usermanual", + "p_code":"13", + "code":"14" + }, + { + "desc":"This section describes how to quickly create and test a HelloWorld function on the FunctionGraph console.To perform the operations described in this section, ensure that ", + "product_code":"functiongraph", + "title":"Creating a Function from Scratch", + "uri":"functiongraph_04_0101.html", + "doc_type":"usermanual", + "p_code":"13", + "code":"15" + }, + { + "desc":"FunctionGraph provides templates to automatically complete code and running environment configurations when you create a function, helping you quickly build applications.", + "product_code":"functiongraph", + "title":"Creating a Function Using a Template", + "uri":"functiongraph_04_0102.html", + "doc_type":"usermanual", + "p_code":"13", + "code":"16" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Deploying a Function Using a Container Image", + "uri":"functiongraph_04_0105.html", + "doc_type":"usermanual", + "p_code":"13", + "code":"17" + }, + { + "desc":"When developing an HTTP function using a custom image, implement an HTTP server in the image and listen on port 8000 for requests. (Do not change port 8000 in the example", + "product_code":"functiongraph", + "title":"Developing an HTTP Function", + "uri":"functiongraph_04_0103.html", + "doc_type":"usermanual", + "p_code":"17", + "code":"18" + }, + { + "desc":"When developing an event function using a custom image, implement an HTTP server in the image and listen on port 8000 for requests. By default, the request path /init is ", + "product_code":"functiongraph", + "title":"Developing an Event Function", + "uri":"functiongraph_04_0104.html", + "doc_type":"usermanual", + "p_code":"17", + "code":"19" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Before You Start", + "uri":"functiongraph_01_0100.html", + "doc_type":"usermanual", + "p_code":"", + "code":"20" + }, + { + "desc":"FunctionGraph allows you to run your code without provisioning or managing servers, while ensuring high availability and scalability. All you need to do is upload your co", + "product_code":"functiongraph", + "title":"Use of FunctionGraph", + "uri":"functiongraph_01_0110.html", + "doc_type":"usermanual", + "p_code":"20", + "code":"21" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Permissions Management", + "uri":"functiongraph_01_0140.html", + "doc_type":"usermanual", + "p_code":"20", + "code":"22" + }, + { + "desc":"This section describes how to use Identity and Access Management (IAM) to implement fine-grained permissions control for your FunctionGraph resources. With IAM, you can:C", + "product_code":"functiongraph", + "title":"Creating a User and Granting Permissions", + "uri":"functiongraph_01_0141.html", + "doc_type":"usermanual", + "p_code":"22", + "code":"23" + }, + { + "desc":"Custom policies can be created as a supplement to the system policies of FunctionGraph.You can create custom policies in either of the following ways:Visual editor: Selec", + "product_code":"functiongraph", + "title":"Creating a Custom Policy", + "uri":"functiongraph_01_0215.html", + "doc_type":"usermanual", + "p_code":"22", + "code":"24" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Supported Programming Languages", + "uri":"functiongraph_01_0151.html", + "doc_type":"usermanual", + "p_code":"20", + "code":"25" + }, + { + "desc":"√: Supported. ×: Not supported.", + "product_code":"functiongraph", + "title":"Node.js", + "uri":"functiongraph_01_1822.html", + "doc_type":"usermanual", + "p_code":"25", + "code":"26" + }, + { + "desc":"√: Supported. ×: Not supported.", + "product_code":"functiongraph", + "title":"Python", + "uri":"functiongraph_01_1823.html", + "doc_type":"usermanual", + "p_code":"25", + "code":"27" + }, + { + "desc":"√: Supported. ×: Not supported.", + "product_code":"functiongraph", + "title":"Java", + "uri":"functiongraph_01_1824.html", + "doc_type":"usermanual", + "p_code":"25", + "code":"28" + }, + { + "desc":"√: Supported. ×: Not supported.", + "product_code":"functiongraph", + "title":"Go", + "uri":"functiongraph_01_1825.html", + "doc_type":"usermanual", + "p_code":"25", + "code":"29" + }, + { + "desc":"A runtime runs the code of a function, reads the handler name from an environment variable, and reads invocation events from the runtime APIs of FunctionGraph. The runtim", + "product_code":"functiongraph", + "title":"Custom Runtime", + "uri":"functiongraph_01_0406.html", + "doc_type":"usermanual", + "p_code":"25", + "code":"30" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Building Functions", + "uri":"functiongraph_01_0150_0.html", + "doc_type":"usermanual", + "p_code":"", + "code":"31" + }, + { + "desc":"To create a function, you must create a deployment package which includes your code and all dependencies. You can create a deployment package locally or edit code on the ", + "product_code":"functiongraph", + "title":"Creating a Deployment Package", + "uri":"functiongraph_01_0152.html", + "doc_type":"usermanual", + "p_code":"31", + "code":"32" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Creating a Function from Scratch", + "uri":"functiongraph_01_0153.html", + "doc_type":"usermanual", + "p_code":"31", + "code":"33" + }, + { + "desc":"A function is customized code for processing events. You can create a function from scratch and configure the function based on site requirements.FunctionGraph manages th", + "product_code":"functiongraph", + "title":"Creating an Event Function", + "uri":"functiongraph_01_1441.html", + "doc_type":"usermanual", + "p_code":"33", + "code":"34" + }, + { + "desc":"HTTP functions are designed to optimize web services. You can send HTTP requests to URLs to trigger function execution. HTTP functions support APIG triggers only.HTTP fun", + "product_code":"functiongraph", + "title":"Creating an HTTP Function", + "uri":"functiongraph_01_1442.html", + "doc_type":"usermanual", + "p_code":"33", + "code":"35" + }, + { + "desc":"FunctionGraph provides templates to automatically complete code, and running environment configurations when you create a function, helping you quickly build applications", + "product_code":"functiongraph", + "title":"Creating a Function Using a Template", + "uri":"functiongraph_01_0401.html", + "doc_type":"usermanual", + "p_code":"31", + "code":"36" + }, + { + "desc":"Package your container images complying with the Open Container Initiative (OCI) standard, and upload them to FunctionGraph. The images will be loaded and run by Function", + "product_code":"functiongraph", + "title":"Deploying a Function Using a Container Image", + "uri":"functiongraph_01_1047.html", + "doc_type":"usermanual", + "p_code":"31", + "code":"37" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Configuring Functions", + "uri":"functiongraph_01_0300.html", + "doc_type":"usermanual", + "p_code":"", + "code":"38" + }, + { + "desc":"The initializer of a function is executed after an instance is started. The instance starts to process requests only after the initializer is executed. The initializer is", + "product_code":"functiongraph", + "title":"Configuring Initialization", + "uri":"functiongraph_01_0201.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"39" + }, + { + "desc":"After a function is created, Memory (MB), Handler, and Execution Timeout (s) are automatically set based on your runtime. If needed, modify them based on this section.You", + "product_code":"functiongraph", + "title":"Configuring Basic Settings", + "uri":"functiongraph_01_1828.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"40" + }, + { + "desc":"FunctionGraph works with other cloud services in most scenarios. Create a cloud service agency so that FunctionGraph can perform resource O&M in other cloud services on y", + "product_code":"functiongraph", + "title":"Configuring Agency Permissions", + "uri":"functiongraph_01_0920.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"41" + }, + { + "desc":"By default, functions can access services on public networks. If the target public network service requires whitelist verification using a fixed IP address, enable VPC ac", + "product_code":"functiongraph", + "title":"Configuring the Network", + "uri":"functiongraph_01_0222.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"42" + }, + { + "desc":"FunctionGraph allows you to mount file systems to your functions. Multiple functions can share the same file system. This greatly expands the function execution and stora", + "product_code":"functiongraph", + "title":"Configuring Disk Mounting", + "uri":"functiongraph_01_0402.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"43" + }, + { + "desc":"Environment variables allow you to pass dynamic parameters to a function without modifying code.Environment distinguishing: Configure different environment variables for ", + "product_code":"functiongraph", + "title":"Configuring Environment Variables", + "uri":"functiongraph_01_0154.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"44" + }, + { + "desc":"Functions can be invoked synchronously or asynchronously. In asynchronous mode, FunctionGraph sends a response immediately after persisting a request. The request result ", + "product_code":"functiongraph", + "title":"Configuring Asynchronous Execution Notification", + "uri":"functiongraph_01_0390_03.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"45" + }, + { + "desc":"By default, each function instance processes only one request at a specific time. For example, to process three concurrent requests, FunctionGraph triggers three function", + "product_code":"functiongraph", + "title":"Configuring Single-Instance Multi-Concurrency", + "uri":"functiongraph_01_0303.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"46" + }, + { + "desc":"FunctionGraph allows you to publish one or more versions throughout the development, test, and production processes to manage your function code. The code and environment", + "product_code":"functiongraph", + "title":"Managing Versions", + "uri":"functiongraph_01_0180.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"47" + }, + { + "desc":"An alias points to a specific function version. Create an alias and expose it to clients, for example, bind a trigger to the alias instead of the corresponding version. T", + "product_code":"functiongraph", + "title":"Managing Aliases", + "uri":"functiongraph_01_1829.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"48" + }, + { + "desc":"By default, a function is bound with only one resource specification. After enabling dynamic memory, you can configure a specification for request processing. If no speci", + "product_code":"functiongraph", + "title":"Configuring Dynamic Memory", + "uri":"functiongraph_01_0310.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"49" + }, + { + "desc":"Tags help you identify your cloud resources. When you have many cloud resources of the same type, you can use tags to classify them by dimension (for example, use, owner,", + "product_code":"functiongraph", + "title":"Configuring Tags", + "uri":"functiongraph_01_1839.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"50" + }, + { + "desc":"This feature is supported only by FunctionGraph V2.You can bind a log group and log stream to a function to store its invocation logs. By default, the logs are stored in ", + "product_code":"functiongraph", + "title":"Configuring a Log Group and Log Stream", + "uri":"functiongraph_01_1841.html", + "doc_type":"usermanual", + "p_code":"38", + "code":"51" + }, + { + "desc":"Event data is passed to the handler of your function as an input. After configuration, event data is persisted for later use. Each function can have a maximum of 10 test ", + "product_code":"functiongraph", + "title":"Online Debugging", + "uri":"functiongraph_01_0302.html", + "doc_type":"usermanual", + "p_code":"", + "code":"52" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Creating Triggers", + "uri":"functiongraph_01_0200.html", + "doc_type":"usermanual", + "p_code":"", + "code":"53" + }, + { + "desc":"You can enable or disable triggers as required. Note that OBS and APIG triggers cannot be disabled and can only be deleted.You can delete triggers that will no longer be ", + "product_code":"functiongraph", + "title":"Managing Triggers", + "uri":"functiongraph_01_0301.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"54" + }, + { + "desc":"This section describes how to create a timer trigger to invoke your function based on a fixed rate or cron expression.", + "product_code":"functiongraph", + "title":"Using a Timer Trigger", + "uri":"functiongraph_01_0207.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"55" + }, + { + "desc":"This section describes how to create an APIG trigger and call an API to trigger a function.", + "product_code":"functiongraph", + "title":"Using an APIG (Dedicated) Trigger", + "uri":"functiongraph_01_0204.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"56" + }, + { + "desc":"This section describes how to create an OBS trigger and upload an image package to a specified OBS bucket to trigger a function.", + "product_code":"functiongraph", + "title":"Using an OBS Trigger", + "uri":"functiongraph_01_0205.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"57" + }, + { + "desc":"This section describes how to create a Kafka trigger and configure a Kafka event to trigger a function.After a Kafka trigger is used, FunctionGraph periodically polls for", + "product_code":"functiongraph", + "title":"Using a Kafka Trigger", + "uri":"functiongraph_01_0214.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"58" + }, + { + "desc":"This section describes how to create a DIS trigger for a function, and configure a DIS event by using the built-in event template to trigger the function.", + "product_code":"functiongraph", + "title":"Using a DIS Trigger", + "uri":"functiongraph_01_0206.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"59" + }, + { + "desc":"This section describes how to create an SMN trigger and publish a message to trigger a function.For details about the SMN event source, see section \"Supported Event Sourc", + "product_code":"functiongraph", + "title":"Using an SMN Trigger", + "uri":"functiongraph_01_0202.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"60" + }, + { + "desc":"This section describes how to create an LTS trigger for a function, and invoke the function when log events occur.", + "product_code":"functiongraph", + "title":"Using an LTS Trigger", + "uri":"functiongraph_01_0208.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"61" + }, + { + "desc":"This section describes how to create a CTS trigger for a function, and invoke the function in response to cloud resource operations recorded by CTS.", + "product_code":"functiongraph", + "title":"Using a CTS Trigger", + "uri":"functiongraph_01_0209.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"62" + }, + { + "desc":"This section describes how to create a DDS trigger for a function, and invoke the function when a database table changes.A function using a DDS trigger will be triggered ", + "product_code":"functiongraph", + "title":"Using a DDS Trigger", + "uri":"functiongraph_01_0210.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"63" + }, + { + "desc":"This section describes how to create an open-source Kafka trigger and configure an event to trigger a function.If you use an open-source Kafka trigger for a function, Fun", + "product_code":"functiongraph", + "title":"Using an Open-Source Kafka Trigger", + "uri":"functiongraph_01_1838.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"64" + }, + { + "desc":"You can configure a cron expression in the following formats for a function timer trigger:@every formatThe format is \"@every N unit\". N is a positive integer. unit can be", + "product_code":"functiongraph", + "title":"Cron Expressions for a Function Timer Trigger", + "uri":"functiongraph_01_0908.html", + "doc_type":"usermanual", + "p_code":"53", + "code":"65" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Invoking the Function", + "uri":"functiongraph_01_0160.html", + "doc_type":"usermanual", + "p_code":"", + "code":"66" + }, + { + "desc":"When triggering a function, clients wait for the result before proceeding. Currently, functions with APIG (dedicated) triggers are executed synchronously. Alternatively, ", + "product_code":"functiongraph", + "title":"Synchronous Invocation", + "uri":"functiongraph_01_1061.html", + "doc_type":"usermanual", + "p_code":"66", + "code":"67" + }, + { + "desc":"When a client triggers a function, FunctionGraph persists the request and sends a response immediately to the client. The client proceeds without waiting for the executio", + "product_code":"functiongraph", + "title":"Asynchronous Invocation", + "uri":"functiongraph_01_1062.html", + "doc_type":"usermanual", + "p_code":"66", + "code":"68" + }, + { + "desc":"If synchronous or asynchronous invocation fails, do as follows:Synchronous invocationTry again.Try again.Asynchronous invocationYou can set the maximum number of retries ", + "product_code":"functiongraph", + "title":"Retry Mechanism", + "uri":"functiongraph_01_1814.html", + "doc_type":"usermanual", + "p_code":"66", + "code":"69" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Monitoring", + "uri":"functiongraph_01_0390_01.html", + "doc_type":"usermanual", + "p_code":"", + "code":"70" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Metrics", + "uri":"functiongraph_01_0211.html", + "doc_type":"usermanual", + "p_code":"70", + "code":"71" + }, + { + "desc":"FunctionGraph is interconnected with Cloud Eye, allowing you to view function metrics without the need for any configurations.FunctionGraph collects function metrics and ", + "product_code":"functiongraph", + "title":"Function Monitoring", + "uri":"functiongraph_01_0212.html", + "doc_type":"usermanual", + "p_code":"71", + "code":"72" + }, + { + "desc":"This section describes the FunctionGraph namespaces, function metrics, and dimensions reported to Cloud Eye. You can view function metrics and alarms by using the Cloud E", + "product_code":"functiongraph", + "title":"Function Metrics", + "uri":"functiongraph_01_0213.html", + "doc_type":"usermanual", + "p_code":"71", + "code":"73" + }, + { + "desc":"After creating a function and trigger, you can monitor the invocation and running statuses of the function in real time.FunctionGraph differentiates the metrics of a func", + "product_code":"functiongraph", + "title":"Creating an Alarm Rule", + "uri":"functiongraph_01_0304.html", + "doc_type":"usermanual", + "p_code":"71", + "code":"74" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Logs", + "uri":"functiongraph_01_1833.html", + "doc_type":"usermanual", + "p_code":"70", + "code":"75" + }, + { + "desc":"FunctionGraph is interconnected with LTS, allowing you to view function logs without the need for any configurations.On the FunctionGraph console, view function logs in t", + "product_code":"functiongraph", + "title":"Querying Function Logs", + "uri":"functiongraph_01_0170.html", + "doc_type":"usermanual", + "p_code":"75", + "code":"76" + }, + { + "desc":"You can enable LTS to better manage function logs. After you enable LTS, FunctionGraph automatically creates a log group starting with functiongraph. When you create a fu", + "product_code":"functiongraph", + "title":"Managing Function Logs", + "uri":"functiongraph_01_1834.html", + "doc_type":"usermanual", + "p_code":"75", + "code":"77" + }, + { + "desc":"Function is a combination of code, runtime, resources, and settings required to achieve a specific purpose. It is the minimum unit that can run independently. A function ", + "product_code":"functiongraph", + "title":"Function Management", + "uri":"functiongraph_01_0320.html", + "doc_type":"usermanual", + "p_code":"", + "code":"78" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Dependency Management", + "uri":"functiongraph_01_0391.html", + "doc_type":"usermanual", + "p_code":"", + "code":"79" + }, + { + "desc":"Generally, the code of a function consists of public libraries and service logic. The public libraries can be packaged as a dependency and shared among functions, reducin", + "product_code":"functiongraph", + "title":"Configuring Dependency Packages", + "uri":"functiongraph_01_2119.html", + "doc_type":"usermanual", + "p_code":"79", + "code":"80" + }, + { + "desc":"Supported Dependent LibrariesFunctionGraph supports both standard and third-party libraries.Standard librariesWhen using standard libraries, you can import them to your i", + "product_code":"functiongraph", + "title":"Dependent Libraries", + "uri":"functiongraph_01_2102.html", + "doc_type":"usermanual", + "p_code":"79", + "code":"81" + }, + { + "desc":"FunctionGraph provides on-demand and reserved instances.On-demand instances are created and released by FunctionGraph based on actual function usage. When receiving reque", + "product_code":"functiongraph", + "title":"Reserved Instance Management", + "uri":"functiongraph_01_1837.html", + "doc_type":"usermanual", + "p_code":"", + "code":"82" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"FAQs", + "uri":"functiongraph_01_0503.html", + "doc_type":"usermanual", + "p_code":"", + "code":"83" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"General FAQs", + "uri":"functiongraph_03_0110_00.html", + "doc_type":"usermanual", + "p_code":"83", + "code":"84" + }, + { + "desc":"FunctionGraph allows you to run you code without provisioning or managing servers, while ensuring high availability and scalability. All you need to do is upload your cod", + "product_code":"functiongraph", + "title":"What Is FunctionGraph?", + "uri":"functiongraph_03_0110.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"85" + }, + { + "desc":"When using FunctionGraph, you do not need to apply for or pre-configure any computing, storage, or network services, but need to upload and run code in supported runtimes", + "product_code":"functiongraph", + "title":"Do I Need to Apply for Any Compute, Storage, or Network Services When Using FunctionGraph?", + "uri":"functiongraph_03_0120.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"86" + }, + { + "desc":"After programming, you only need to package your code into a ZIP file (Java, Node.js, Python, and Go) or JAR file (Java), and upload the file to FunctionGraph for executi", + "product_code":"functiongraph", + "title":"Do I Need to Deploy My Code After Programming?", + "uri":"functiongraph_03_0160.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"87" + }, + { + "desc":"Table 1 lists the runtimes supported by FunctionGraph.", + "product_code":"functiongraph", + "title":"What Runtimes Does FunctionGraph Support?", + "uri":"functiongraph_03_0260.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"88" + }, + { + "desc":"Each FunctionGraph function is allocated 512 MB ephemeral disk space. You can upload deployment packages up to 10 GB in size. For more information, see section \"Notes and", + "product_code":"functiongraph", + "title":"How Much Disk Space Is Allocated to Each FunctionGraph Function?", + "uri":"functiongraph_03_0170.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"89" + }, + { + "desc":"Yes. For details, see section \"Managing Versions\".", + "product_code":"functiongraph", + "title":"Does FunctionGraph Support Function Versioning?", + "uri":"functiongraph_03_0240.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"90" + }, + { + "desc":"A function can read files in the code directory. The working directory of a function is the upper-level directory of the handler file. Assume that you have uploaded a fol", + "product_code":"functiongraph", + "title":"How Does a Function Read or Write Files?", + "uri":"functiongraph_03_0330.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"91" + }, + { + "desc":"FunctionGraph has integrated non-standard libraries such as redis, http, and obs_client. You can directly use these libraries when developing functions.Alternatively, use", + "product_code":"functiongraph", + "title":"Does FunctionGraph Support Function Extension?", + "uri":"functiongraph_03_0341.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"92" + }, + { + "desc":"If you are prompted insufficient permissions when creating, deleting, modifying, or querying functions and triggers in FunctionGraph as an IAM user, contact the administr", + "product_code":"functiongraph", + "title":"Which Permissions Are Required for an IAM User to Use FunctionGraph?", + "uri":"functiongraph_03_0342.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"93" + }, + { + "desc":"For OS-dependent packages (for example, unixODBC), download the source code to compile dependency packages.Log in to your ECS on the ECS console (ensure that the GCC and ", + "product_code":"functiongraph", + "title":"How Can I Create an ODBC Drive-based Python Dependency Package for Database Query?", + "uri":"functiongraph_03_0830.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"94" + }, + { + "desc":"For details about the resource quota of FunctionGraph, see section \"Notes and Constraints\".", + "product_code":"functiongraph", + "title":"What Is the Quota of FunctionGraph?", + "uri":"functiongraph_03_0352.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"95" + }, + { + "desc":"FunctionGraph functions created with a container image cannot directly parse private Domain Name Service (DNS) domain names. However, you can call DNS APIs to achieve thi", + "product_code":"functiongraph", + "title":"How Does a Container Image–based Function Resolve a Private DNS Domain Name?", + "uri":"functiongraph_03_0872.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"96" + }, + { + "desc":"The domain name www.test.com is used as an example. The procedure is as follows:", + "product_code":"functiongraph", + "title":"How Do I Use a Domain Name to Access an API Registered with API Gateway (Dedicated)?", + "uri":"functiongraph_03_0840.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"97" + }, + { + "desc":"Web applications: mini programs, web pages/apps, chatbots, and Backends for Frontends (BFF).Event-driven applications: file processing, image processing, live video strea", + "product_code":"functiongraph", + "title":"What Are the Common Application Scenarios of FunctionGraph?", + "uri":"functiongraph_03_0817.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"98" + }, + { + "desc":"Currently, FunctionGraph resolves only DNS domain names and POD domain names.", + "product_code":"functiongraph", + "title":"Why Can't the API Gateway Domain Name Bound to a Service Be Resolved During Function Invocation?", + "uri":"functiongraph_03_0826.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"99" + }, + { + "desc":"Not currently.", + "product_code":"functiongraph", + "title":"Does FunctionGraph Support Synchronous Transmission at the Maximum Intranet Bandwidth?", + "uri":"functiongraph_03_0828.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"100" + }, + { + "desc":"A tenant can create up to 4 VPCs. To create more VPCs, submit a service ticket.", + "product_code":"functiongraph", + "title":"What If the VPC Quota Is Used Up?", + "uri":"functiongraph_03_0832.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"101" + }, + { + "desc":"Take Java as an example. You can use this demo to print logs.", + "product_code":"functiongraph", + "title":"How Can I Print Info, Error, or Warn Logs?", + "uri":"functiongraph_03_0833.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"102" + }, + { + "desc":"Yes. The procedure is as follows:", + "product_code":"functiongraph", + "title":"Can I Set the Domain Name of an API to My Own Domain Name?", + "uri":"functiongraph_03_0841.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"103" + }, + { + "desc":"No. Once a function is created, its runtime cannot be changed.", + "product_code":"functiongraph", + "title":"Can I Change the Runtime?", + "uri":"functiongraph_03_0842.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"104" + }, + { + "desc":"No. A function's name cannot be changed once the function is created.", + "product_code":"functiongraph", + "title":"Can I Change a Function's Name?", + "uri":"functiongraph_03_0858.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"105" + }, + { + "desc":"When you see this message, mount the file to a new path.User ID/user group ID: Can be any number except 1000. The value –1 will be automatically converted to 1003. The tw", + "product_code":"functiongraph", + "title":"Why Is Message \"failed to mount exist system path\" Displayed?", + "uri":"functiongraph_03_0843.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"106" + }, + { + "desc":"Take Python as an example. If you use os.getcwd() to query the current directory, the directory will be /opt/function. However, code has actually been uploaded to /opt/fu", + "product_code":"functiongraph", + "title":"How Do I Obtain Uploaded Files?", + "uri":"functiongraph_03_0846.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"107" + }, + { + "desc":"If the E2E function execution latency exceeds 90s, asynchronous invocation is recommended. If synchronous invocation is used, no responses can be received after 90s due t", + "product_code":"functiongraph", + "title":"Why Can't I Receive Responses for Synchronous Invocation?", + "uri":"functiongraph_03_0848.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"108" + }, + { + "desc":"Do not use os.system(\"command &\"). The background command output will not be collected. To obtain the command output, use subprocess.Popen instead.", + "product_code":"functiongraph", + "title":"What Should I Do If the os.system(\"command &\") Execution Logs Are Not Collected?", + "uri":"functiongraph_03_0849.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"109" + }, + { + "desc":"By default, only the /tmp directory can be accessed, for example, for creating or downloading files.", + "product_code":"functiongraph", + "title":"Which Directories Can Be Accessed When a Custom Runtime Is Used?", + "uri":"functiongraph_03_0855.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"110" + }, + { + "desc":"3.6.8 and 3.9.2.", + "product_code":"functiongraph", + "title":"Which Minor Versions of Python 3.6 and 3.9 Are Supported?", + "uri":"functiongraph_03_0856.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"111" + }, + { + "desc":"The actions listed in Table 1 can be used.", + "product_code":"functiongraph", + "title":"Which Actions Can Be Used Instead of a VPC Administrator Agency for VPC Access?", + "uri":"functiongraph_03_0857.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"112" + }, + { + "desc":"The code logic timed out. In this case, optimize the code or increase the timeout.The network timed out. To fix this issue, increase the timeout.It took a long time to lo", + "product_code":"functiongraph", + "title":"What Are the Possible Causes for Function Timeout?", + "uri":"functiongraph_03_0859.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"113" + }, + { + "desc":"Log in to the FunctionGraph console, and click the name of the target function to go to the details page. Choose Operation > Export function in the upper right, and click", + "product_code":"functiongraph", + "title":"How Do I Obtain the Code of a Function?", + "uri":"functiongraph_03_0871.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"114" + }, + { + "desc":"Yes. See the following examples:Node.jsexports.initializer = function(context, callback) {\n callback(null, '');\n };Pythondef my_initializer(context):\n print(\"hel", + "product_code":"functiongraph", + "title":"Do You Have Sample Code for Initializers?", + "uri":"functiongraph_03_0882.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"115" + }, + { + "desc":"To check the status of asynchronous invocation requests, view the records by choosing Configuration > Configure Async Notification on the function details page, as shown ", + "product_code":"functiongraph", + "title":"How Do I Enable Structured Log Query?", + "uri":"functiongraph_03_0884.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"116" + }, + { + "desc":"No. FunctionGraph does not support this feature currently. Functions are about serverless computing, and compute resources are allocated while functions are running. Cust", + "product_code":"functiongraph", + "title":"Can I Enable a Listening Port in a Function to Receive External TCP Requests via EIP?", + "uri":"functiongraph_03_0771.html", + "doc_type":"usermanual", + "p_code":"84", + "code":"117" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Function Creation FAQs", + "uri":"functiongraph_03_0344.html", + "doc_type":"usermanual", + "p_code":"83", + "code":"118" + }, + { + "desc":"You can create additional threads and processes in your function by using runtime and OS features.", + "product_code":"functiongraph", + "title":"Can I Add Threads and Processes in Function Code?", + "uri":"functiongraph_03_0190.html", + "doc_type":"usermanual", + "p_code":"118", + "code":"119" + }, + { + "desc":"In addition to inline code editing, you can create a function by uploading a ZIP or JAR file, or uploading a ZIP file from OBS. For details, see Packaging Rules and Examp", + "product_code":"functiongraph", + "title":"What Are the Rules for Packaging a Function Project?", + "uri":"functiongraph_03_0280.html", + "doc_type":"usermanual", + "p_code":"118", + "code":"120" + }, + { + "desc":"Each FunctionGraph function runs in its own environment and has its own resources and file system.", + "product_code":"functiongraph", + "title":"How Does FunctionGraph Isolate Code?", + "uri":"functiongraph_03_0270.html", + "doc_type":"usermanual", + "p_code":"118", + "code":"121" + }, + { + "desc":"To create an HTTP function, create a bootstrap file. For details, see section \"Creating a Bootstrap File\".", + "product_code":"functiongraph", + "title":"How Do I Create the Bootstrap File for an HTTP Function?", + "uri":"functiongraph_03_0837.html", + "doc_type":"usermanual", + "p_code":"118", + "code":"122" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Trigger Management FAQs", + "uri":"functiongraph_03_0100.html", + "doc_type":"usermanual", + "p_code":"83", + "code":"123" + }, + { + "desc":"Ensure that the function response for an invocation by API Gateway has been encapsulated and contains body(String), statusCode(int), headers(Map), and isBase64Encoded(boo", + "product_code":"functiongraph", + "title":"What If Error Code 500 Is Reported When Functions that Use APIG Triggers Return Strings?", + "uri":"functiongraph_03_0290.html", + "doc_type":"usermanual", + "p_code":"123", + "code":"124" + }, + { + "desc":"Cursors LATEST and TRIM_HORIZON specify the start points for reading data in Data Ingestion Service (DIS) streams.TRIM_HORIZON: Data is read from the earliest valid recor", + "product_code":"functiongraph", + "title":"What Do LATEST and TRIM_HORIZON Mean in DIS Trigger Configuration?", + "uri":"functiongraph_03_0320.html", + "doc_type":"usermanual", + "p_code":"123", + "code":"125" + }, + { + "desc":"OBS does not support pull triggers. Therefore, OBS triggers cannot be enabled or disabled.", + "product_code":"functiongraph", + "title":"Why Can't I Enable or Disable OBS Triggers by Calling APIs?", + "uri":"functiongraph_03_0819.html", + "doc_type":"usermanual", + "p_code":"123", + "code":"126" + }, + { + "desc":"For details, see section \"Using an APIG Trigger\".", + "product_code":"functiongraph", + "title":"How Do I Use an APIG Trigger to Invoke a Function?", + "uri":"functiongraph_03_0835.html", + "doc_type":"usermanual", + "p_code":"123", + "code":"127" + }, + { + "desc":"By default, the request path or parameters are included in event. A function invokes APIG using its event template. You can obtain the request path or parameters from the", + "product_code":"functiongraph", + "title":"How Does a Function Obtain the Request Path or Parameters When Using an APIG Trigger?", + "uri":"functiongraph_03_0860.html", + "doc_type":"usermanual", + "p_code":"123", + "code":"128" + }, + { + "desc":"Yes. If a message is displayed indicating that the configuration of the current trigger conflicts with that of another one, the two triggers have the same bucket, prefix,", + "product_code":"functiongraph", + "title":"Can I Create an OBS Trigger with an Existing Bucket?", + "uri":"functiongraph_03_0874.html", + "doc_type":"usermanual", + "p_code":"123", + "code":"129" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Dependency Management FAQs", + "uri":"functiongraph_03_0883.html", + "doc_type":"usermanual", + "p_code":"83", + "code":"130" + }, + { + "desc":"A dependency is a program package and also an environment required for running a software package. The software package relies on and can only run in the environment.", + "product_code":"functiongraph", + "title":"What Is a Dependency?", + "uri":"functiongraph_03_0890.html", + "doc_type":"usermanual", + "p_code":"130", + "code":"131" + }, + { + "desc":"When you install a program or develop code that relies on an environment to run, you need to introduce the dependency.", + "product_code":"functiongraph", + "title":"When Do I Need a Dependency?", + "uri":"functiongraph_03_0885.html", + "doc_type":"usermanual", + "p_code":"130", + "code":"132" + }, + { + "desc":"The name of each file in a dependency cannot end with a tilde (~).There should be no more than 30,000 files in a dependency.You can upload a ZIP dependency file within 10", + "product_code":"functiongraph", + "title":"What Are the Precautions for Using a Dependency?", + "uri":"functiongraph_03_0847.html", + "doc_type":"usermanual", + "p_code":"130", + "code":"133" + }, + { + "desc":"Supported DependenciesFunctionGraph supports standard libraries and third-party dependencies.Standard librariesWhen using standard libraries, you can import them to your ", + "product_code":"functiongraph", + "title":"What Dependencies Does FunctionGraph Support?", + "uri":"functiongraph_03_0886.html", + "doc_type":"usermanual", + "p_code":"130", + "code":"134" + }, + { + "desc":"Yes. FunctionGraph supports both standard libraries and non-standard third-party libraries. For details, see What Dependencies Does FunctionGraph Support?", + "product_code":"functiongraph", + "title":"Does FunctionGraph Support Class Libraries?", + "uri":"functiongraph_03_0180.html", + "doc_type":"usermanual", + "p_code":"130", + "code":"135" + }, + { + "desc":"Package third-party libraries into a ZIP package by referring to How Do I Create Function Dependencies?Create a dependency on the FunctionGraph console by referring to Ho", + "product_code":"functiongraph", + "title":"How Do I Use Third-Party Dependencies on FunctionGraph?", + "uri":"functiongraph_03_0887.html", + "doc_type":"usermanual", + "p_code":"130", + "code":"136" + }, + { + "desc":"You are advised to create function dependencies in EulerOS. If other OSs are used, an error may occur due to underlying dependent libraries. For example, the dynamic link", + "product_code":"functiongraph", + "title":"How Do I Create Function Dependencies?", + "uri":"functiongraph_03_0343.html", + "doc_type":"usermanual", + "p_code":"130", + "code":"137" + }, + { + "desc":"Log in to the FunctionGraph console, and choose Functions > Dependencies in the navigation pane.Click Create Dependency.Set the following parameters.Dependency configurat", + "product_code":"functiongraph", + "title":"How Do I Create a Dependency on the FunctionGraph Console?", + "uri":"functiongraph_03_0888.html", + "doc_type":"usermanual", + "p_code":"130", + "code":"138" + }, + { + "desc":"On the function details page, click the Code tab, and click Add in the Dependencies area.Public: Public dependencies are provided by FunctionGraph and can be directly add", + "product_code":"functiongraph", + "title":"How Do I Add a Dependency to a Function?", + "uri":"functiongraph_03_0889.html", + "doc_type":"usermanual", + "p_code":"130", + "code":"139" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Function Execution FAQs", + "uri":"functiongraph_03_0346.html", + "doc_type":"usermanual", + "p_code":"83", + "code":"140" + }, + { + "desc":"Within 900s for synchronous execution and 72 hours for asynchronous execution.The default execution timeout is 3s. You can set the timeout (unit: s) to an integer from 3 ", + "product_code":"functiongraph", + "title":"How Long Does It Take to Execute a FunctionGraph Function?", + "uri":"functiongraph_03_0250.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"141" + }, + { + "desc":"Function execution includes two steps:Select an idle instance with required memory.Run specified code.", + "product_code":"functiongraph", + "title":"Which Steps Are Included in Function Execution?", + "uri":"functiongraph_03_0347.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"142" + }, + { + "desc":"FunctionGraph automatically scales in or out function instances based on the number of requests. If the number of concurrent requests increases, FunctionGraph allocates m", + "product_code":"functiongraph", + "title":"How Does FunctionGraph Process Concurrent Requests?", + "uri":"functiongraph_03_0348.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"143" + }, + { + "desc":"If a function has not been executed for a period of time, all instances related to the function will be released.", + "product_code":"functiongraph", + "title":"What If Function Instances Have Not Been Executed for a Long Time?", + "uri":"functiongraph_03_0349.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"144" + }, + { + "desc":"C# and Go support a lower startup speed than other languages due to mechanism issues. You can use the following methods to speed up initial access to a function:Allocate ", + "product_code":"functiongraph", + "title":"How Can I Speed Up Initial Access to a Function?", + "uri":"functiongraph_03_0350.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"145" + }, + { + "desc":"The returned information about a function contains the maximum memory consumed. Alternatively, check the memory usage in the execution result.", + "product_code":"functiongraph", + "title":"How Do I Know the Actual Memory Used for Function Execution?", + "uri":"functiongraph_03_0210.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"146" + }, + { + "desc":"Functions are cold-started. If initialization or a lengthy operation is performed during the first function execution, the first request will be delayed. However, subsequ", + "product_code":"functiongraph", + "title":"Why Is My First Request Slow?", + "uri":"functiongraph_03_0820.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"147" + }, + { + "desc":"Rectify the fault by referring to section \"Error Codes\". If the fault persists, contact technical support.", + "product_code":"functiongraph", + "title":"What Do I Do If an Error Occurs When Calling an API?", + "uri":"functiongraph_03_0821.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"148" + }, + { + "desc":"The first parameter in the function handler contains the request header. You can print the function execution result to obtain required fields.As shown in the following f", + "product_code":"functiongraph", + "title":"How Do I Read the Request Header of a Function?", + "uri":"functiongraph_03_0838.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"149" + }, + { + "desc":"Event parsing and cache consume extra memory during function invocation.After the invocation is complete, reclaimed memory is often put in the internal pool instead of ba", + "product_code":"functiongraph", + "title":"Why Does a Function Use More Memory Than Estimated and Even Trigger the Out of Memory Alarm?", + "uri":"functiongraph_03_0868.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"150" + }, + { + "desc":"Check the used memory in the response.", + "product_code":"functiongraph", + "title":"How Do I Check the Memory Usage When Seeing \"runtime memory limit exceeded\"?", + "uri":"functiongraph_03_0869.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"151" + }, + { + "desc":"The message \"CrashLoopBackOff: The application inside the container keeps crashing\" is displayed when a custom image execution failure occurs. In this case, perform the f", + "product_code":"functiongraph", + "title":"How Do I Troubleshoot \"CrashLoopBackOff\"?", + "uri":"functiongraph_03_0870.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"152" + }, + { + "desc":"Use a non-latest tag to manage image updates, and do not use the same image name.", + "product_code":"functiongraph", + "title":"After I Updated an Image with the Same Name, Reserved Instances Still Use the Old Image. What Can I Do?", + "uri":"functiongraph_03_0875.html", + "doc_type":"usermanual", + "p_code":"140", + "code":"153" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Function Configuration FAQs", + "uri":"functiongraph_03_0351.html", + "doc_type":"usermanual", + "p_code":"83", + "code":"154" + }, + { + "desc":"Yes. Set variables to dynamically pass settings to your function code and libraries without changing your code. For more information, see section \"Configuring Environment", + "product_code":"functiongraph", + "title":"Can I Set Environment Variables When Creating Functions?", + "uri":"functiongraph_03_0220.html", + "doc_type":"usermanual", + "p_code":"154", + "code":"155" + }, + { + "desc":"FunctionGraph displays all the information you enter in plain text. Therefore, do not enter insensitive information such as passwords when you define environment variable", + "product_code":"functiongraph", + "title":"Can I Enter Sensitive Information in Environment Variables?", + "uri":"functiongraph_03_0230.html", + "doc_type":"usermanual", + "p_code":"154", + "code":"156" + }, + { + "desc":"See section \"Watermarking Images\".", + "product_code":"functiongraph", + "title":"How Can I Watermark Images?", + "uri":"functiongraph_03_0836.html", + "doc_type":"usermanual", + "p_code":"154", + "code":"157" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"External Resource Access FAQs", + "uri":"functiongraph_03_0355.html", + "doc_type":"usermanual", + "p_code":"83", + "code":"158" + }, + { + "desc":"Perform the following operations:Check whether the MySQL database is deployed in a VPC.Yes: Configure the same VPC and subnet as the MySQL database for the function by re", + "product_code":"functiongraph", + "title":"How Does a Function Access the MySQL Database?", + "uri":"functiongraph_03_0130.html", + "doc_type":"usermanual", + "p_code":"158", + "code":"159" + }, + { + "desc":"Perform the following operations:Check whether the Redis instance is deployed in a VPC.If the Redis instance is deployed in a VPC, configure the same VPC and subnet as th", + "product_code":"functiongraph", + "title":"How Does a Function Access Redis?", + "uri":"functiongraph_03_0300.html", + "doc_type":"usermanual", + "p_code":"158", + "code":"160" + }, + { + "desc":"By default, functions deployed in a VPC are isolated from the Internet. If a function needs to access both internal and external networks, add a NAT gateway for the VPC.P", + "product_code":"functiongraph", + "title":"How Do I Configure External Network Access?", + "uri":"functiongraph_03_0834.html", + "doc_type":"usermanual", + "p_code":"158", + "code":"161" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"functiongraph", + "title":"Other FAQs", + "uri":"functiongraph_03_0824.html", + "doc_type":"usermanual", + "p_code":"83", + "code":"162" + }, + { + "desc":"Log in to the Cloud Eye console and view alarm rules.", + "product_code":"functiongraph", + "title":"How Do I View the Alarm Rules Configured for a Function?", + "uri":"functiongraph_03_0825.html", + "doc_type":"usermanual", + "p_code":"162", + "code":"163" + }, + { + "desc":"No. Please decompile your files before uploading them.", + "product_code":"functiongraph", + "title":"Does FunctionGraph Support ZIP Decompiling During Video Transcoding?", + "uri":"functiongraph_03_0827.html", + "doc_type":"usermanual", + "p_code":"162", + "code":"164" + } +] \ No newline at end of file diff --git a/docs/fg/umn/PARAMETERS.txt b/docs/fg/umn/PARAMETERS.txt new file mode 100644 index 00000000..6da8d5f0 --- /dev/null +++ b/docs/fg/umn/PARAMETERS.txt @@ -0,0 +1,3 @@ +version="" +language="en-us" +type="" \ No newline at end of file diff --git a/docs/fg/umn/en-us_image_0000001212740388.png b/docs/fg/umn/en-us_image_0000001212740388.png new file mode 100644 index 00000000..e864b383 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001212740388.png differ diff --git a/docs/fg/umn/en-us_image_0000001251748292.png b/docs/fg/umn/en-us_image_0000001251748292.png new file mode 100644 index 00000000..7272f7b5 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001251748292.png differ diff --git a/docs/fg/umn/en-us_image_0000001252067288.png b/docs/fg/umn/en-us_image_0000001252067288.png new file mode 100644 index 00000000..e864b383 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001252067288.png differ diff --git a/docs/fg/umn/en-us_image_0000001252067292.png b/docs/fg/umn/en-us_image_0000001252067292.png new file mode 100644 index 00000000..e1371a33 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001252067292.png differ diff --git a/docs/fg/umn/en-us_image_0000001252067312.png b/docs/fg/umn/en-us_image_0000001252067312.png new file mode 100644 index 00000000..62a3a34a Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001252067312.png differ diff --git a/docs/fg/umn/en-us_image_0000001257625360.png b/docs/fg/umn/en-us_image_0000001257625360.png new file mode 100644 index 00000000..76abd06a Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001257625360.png differ diff --git a/docs/fg/umn/en-us_image_0000001258086894.png b/docs/fg/umn/en-us_image_0000001258086894.png new file mode 100644 index 00000000..3ee6ca09 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001258086894.png differ diff --git a/docs/fg/umn/en-us_image_0000001259876542.png b/docs/fg/umn/en-us_image_0000001259876542.png new file mode 100644 index 00000000..6d2dff6e Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001259876542.png differ diff --git a/docs/fg/umn/en-us_image_0000001260038950.png b/docs/fg/umn/en-us_image_0000001260038950.png new file mode 100644 index 00000000..e77736a6 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001260038950.png differ diff --git a/docs/fg/umn/en-us_image_0000001261803038.png b/docs/fg/umn/en-us_image_0000001261803038.png new file mode 100644 index 00000000..fc045661 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001261803038.png differ diff --git a/docs/fg/umn/en-us_image_0000001269221818.png b/docs/fg/umn/en-us_image_0000001269221818.png new file mode 100644 index 00000000..76180563 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001269221818.png differ diff --git a/docs/fg/umn/en-us_image_0000001275385005.png b/docs/fg/umn/en-us_image_0000001275385005.png new file mode 100644 index 00000000..4dd5e1d5 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001275385005.png differ diff --git a/docs/fg/umn/en-us_image_0000001298507525.png b/docs/fg/umn/en-us_image_0000001298507525.png new file mode 100644 index 00000000..29c5cb47 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001298507525.png differ diff --git a/docs/fg/umn/en-us_image_0000001298507537.png b/docs/fg/umn/en-us_image_0000001298507537.png new file mode 100644 index 00000000..bcfe1f5c Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001298507537.png differ diff --git a/docs/fg/umn/en-us_image_0000001298786917.png b/docs/fg/umn/en-us_image_0000001298786917.png new file mode 100644 index 00000000..1f20f811 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001298786917.png differ diff --git a/docs/fg/umn/en-us_image_0000001302775168.png b/docs/fg/umn/en-us_image_0000001302775168.png new file mode 100644 index 00000000..95e779f3 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001302775168.png differ diff --git a/docs/fg/umn/en-us_image_0000001303254576.png b/docs/fg/umn/en-us_image_0000001303254576.png new file mode 100644 index 00000000..cedecc23 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001303254576.png differ diff --git a/docs/fg/umn/en-us_image_0000001304635949.png b/docs/fg/umn/en-us_image_0000001304635949.png new file mode 100644 index 00000000..c5f5672f Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001304635949.png differ diff --git a/docs/fg/umn/en-us_image_0000001305505277.png b/docs/fg/umn/en-us_image_0000001305505277.png new file mode 100644 index 00000000..81a9e979 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001305505277.png differ diff --git a/docs/fg/umn/en-us_image_0000001307957865.png b/docs/fg/umn/en-us_image_0000001307957865.png new file mode 100644 index 00000000..efa04aaf Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001307957865.png differ diff --git a/docs/fg/umn/en-us_image_0000001310168777.png b/docs/fg/umn/en-us_image_0000001310168777.png new file mode 100644 index 00000000..1cfdb486 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001310168777.png differ diff --git a/docs/fg/umn/en-us_image_0000001351347601.png b/docs/fg/umn/en-us_image_0000001351347601.png new file mode 100644 index 00000000..dc57bdde Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001351347601.png differ diff --git a/docs/fg/umn/en-us_image_0000001351427305.png b/docs/fg/umn/en-us_image_0000001351427305.png new file mode 100644 index 00000000..73a39546 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001351427305.png differ diff --git a/docs/fg/umn/en-us_image_0000001351600380.png b/docs/fg/umn/en-us_image_0000001351600380.png new file mode 100644 index 00000000..ea7e5c6b Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001351600380.png differ diff --git a/docs/fg/umn/en-us_image_0000001352771114.png b/docs/fg/umn/en-us_image_0000001352771114.png new file mode 100644 index 00000000..784c3469 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001352771114.png differ diff --git a/docs/fg/umn/en-us_image_0000001356014693.png b/docs/fg/umn/en-us_image_0000001356014693.png new file mode 100644 index 00000000..abb7a27e Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001356014693.png differ diff --git a/docs/fg/umn/en-us_image_0000001356134133.png b/docs/fg/umn/en-us_image_0000001356134133.png new file mode 100644 index 00000000..de057721 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001356134133.png differ diff --git a/docs/fg/umn/en-us_image_0000001382229680.gif b/docs/fg/umn/en-us_image_0000001382229680.gif new file mode 100644 index 00000000..a042313c Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001382229680.gif differ diff --git a/docs/fg/umn/en-us_image_0000001387236998.png b/docs/fg/umn/en-us_image_0000001387236998.png new file mode 100644 index 00000000..514f85e3 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001387236998.png differ diff --git a/docs/fg/umn/en-us_image_0000001387407430.png b/docs/fg/umn/en-us_image_0000001387407430.png new file mode 100644 index 00000000..3a7b2524 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001387407430.png differ diff --git a/docs/fg/umn/en-us_image_0000001402198221.png b/docs/fg/umn/en-us_image_0000001402198221.png new file mode 100644 index 00000000..b0851b30 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001402198221.png differ diff --git a/docs/fg/umn/en-us_image_0000001402931181.png b/docs/fg/umn/en-us_image_0000001402931181.png new file mode 100644 index 00000000..e5a3389f Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001402931181.png differ diff --git a/docs/fg/umn/en-us_image_0000001403331673.png b/docs/fg/umn/en-us_image_0000001403331673.png new file mode 100644 index 00000000..2ab23263 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001403331673.png differ diff --git a/docs/fg/umn/en-us_image_0000001422359078.png b/docs/fg/umn/en-us_image_0000001422359078.png new file mode 100644 index 00000000..d86d94c2 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001422359078.png differ diff --git a/docs/fg/umn/en-us_image_0000001422359706.png b/docs/fg/umn/en-us_image_0000001422359706.png new file mode 100644 index 00000000..92b8b8e1 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001422359706.png differ diff --git a/docs/fg/umn/en-us_image_0000001422840354.png b/docs/fg/umn/en-us_image_0000001422840354.png new file mode 100644 index 00000000..92b8b8e1 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001422840354.png differ diff --git a/docs/fg/umn/en-us_image_0000001453780466.png b/docs/fg/umn/en-us_image_0000001453780466.png new file mode 100644 index 00000000..cb5c41e0 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001453780466.png differ diff --git a/docs/fg/umn/en-us_image_0000001454100150.png b/docs/fg/umn/en-us_image_0000001454100150.png new file mode 100644 index 00000000..114da0e4 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001454100150.png differ diff --git a/docs/fg/umn/en-us_image_0000001455081958.png b/docs/fg/umn/en-us_image_0000001455081958.png new file mode 100644 index 00000000..9461faa8 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001455081958.png differ diff --git a/docs/fg/umn/en-us_image_0000001466738342.png b/docs/fg/umn/en-us_image_0000001466738342.png new file mode 100644 index 00000000..b68d4528 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001466738342.png differ diff --git a/docs/fg/umn/en-us_image_0000001472516001.png b/docs/fg/umn/en-us_image_0000001472516001.png new file mode 100644 index 00000000..0a9b31fd Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001472516001.png differ diff --git a/docs/fg/umn/en-us_image_0000001472598601.png b/docs/fg/umn/en-us_image_0000001472598601.png new file mode 100644 index 00000000..30ef8299 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001472598601.png differ diff --git a/docs/fg/umn/en-us_image_0000001472598777.png b/docs/fg/umn/en-us_image_0000001472598777.png new file mode 100644 index 00000000..a45e4662 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001472598777.png differ diff --git a/docs/fg/umn/en-us_image_0000001504921529.png b/docs/fg/umn/en-us_image_0000001504921529.png new file mode 100644 index 00000000..eb673152 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001504921529.png differ diff --git a/docs/fg/umn/en-us_image_0000001509972086.png b/docs/fg/umn/en-us_image_0000001509972086.png new file mode 100644 index 00000000..691525ec Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001509972086.png differ diff --git a/docs/fg/umn/en-us_image_0000001560650613.png b/docs/fg/umn/en-us_image_0000001560650613.png new file mode 100644 index 00000000..66d77d60 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001560650613.png differ diff --git a/docs/fg/umn/en-us_image_0000001629968978.png b/docs/fg/umn/en-us_image_0000001629968978.png new file mode 100644 index 00000000..335ecbc4 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001629968978.png differ diff --git a/docs/fg/umn/en-us_image_0000001629978216.png b/docs/fg/umn/en-us_image_0000001629978216.png new file mode 100644 index 00000000..80a98bfb Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001629978216.png differ diff --git a/docs/fg/umn/en-us_image_0000001629983696.png b/docs/fg/umn/en-us_image_0000001629983696.png new file mode 100644 index 00000000..e02b2b94 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001629983696.png differ diff --git a/docs/fg/umn/en-us_image_0000001629992736.png b/docs/fg/umn/en-us_image_0000001629992736.png new file mode 100644 index 00000000..247ba90d Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001629992736.png differ diff --git a/docs/fg/umn/en-us_image_0000001630136520.png b/docs/fg/umn/en-us_image_0000001630136520.png new file mode 100644 index 00000000..7d107643 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001630136520.png differ diff --git a/docs/fg/umn/en-us_image_0000001630335086.png b/docs/fg/umn/en-us_image_0000001630335086.png new file mode 100644 index 00000000..d1a789f9 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001630335086.png differ diff --git a/docs/fg/umn/en-us_image_0000001630365702.png b/docs/fg/umn/en-us_image_0000001630365702.png new file mode 100644 index 00000000..3eb0e269 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001630365702.png differ diff --git a/docs/fg/umn/en-us_image_0000001630402136.png b/docs/fg/umn/en-us_image_0000001630402136.png new file mode 100644 index 00000000..729ed33a Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001630402136.png differ diff --git a/docs/fg/umn/en-us_image_0000001630462528.png b/docs/fg/umn/en-us_image_0000001630462528.png new file mode 100644 index 00000000..b6b49836 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001630462528.png differ diff --git a/docs/fg/umn/en-us_image_0000001630536208.png b/docs/fg/umn/en-us_image_0000001630536208.png new file mode 100644 index 00000000..20daaa08 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001630536208.png differ diff --git a/docs/fg/umn/en-us_image_0000001630698024.png b/docs/fg/umn/en-us_image_0000001630698024.png new file mode 100644 index 00000000..c3b0048f Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001630698024.png differ diff --git a/docs/fg/umn/en-us_image_0000001630743710.png b/docs/fg/umn/en-us_image_0000001630743710.png new file mode 100644 index 00000000..2c3190f9 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001630743710.png differ diff --git a/docs/fg/umn/en-us_image_0000001630843130.png b/docs/fg/umn/en-us_image_0000001630843130.png new file mode 100644 index 00000000..7eae2455 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001630843130.png differ diff --git a/docs/fg/umn/en-us_image_0000001630849458.png b/docs/fg/umn/en-us_image_0000001630849458.png new file mode 100644 index 00000000..80f8f960 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001630849458.png differ diff --git a/docs/fg/umn/en-us_image_0000001630990134.png b/docs/fg/umn/en-us_image_0000001630990134.png new file mode 100644 index 00000000..32d47e7f Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001630990134.png differ diff --git a/docs/fg/umn/en-us_image_0000001631149450.png b/docs/fg/umn/en-us_image_0000001631149450.png new file mode 100644 index 00000000..32d47e7f Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001631149450.png differ diff --git a/docs/fg/umn/en-us_image_0000001631298906.png b/docs/fg/umn/en-us_image_0000001631298906.png new file mode 100644 index 00000000..b6d62548 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001631298906.png differ diff --git a/docs/fg/umn/en-us_image_0000001631299366.png b/docs/fg/umn/en-us_image_0000001631299366.png new file mode 100644 index 00000000..80fa8984 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001631299366.png differ diff --git a/docs/fg/umn/en-us_image_0000001631465770.png b/docs/fg/umn/en-us_image_0000001631465770.png new file mode 100644 index 00000000..04d2032e Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001631465770.png differ diff --git a/docs/fg/umn/en-us_image_0000001631816488.png b/docs/fg/umn/en-us_image_0000001631816488.png new file mode 100644 index 00000000..6dea6f66 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001631816488.png differ diff --git a/docs/fg/umn/en-us_image_0000001631986292.png b/docs/fg/umn/en-us_image_0000001631986292.png new file mode 100644 index 00000000..f163cb51 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001631986292.png differ diff --git a/docs/fg/umn/en-us_image_0000001632148468.png b/docs/fg/umn/en-us_image_0000001632148468.png new file mode 100644 index 00000000..fe4a29d9 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001632148468.png differ diff --git a/docs/fg/umn/en-us_image_0000001659754612.png b/docs/fg/umn/en-us_image_0000001659754612.png new file mode 100644 index 00000000..5d3f4a2c Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001659754612.png differ diff --git a/docs/fg/umn/en-us_image_0000001678732229.png b/docs/fg/umn/en-us_image_0000001678732229.png new file mode 100644 index 00000000..c3275b7a Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001678732229.png differ diff --git a/docs/fg/umn/en-us_image_0000001678749193.png b/docs/fg/umn/en-us_image_0000001678749193.png new file mode 100644 index 00000000..0bf62f5f Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001678749193.png differ diff --git a/docs/fg/umn/en-us_image_0000001678804153.png b/docs/fg/umn/en-us_image_0000001678804153.png new file mode 100644 index 00000000..1ecf9f70 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001678804153.png differ diff --git a/docs/fg/umn/en-us_image_0000001678858881.png b/docs/fg/umn/en-us_image_0000001678858881.png new file mode 100644 index 00000000..06df3b1a Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001678858881.png differ diff --git a/docs/fg/umn/en-us_image_0000001678918577.png b/docs/fg/umn/en-us_image_0000001678918577.png new file mode 100644 index 00000000..c7ef50fb Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001678918577.png differ diff --git a/docs/fg/umn/en-us_image_0000001678920797.png b/docs/fg/umn/en-us_image_0000001678920797.png new file mode 100644 index 00000000..6baf48e9 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001678920797.png differ diff --git a/docs/fg/umn/en-us_image_0000001679086013.png b/docs/fg/umn/en-us_image_0000001679086013.png new file mode 100644 index 00000000..96bcc704 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001679086013.png differ diff --git a/docs/fg/umn/en-us_image_0000001679087833.png b/docs/fg/umn/en-us_image_0000001679087833.png new file mode 100644 index 00000000..91e24702 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001679087833.png differ diff --git a/docs/fg/umn/en-us_image_0000001679098753.png b/docs/fg/umn/en-us_image_0000001679098753.png new file mode 100644 index 00000000..70c88a1c Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001679098753.png differ diff --git a/docs/fg/umn/en-us_image_0000001679118141.png b/docs/fg/umn/en-us_image_0000001679118141.png new file mode 100644 index 00000000..f9b8da2e Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001679118141.png differ diff --git a/docs/fg/umn/en-us_image_0000001679192985.png b/docs/fg/umn/en-us_image_0000001679192985.png new file mode 100644 index 00000000..03b30914 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001679192985.png differ diff --git a/docs/fg/umn/en-us_image_0000001679199937.png b/docs/fg/umn/en-us_image_0000001679199937.png new file mode 100644 index 00000000..15c12210 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001679199937.png differ diff --git a/docs/fg/umn/en-us_image_0000001679340817.png b/docs/fg/umn/en-us_image_0000001679340817.png new file mode 100644 index 00000000..2c3190f9 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001679340817.png differ diff --git a/docs/fg/umn/en-us_image_0000001679464913.png b/docs/fg/umn/en-us_image_0000001679464913.png new file mode 100644 index 00000000..4c53c4fd Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001679464913.png differ diff --git a/docs/fg/umn/en-us_image_0000001679467421.png b/docs/fg/umn/en-us_image_0000001679467421.png new file mode 100644 index 00000000..04d2032e Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001679467421.png differ diff --git a/docs/fg/umn/en-us_image_0000001679586377.png b/docs/fg/umn/en-us_image_0000001679586377.png new file mode 100644 index 00000000..0a37874f Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001679586377.png differ diff --git a/docs/fg/umn/en-us_image_0000001679586957.png b/docs/fg/umn/en-us_image_0000001679586957.png new file mode 100644 index 00000000..80d80116 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001679586957.png differ diff --git a/docs/fg/umn/en-us_image_0000001680007009.png b/docs/fg/umn/en-us_image_0000001680007009.png new file mode 100644 index 00000000..009b0413 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001680007009.png differ diff --git a/docs/fg/umn/en-us_image_0000001680495569.png b/docs/fg/umn/en-us_image_0000001680495569.png new file mode 100644 index 00000000..774e0a84 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001680495569.png differ diff --git a/docs/fg/umn/en-us_image_0000001702539580.png b/docs/fg/umn/en-us_image_0000001702539580.png new file mode 100644 index 00000000..44c23276 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001702539580.png differ diff --git a/docs/fg/umn/en-us_image_0000001709193044.png b/docs/fg/umn/en-us_image_0000001709193044.png new file mode 100644 index 00000000..850c96ee Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001709193044.png differ diff --git a/docs/fg/umn/en-us_image_0000001709398390.png b/docs/fg/umn/en-us_image_0000001709398390.png new file mode 100644 index 00000000..ce771996 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001709398390.png differ diff --git a/docs/fg/umn/en-us_image_0000001717922440.png b/docs/fg/umn/en-us_image_0000001717922440.png new file mode 100644 index 00000000..9cd95305 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001717922440.png differ diff --git a/docs/fg/umn/en-us_image_0000001757072025.png b/docs/fg/umn/en-us_image_0000001757072025.png new file mode 100644 index 00000000..57c01f58 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001757072025.png differ diff --git a/docs/fg/umn/en-us_image_0000001757397373.png b/docs/fg/umn/en-us_image_0000001757397373.png new file mode 100644 index 00000000..ce771996 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001757397373.png differ diff --git a/docs/fg/umn/en-us_image_0000001765392049.png b/docs/fg/umn/en-us_image_0000001765392049.png new file mode 100644 index 00000000..17eed605 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001765392049.png differ diff --git a/docs/fg/umn/en-us_image_0000001765546397.png b/docs/fg/umn/en-us_image_0000001765546397.png new file mode 100644 index 00000000..a83c477b Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001765546397.png differ diff --git a/docs/fg/umn/en-us_image_0000001768776664.png b/docs/fg/umn/en-us_image_0000001768776664.png new file mode 100644 index 00000000..a357cfb5 Binary files /dev/null and b/docs/fg/umn/en-us_image_0000001768776664.png differ diff --git a/docs/fg/umn/en-us_topic_0000001540362886.html b/docs/fg/umn/en-us_topic_0000001540362886.html new file mode 100644 index 00000000..bebd1306 --- /dev/null +++ b/docs/fg/umn/en-us_topic_0000001540362886.html @@ -0,0 +1,31 @@ + + + +

Service Overview

+ +

+
+ +
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0100.html b/docs/fg/umn/functiongraph_01_0100.html new file mode 100644 index 00000000..173fa238 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0100.html @@ -0,0 +1,15 @@ + + +

Before You Start

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0100_0.html b/docs/fg/umn/functiongraph_01_0100_0.html new file mode 100644 index 00000000..d13f902c --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0100_0.html @@ -0,0 +1,27 @@ + + +

What Is FunctionGraph?

+

FunctionGraph hosts and computes event-driven functions in a serverless context while ensuring high availability, high scalability, and zero maintenance. All you need to do is write your code and set conditions.

+

Figure 1 shows the process of using FunctionGraph.

+
Figure 1 Usage process
+

1. Write code.

+

Write code in Node.js, Python, Java, or Go. For details, see the FunctionGraph Developer Guide.

+

2. Upload code.

+

Currently, you can edit code inline, upload a ZIP or JAR file, or obtain a ZIP file from OBS. For details, see Table 2.

+

3. Trigger functions by API calls or cloud service events.

+

Call RESTful APIs or use cloud service event sources to trigger function execution and generate instances to implement service functions.

+

4. Auto scaling is implemented.

+

During function execution, FunctionGraph scales automatically based on the number of requests without the need for configurations. For details about the maximum number of function instances that can be run concurrently, see Notes and Constraints.

+

5. View logs.

+

View run logs of functions as FunctionGraph is interconnected with Log Tank Service (LTS). For details, see section "Querying Function Logs".

+

6. View monitoring information.

+

View graphical monitoring information as FunctionGraph is interconnected with Application Operations Management (AOM). For details, see section "Viewing Function Metrics"

+

7. Billing mode

+

After a function is executed, you will be billed based on the number of function execution requests and execution duration.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0110.html b/docs/fg/umn/functiongraph_01_0110.html new file mode 100644 index 00000000..e24275ec --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0110.html @@ -0,0 +1,71 @@ + + +

Use of FunctionGraph

+

FunctionGraph allows you to run your code without provisioning or managing servers, while ensuring high availability and scalability. All you need to do is upload your code and set execution conditions, and FunctionGraph will take care of the rest.

+

Process

Figure 1 shows the process of using functions.

+
  1. Write code, package and upload it to FunctionGraph, and add event sources such as Simple Message Notification (SMN), Object Storage Service (OBS), and API Gateway (APIG) event sources to build applications.
  2. Functions are triggered by RESTful API calls or event sources to achieve expected service purposes. During this process, FunctionGraph automatically schedules resources.
  3. View logs and metrics. Note that you will be billed based on code execution duration.
    Figure 1 Flowchart
    +
+

The following shows the details:

+

+
  1. Write code.

    Write code in Node.js, Python, Java, or Go.

    +
  2. Upload code.

    Edit code inline, upload a local ZIP or JAR file, or upload a ZIP file from OBS. For details, see Creating a Deployment Package.

    +
  3. Trigger functions by API calls or cloud service events.

    Functions are triggered by API calls or cloud service events. For details, see Creating Triggers.

    +
  4. Implement auto scaling.

    FunctionGraph implements auto scaling based on the number of requests. For details, see section "Notes and Constraints".

    +
  5. View logs.

    View run logs of function. FunctionGraph is interconnected with Log Tank Service (LTS). For details, see Logs.

    +
  6. View monitoring information.

    View graphical monitoring information. FunctionGraph is interconnected with Cloud Eye. For details, see Metrics.

    +
+
+

Introduction to Dashboard

Log in to the FunctionGraph console and choose Dashboard in the navigation pane on the left.
  • View your created functions/function quota, used storage/storage quota, and monthly invocations and resource usage.
    Figure 2 Monthly statistics
    +
  • View tenant-level metrics, including invocations, errors, duration, and throttles.

    Table 1 describes the function metrics.

    + +
    + + + + + + + + + + + + + + + + + + + + + +
    Table 1 Function metrics

    Metric

    +

    Unit

    +

    Description

    +

    Invocations

    +

    Count

    +

    Total number of invocation requests, including invocation errors and throttled invocations. In case of asynchronous invocation, the count starts only when a function is executed in response to a request.

    +

    Duration

    +

    ms

    +

    Maximum duration: the maximum duration all functions are executed at a time within a period.

    +

    Minimum duration: the minimum duration all functions are executed at a time within a period.

    +

    Average duration: the average duration all functions are executed at a time within a period.

    +

    Errors

    +

    Count

    +

    Number of times that your functions failed with error code 200 being returned. Errors caused by function syntax or execution are also included.

    +

    Throttles

    +

    Count

    +

    Number of times that FunctionGraph throttles your functions due to the resource limit.

    +
    +
    +
+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0130_0.html b/docs/fg/umn/functiongraph_01_0130_0.html new file mode 100644 index 00000000..3ec9498f --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0130_0.html @@ -0,0 +1,52 @@ + + +

Relationships Between FunctionGraph and Other Services

+

Table 1 describes the cloud services that have been interconnected with FunctionGraph.

+ +
+ + + + + + + + + + + + + + + + + + + + + + +
Table 1 Interconnected services

Service

+

Function

+

SMN

+

FunctionGraph functions are constructed to process SMN notifications.

+

API Gateway

+

FunctionGraph functions are invoked over HTTPS by defining REST APIs with specified backend services.

+

OBS

+

FunctionGraph functions are created to process OBS bucket events, such as object creation or deletion events. For example, when an image is uploaded to the specified bucket, OBS invokes the function to read the image and create a thumbnail.

+

DIS

+

FunctionGraph functions are created to periodically poll DIS streams for new records, such as website click streams, financial transactions, social media streams, IT logs, and location-tracking events.

+

CTS

+

FunctionGraph functions are defined to analyze and process key information in logs according to the event notifications of specified service type and operations configured in CTS.

+
  • With CTS, you can record operations associated with FunctionGraph for later query, audit, and backtracking.
  • CTS starts recording operations on cloud resources once being enabled. View traces of the last seven days on the CTS console.
+

DDS

+

DDS triggers trigger FunctionGraph functions upon a table change in the database.

+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0140.html b/docs/fg/umn/functiongraph_01_0140.html new file mode 100644 index 00000000..5b7e95d0 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0140.html @@ -0,0 +1,17 @@ + + +

Permissions Management

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_01_0140_0.html b/docs/fg/umn/functiongraph_01_0140_0.html new file mode 100644 index 00000000..cf4c1573 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0140_0.html @@ -0,0 +1,28 @@ + + +

Application Scenarios

+

FunctionGraph is suitable for various scenarios, such as real-time file processing, real-time data stream processing, web & mobile application backends, and AI application.

+

Scenario 1: Event-Driven Applications

Services are executed in event-driven mode and resources are provisioned based on demands. Developers do not need to be concerned about service peaks or troughs. Idle resources are not billed, reducing O&M costs. Event-driven applications include file processing, image processing, live streaming/transcoding, real-time data stream processing, and IoT rule/event processing.

+ +
+

Scenario 2: Web Applications

Interconnect FunctionGraph with other cloud services or your VMs to quickly build highly available and scalable web & mobile backends. Web applications include mini programs, web pages/apps, chatbots, and Backends for Frontends (BFF).

+

Advantages:

+ +
+

Scenario 3: AI Applications

Intelligence evolution requires various services to be integrated for quick rollout. These services include third-party service integration, AI inference, and license plate recognition.

+

Advantages:

+ +
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0141.html b/docs/fg/umn/functiongraph_01_0141.html new file mode 100644 index 00000000..04069cfa --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0141.html @@ -0,0 +1,25 @@ + + +

Creating a User and Granting Permissions

+

+

This section describes how to use Identity and Access Management (IAM) to implement fine-grained permissions control for your FunctionGraph resources. With IAM, you can:

+ +

If your account does not need individual IAM users, then you may skip over this chapter.

+

This section describes the procedure for granting permissions. For details, see Figure 1.

+

Prerequisites

Before assigning permissions to user groups, you should learn about the system permissions listed in "Permissions Management" in the FunctionGraph Service Overview. For the system policies of other services, see section "Permissions".

+
+

Process

Figure 1 Process for granting FunctionGraph permissions
+

+
  1. .

    Create a user group on the IAM console, and assign the FunctionGraph Invoker role to the group.

    +
  2. .

    Create a user on the IAM console and add the user to the group created in 1.

    +
  3. and Verifying Permissions

    Log in to the management console as the created user and check whether this user only has read permissions for FunctionGraph:

    +
    • Choose Service List > FunctionGraph to access the FunctionGraph console. In the navigation pane, choose Functions > Function List. Then click Create Function. If a message appears indicating insufficient permissions to perform the operation, the FunctionGraph Invoker role has already taken effect.
    • Choose any other service in the Service List. If a message appears indicating insufficient permissions to access the service, the FunctionGraph Invoker role has already taken effect.
    +
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0150.html b/docs/fg/umn/functiongraph_01_0150.html new file mode 100644 index 00000000..3b589938 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0150.html @@ -0,0 +1,220 @@ + + +

Notes and Constraints

+

Account Resource Constraints

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Account resource constraints

Resource

+

Limit

+

Adjustable

+

Maximum number of functions that can be created under an account

+

400

+

Yes

+

Maximum number of versions allowed for a function

+

20

+

Yes

+

Maximum number of aliases allowed for a function

+

10

+

Yes

+

Size of a code deployment package (in ZIP or JAR format) that can be uploaded to the FunctionGraph console

+

40 MB

+

No. To adjust the quota, contact customer service.

+

Size of a code deployment package (in ZIP or JAR format) that can be edited inline during function API invocation

+

50 MB

+

No. To adjust the quota, contact customer service.

+

Size of an original code deployment package allowed during function API invocation

+
  • ZIP: 1500 MB (after decompression)
  • OBS bucket: 300 MB (after compression)
+

No. To adjust the quota, contact customer service.

+

Maximum size of deployment packages allowed for an account

+

10 GB

+

No. To adjust the quota, contact customer service.

+

Number of concurrent executions per account

+

100

+

Yes

+

Maximum number of reserved instances that an account can create

+

90 (Number of concurrent executions per account x 90%)

+

Yes

+

Size of all environment variables of a function

+

4096 characters

+

No. To adjust the quota, contact customer service.

+

Maximum size of code that can be displayed on the console

+

20 MB

+

No. To adjust the quota, contact customer service.

+
+
+
+

Function Running Resource Constraints

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Function running resource constraints

Resource

+

Default

+

Adjustable

+

Ephemeral disk space (/tmp space)

+

512 MB

+

No

+

Number of file descriptors

+

1024

+

No

+

Total number of processes and threads

+

1024

+

No

+

Maximum execution duration per request

+

259,200s

+

Yes

+

Valid payload size of invocation request body (synchronous invocation)

+

6 MB

+

No. To adjust the quota, contact customer service.

+

Valid payload size of invocation response body (synchronous invocation)

+

6 MB

+

No. To adjust the quota, contact customer service.

+

Valid payload size of invocation request body (asynchronous invocation)

+

256 KB

+

No. To adjust the quota, contact customer service.

+

Size of imported resources

+

≤ 50 MB ZIP file

+

No. To adjust the quota, contact customer service.

+

Image size per function

+

10 GB

+

No. To adjust the quota, contact customer service.

+

Size of exported resources

+

≤ 50 MB

+

No. To adjust the quota, contact customer service.

+

Instances per tenant

+

1000

+

Yes

+

Max. memory per function

+

10 GB

+

No. To adjust the quota, contact customer service.

+

Bandwidth

+

Unlimited

+

-

+

Single log size

+

Unlimited

+

-

+

Maximum execution duration of initializer

+

259,200s

+

Yes

+
+
+
  • Valid payload size of invocation response body (synchronous invocation): The returned character string or the JSON character string of the serialized response body is less than or equal to 6 MB by default. The actual data size varies depending on the backend settings of FunctionGraph. The backend determines the size of the serialized data with a byte-level deviation. The actual valid payload size is 6 MB ± 100 bytes.
  • You are not advised to invoke a function whose execution time exceeds 90s on the FunctionGraph console. To invoke such a function, use asynchronous invocation.
+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0150_0.html b/docs/fg/umn/functiongraph_01_0150_0.html new file mode 100644 index 00000000..ffdc27ae --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0150_0.html @@ -0,0 +1,17 @@ + + +

Building Functions

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0151.html b/docs/fg/umn/functiongraph_01_0151.html new file mode 100644 index 00000000..993013dd --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0151.html @@ -0,0 +1,23 @@ + + +

Supported Programming Languages

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_01_0152.html b/docs/fg/umn/functiongraph_01_0152.html new file mode 100644 index 00000000..230044bd --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0152.html @@ -0,0 +1,173 @@ + + +

Creating a Deployment Package

+

To create a function, you must create a deployment package which includes your code and all dependencies. You can create a deployment package locally or edit code on the FunctionGraph console. If you edit code inline, FunctionGraph automatically creates and uploads a deployment package for your function. FunctionGraph allows you to edit function code in the same way as managing a project. You can create and edit files and folders. After you upload a ZIP code package, you can view and edit the code on the console.

+
  • After programming, simply package your code into a ZIP file (Java, Node.js, Python, and Go) or JAR file (Java), and upload the file to FunctionGraph for execution.
  • When creating a ZIP file, place the handler file under the root directory to ensure that your code can run normally after being decompressed.
  • If you edit code in Go, zip the compiled file, and ensure that the name of the dynamic library file is consistent with the plug-in name of the handler. For example, if the name of the dynamic library file is testplugin.so, set the handler name to testplugin.Handler.
  • Java is a compiled language, which does not support editing code inline. If your function does not use any third-party dependencies, you can upload a function JAR file. If your function uses third-party dependencies, compress the dependencies and the function JAR file into a ZIP file, and then upload the ZIP file.
+
+

Table 1 lists the code entry modes supported by FunctionGraph for each runtime.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Code entry modes

Runtime

+

Editing Code Inline

+

Uploading a ZIP File

+

Uploading a JAR File

+

Uploading a ZIP File from OBS

+

Node.js

+

Supported

+

Supported

+

Not supported

+

Supported

+

Python

+

Supported

+

Supported

+

Not supported

+

Supported

+

Java

+

Not supported

+

Supported

+

Supported

+

Supported

+

Go

+

Not supported

+

Supported

+

Not supported

+

Supported

+

Custom runtime

+

Supported

+

Supported

+

Not supported

+

Supported

+
+
+

If the code to be uploaded contains sensitive information (such as account passwords), encrypt the sensitive information to prevent leakage.

+
+ +
+ + + + + + + + + + + + + +
Table 2 Code entry modes

Code Entry Mode

+

Description

+

Edit code inline

+

FunctionGraph allows you to edit function code in the same way as managing a project. You can create and edit files and folders. After you upload a ZIP code package, you can edit the code on the Code tab of the function details page.

+
  • File: Create files and folders, save changes, and close all files.
  • Edit: Undo/redo typing; cut, copy, and paste code; find and replace content.
  • Settings: Set the font size, auto formatting, and theme color.
+

Upload ZIP file

+
  1. On the Code tab of the function details page, choose Upload > Local ZIP.
  2. Click Select File and upload a local code package to FunctionGraph. The size of the ZIP file cannot exceed 40 MB. For a larger file, upload it through OBS.
+

Upload file from OBS

+
  1. On the Code tab of the function details page, choose Upload > OBS ZIP.
  2. Click Select File and upload a local code package to FunctionGraph.
+
+
+

Node.js

Editing Code Inline

+

FunctionGraph provides an SDK for editing code in Node.js. If your custom code uses only the SDK library, you can edit code using the inline editor on the FunctionGraph console. After you edit code inline and upload it to FunctionGraph, the console compresses your code and the related configurations into a deployment package that FunctionGraph can run.

+

Uploading a Deployment Package

+

If your code uses other resources, such as a graphic library for image processing, first create a deployment package, and then upload the package to the FunctionGraph console. You can upload a Node.js deployment package in two ways.

+
  • When creating a ZIP file, place the handler file under the root directory to ensure that your code can run normally after being decompressed.
  • The size of the decompressed source code cannot exceed 1.5 GB. If the code is too large, contact the customer service.
+
+ +
+

Python

Editing Code Inline

+

FunctionGraph provides an SDK for editing code in Python. If your custom code uses only the SDK library, you can edit code using the inline editor on the FunctionGraph console. After you edit code inline and upload it to FunctionGraph, the console compresses your code and the related configurations into a deployment package that FunctionGraph can run.

+

Uploading a Deployment Package

+

If your code uses other resources, such as a graphic library for image processing, first create a deployment package, and then upload the package to the FunctionGraph console. You can upload a Python deployment package in two ways.

+
  • When creating a ZIP file, place the handler file under the root directory to ensure that your code can run normally after being decompressed.
  • The size of the decompressed source code cannot exceed 1.5 GB. If the code is too large, contact the customer service.
  • When you write code in Python, do not name your package with the same suffix as a standard Python library, such as json, lib, and os. Otherwise, an error indicating a module loading failure will be reported.
+
+ +
+

Java

Java is a compiled language, which does not support editing code inline. You can only upload a local deployment package, which can be a ZIP or JAR file.

+

Uploading a JAR File

+ +

Uploading a ZIP File

+

If your function uses third-party dependencies, compress the dependencies and the function JAR file into a ZIP file, and then upload the ZIP file.

+

You can upload a Java deployment package in two ways.

+
  • When creating a ZIP file, place the handler file under the root directory to ensure that your code can run normally after being decompressed.
  • The size of the decompressed source code cannot exceed 1.5 GB. If the code is too large, contact the customer service.
+
+ +
+

Go

Uploading a Deployment Package

+

You can only upload a Go deployment package in ZIP format. There are two ways to upload it.

+
  • When creating a ZIP file, place the handler file under the root directory to ensure that your code can run normally after being decompressed.
  • The size of the decompressed source code cannot exceed 1.5 GB. If the code is too large, contact the customer service.
+
+ +
+

Custom Runtime

Editing Code Inline

+

After you edit code inline and upload it to FunctionGraph, the console compresses your code and the related configurations into a deployment package that FunctionGraph can run.

+

Uploading a Deployment Package

+

If your code uses other resources, such as a graphic library for image processing, first create a deployment package, and then upload the package to the FunctionGraph console. You can upload a deployment package for a custom runtime in two ways.

+
  • When creating a ZIP file, place the handler file under the root directory to ensure that your code can run normally after being decompressed.
  • The size of the decompressed source code cannot exceed 1.5 GB. If the code is too large, contact the customer service.
+
+ +
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0153.html b/docs/fg/umn/functiongraph_01_0153.html new file mode 100644 index 00000000..0c02b165 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0153.html @@ -0,0 +1,17 @@ + + +

Creating a Function from Scratch

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_01_0154.html b/docs/fg/umn/functiongraph_01_0154.html new file mode 100644 index 00000000..ca420390 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0154.html @@ -0,0 +1,166 @@ + + +

Configuring Environment Variables

+

Overview

Environment variables allow you to pass dynamic parameters to a function without modifying code.

+
+

Scenario

+
+

Procedure

You can configure encryption settings and environment variables to dynamically pass settings to your function code and libraries without changing your code.

+
Figure 1 Adding environment variables
+

For example, for Node.js, encryption settings and environment variable values can be obtained from getUserData(string key) in Context.

+
  • Environment variables and encryption settings are user-defined key-value pairs that store function settings. Keys can contain letters, digits, and underscores (_), and must start with a letter.
  • The total length of the key and value cannot exceed 4096 characters.
  • When you define environment variables, FunctionGraph displays all your input information in plain text. For security purposes, do not include sensitive information.
  • After encryption is enabled, key-value pairs are encrypted on the console and will remain encrypted during transmission.
+
+
+

Preset Parameters

The following lists preset parameters. Do not configure environment variables with the same names as any of these parameters.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Preset parameters and description

Environment Variable

+

Description

+

Obtaining Method and Default Value

+

RUNTIME_PROJECT_ID

+

Project ID

+

Obtain the value from a Context interface or a system environment variable.

+

RUNTIME_FUNC_NAME

+

Function name

+

Obtain the value from a Context interface or a system environment variable.

+

RUNTIME_FUNC_VERSION

+

Function version

+

Obtain the value from a Context interface or a system environment variable.

+

RUNTIME_HANDLER

+

Handler

+

Obtain the value from a system environment variable.

+

RUNTIME_TIMEOUT

+

Execution timeout allowed for a function.

+

Obtain the value from a system environment variable.

+

RUNTIME_USERDATA

+

Value passed through an environment variable

+

Obtain the value from a Context interface or a system environment variable.

+

RUNTIME_CPU

+

CPU usage of a function. The value is in proportion to MemorySize.

+

Obtain the value from a Context interface or a system environment variable.

+

RUNTIME_MEMORY

+

Memory size configured for a function

+

Obtain the value from a Context interface or a system environment variable.

+

Unit: MB

+

RUNTIME_MAX_RESP_BODY_SIZE

+

Maximum size of a response body

+

Obtain the value from a system environment variable.

+

Default value: 6,291,456 bytes

+

RUNTIME_INITIALIZER_HANDLER

+

Initializer

+

+

Obtain the value from a system environment variable.

+

+

RUNTIME_INITIALIZER_TIMEOUT

+

Initialization timeout of a function

+

Obtain the value from a system environment variable.

+

RUNTIME_ROOT

+

Runtime package path

+

Obtain the value from a system environment variable.

+

Default value: /home/snuser/runtime

+

RUNTIME_CODE_ROOT

+

Path for storing code in a container

+

Obtain the value from a system environment variable.

+

Default value: /opt/function/code

+

RUNTIME_LOG_DIR

+

Path for storing system logs in a container

+

Obtain the value from a system environment variable.

+

Default value: /home/snuser/log

+
+
+
+

Example

You can use environment variables to configure which directory to install files in, where to store outputs, and how to store connection and logging settings. These settings are decoupled from the application logic, so you do not need to update your function code when you change the settings.

+

In the following code snippet, obs_output_bucket is the bucket used for storing processed images.

+
def handler(event, context):
+    srcBucket, srcObjName = getObsObjInfo4OBSTrigger(event)
+    obs_address = context.getUserData('obs_address')
+    outputBucket = context.getUserData('obs_output_bucket')
+    if obs_address is None:
+        obs_address = '{obs_address_ip}'
+    if outputBucket is None:
+        outputBucket = 'casebucket-out'
+            
+    ak = context.getAccessKey()
+    sk = context.getSecretKey()
+
+    # download file uploaded by user from obs
+    GetObject(obs_address, srcBucket, srcObjName, ak, sk)
+
+    outFile = watermark_image(srcObjName)
+    
+    # Upload converted files to a new OBS bucket.
+    PostObject (obs_address, outputBucket, outFile, ak, sk)
+
+    return 'OK'
+
+

Using environment variable obs_output_bucket, you can flexibly set the OBS bucket used for storing output images.

+
Figure 2 Environment variables
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0160.html b/docs/fg/umn/functiongraph_01_0160.html new file mode 100644 index 00000000..e2f6466c --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0160.html @@ -0,0 +1,15 @@ + + +

Invoking the Function

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0160_0.html b/docs/fg/umn/functiongraph_01_0160_0.html new file mode 100644 index 00000000..554954e0 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0160_0.html @@ -0,0 +1,212 @@ + + +

Permissions Management

+

If you need to assign different permissions to employees in your enterprise to access your FunctionGraph resources, IAM is a good choice for fine-grained permissions management. IAM provides identity authentication, permissions management, and access control, helping you secure access to your cloud resources.

+

With IAM, you can use your account to create IAM users for your employees, and assign permissions to the users to control their access to specific resource types. For example, some software developers in your enterprise need to use FunctionGraph resources but must not delete them or perform any high-risk operations. To achieve this result, you can create IAM users for the software developers and grant them only the permissions required for using FunctionGraph resources.

+

If your account does not need individual IAM users for permissions management, you may skip over this chapter.

+

FunctionGraph Permissions

By default, new IAM users do not have any permissions assigned. You need to add a user to one or more groups, and assign permissions policies to these groups. The user then inherits permissions from the groups it is a member of. This process is called authorization. After authorization, the user can perform specified operations on FunctionGraph based on the permissions.

+

FunctionGraph is a project-level service deployed and accessed in specific physical regions. To assign FunctionGraph permissions to a user group, specify the scope as region-specific projects and select projects in relevant regions for the permissions to take effect. If All projects is selected, the permissions will take effect for the user group in all region-specific projects. When accessing FunctionGraph, the users need to switch to a region where they have been authorized to use the FunctionGraph service.

+

You can grant users permissions by using roles and policies.

+ +

Table 1 lists all the system policies supported by FunctionGraph.

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Permissions description

Role/Policy Name

+

Description

+

Category

+

Dependency

+

FunctionGraph FullAccess

+

This policy grants all permissions for FunctionGraph.

+

System-defined policy

+

N/A

+

FunctionGraph ReadOnlyAccess

+

This policy grants read-only permissions for FunctionGraph.

+

System-defined policy

+

N/A

+

FunctionGraph CommonOperations

+

This policy grants permissions to query functions and triggers, and invoke functions.

+

System-defined policy

+

N/A

+
+
+

If an IAM user granted the FunctionGraph FullAccess permission has no permission to create a certain type of trigger or use a certain function, the relevant service or function does not support fine-grained authentication. In this case, grant the admin permission for this service or function to the user. These services and functions include:

+
  • CTS and DIS: These do not support fine-grained authentication. Add the admin permission for them.
  • SMN: This supports fine-grained authentication in some regions. If needed, add the admin permission for this service.
+

For more information about the permissions required to use these triggers and relevant functions, see Table 2.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Permissions required to use triggers and relevant functions

Trigger/Function

+

Permission

+

APIG (dedicated)

+

apig:instances:get

+

apig:instances:create

+

apig:instances:update

+

apig:instances:list

+

apig:sharedInstance:operate

+

CTS

+

cts:notification:create

+

cts:notification:delete

+

cts:notification:update

+

cts:operation:list

+

cts:tracker:list

+

cts:trace:list

+

DDS

+

dds:instance:get

+

dds:instance:list

+

DIS

+

dis:streams:list

+

LTS

+

lts:groups:create

+

lts:groups:get

+

lts:groups:list

+

lts:groups:put

+

lts:logstreams:delete

+

lts:logstreams:list

+

lts:topics:get

+

lts:subscriptions:create

+

lts:subscriptions:delete

+

lts:subscriptions:put

+

lts:structConfig:create

+

lts:structConfig:get

+

OBS

+

obs:bucket:GetBucketLocation

+

obs:bucket:GetBucketNotification

+

obs:bucket:PutBucketNotification

+

obs:bucket:ListBucket

+

SMN

+

smn:topic:list

+

smn:topic:update

+
+
+

Table 3 lists the common operations supported by each system-defined policy of FunctionGraph. Please choose proper system-defined policies according to this table.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Common operations supported by each system-defined policy

Operation

+

FunctionGraph ReadOnlyAccess

+

FunctionGraph CommonOperations

+

FunctionGraph FullAccess

+

Creating functions

+

×

+

×

+

+

Querying functions

+

+

+

+

Modifying functions

+

×

+

×

+

+

Deleting functions

+

×

+

×

+

+

Invoking functions

+

×

+

+

+

Querying function logs

+

+

+

+

Viewing function metrics

+

+

+

+
+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0170.html b/docs/fg/umn/functiongraph_01_0170.html new file mode 100644 index 00000000..5dd6d1da --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0170.html @@ -0,0 +1,17 @@ + + +

Querying Function Logs

+

FunctionGraph is interconnected with LTS, allowing you to view function logs without the need for any configurations.

+

Viewing Function Logs

On the FunctionGraph console, view function logs in the following ways:

+ +
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0180.html b/docs/fg/umn/functiongraph_01_0180.html new file mode 100644 index 00000000..85004626 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0180.html @@ -0,0 +1,29 @@ + + +

Managing Versions

+

Overview

FunctionGraph allows you to publish one or more versions throughout the development, test, and production processes to manage your function code. The code and environment variables of each version are saved as a snapshot. After the function code is published, you can modify settings as required.

+

After a function is created, the default version is latest. Each function has the latest version. After the function code is published, you can modify the version configuration as required.

+

A version is a snapshot of a function and corresponds to a tag in code. Each version contains the configuration and code of the function. By default, no trigger is bound to a new version. After a version is published, the configuration (such as environment variables) and code of the version cannot be updated, to ensure stability and traceability.

+
+
+

Publishing a Version

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. On the Version tab page, click Publish new version.
    Figure 1 Parameters for publishing a new version
    +
    • Version: Enter a version number. If no version number is specified, the system automatically generates a version number based on the current date, for example, v20220510-190658.
    • Description: Enter a description for the version. This parameter is optional.
    +
    +
  4. Click OK. The system automatically publishes a version. Then you will be redirected to the new version.
    • You can publish up to 20 versions for a function.
    • For a function whose latest version has been configured with reserved instances, the function configuration can be modified. By default, non-latest versions do not have reserved instances.
    • No disk is attached to a new version created based on latest. Environment variables cannot be set if no trigger has been bound to the version.
    +
    +
+
+

Deleting a Version

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. On the Version tab page of the latest version, select the version to delete.
    Figure 2 Deleting a version
    +
    • The latest version of a function cannot be deleted.
    • If a function version associated with aliases is deleted, the aliases will also be deleted.
    +
    +
  4. Click OK to delete the version.

    Deleting a version will permanently delete the associated code, configuration, alias, and event source mapping, but will not delete logs. Deleted versions cannot be recovered. Exercise caution when performing this operation.

    +
    +
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0180_0.html b/docs/fg/umn/functiongraph_01_0180_0.html new file mode 100644 index 00000000..14848519 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0180_0.html @@ -0,0 +1,28 @@ + + +

Product Advantages

+

No Servers to Manage

FunctionGraph automatically runs your code and frees you from provisioning and managing servers, allowing you to focus on business innovation.

+
+

Auto Scaling

FunctionGraph automatically scales to suit fluctuations in resource demands and ensures that the service remains accessible even during peaks and spikes.

+

It automatically scales in/out resources based on the number of service requests, and distributes requests to function instances through automatic load balancing.

+

In addition, the system intelligently preheats instances for the traffic loads to reduce the impact of cold start on your services.

+
+

Event-based Triggering

FunctionGraph integrates with multiple cloud services using an event-based triggering mechanism to meet service requirements.

+

It is interconnected with the LTS and Cloud Eye services, allowing you to view function logs and metrics without the need for any configurations.

+
+

High Availability

If an instance becomes faulty, FunctionGraph starts another instance to process new requests and releases resources from the unhealthy instance.

+
+

Pay per Use

You will be billed based on the number of function requests and execution duration and will not be charged when your code is not running.

+
+

Reserved Instance Billing

Reserved instances can be created to initialize functions to eliminate the influence of cold start on your services. Reserved instances are always alive in the execution environment.

+

For the use of reserved instances, you will be billed based on the number of requests and the running duration of reserved instances. The minimum running duration is 60s.

+
+

Dynamic Resource Adjustment

Resource specifications can be dynamically adjusted to minimize resource usage and reduce costs.

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0200.html b/docs/fg/umn/functiongraph_01_0200.html new file mode 100644 index 00000000..b687e6de --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0200.html @@ -0,0 +1,33 @@ + + +

Creating Triggers

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0200_0.html b/docs/fg/umn/functiongraph_01_0200_0.html new file mode 100644 index 00000000..0e756b75 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0200_0.html @@ -0,0 +1,223 @@ + + +

Product Features

+

Function Management

FunctionGraph provides console-based function management.

+ +
+

Trigger

Table 3 lists the invocation modes for different trigger types.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Function invocation modes

Trigger

+

Function Invocation Mode

+

SMN trigger

+

Asynchronous invocation

+

APIG trigger

+

Synchronous invocation

+

OBS trigger

+

Asynchronous invocation

+

Data Ingestion Service (DIS) trigger

+

Asynchronous invocation

+

Timer trigger

+

Asynchronous invocation

+

Log Tank Service (LTS) trigger

+

Asynchronous invocation

+

Cloud Trace Service (CTS) trigger

+

Asynchronous invocation

+

Document Database Service (DDS) trigger

+

Asynchronous invocation

+

Kafka trigger

+

Asynchronous invocation

+
+
+
+

Logs and Metrics

FunctionGraph graphically displays function monitoring metrics and collects function running logs, enabling you to view function statuses, and locate problems by querying logs.

+

To query logs, see Managing Function Logs.

+

For details about monitoring metric, see Function Monitoring.

+

For details about tenant-level function monitoring metrics, see Introduction to Dashboard.

+
+

Function Initialization

The initializer interface is introduced to:

+ +
+

HTTP Functions

You can set Function Type to HTTP Function on the function creation page. HTTP functions are designed to optimize web services. You can send HTTP requests to URLs to trigger function execution. HTTP functions support APIG and API Connect (APIC) triggers only.

+
+

Custom Images

You can directly package and upload container images. The images are loaded and started by the platform and can be called in a similar way as HTTP functions. Unlike the previous code upload mode, you can use a custom code package, which is flexible and reduces migration costs.

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0201.html b/docs/fg/umn/functiongraph_01_0201.html new file mode 100644 index 00000000..7c825523 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0201.html @@ -0,0 +1,49 @@ + + +

Configuring Initialization

+

Overview

The initializer of a function is executed after an instance is started. The instance starts to process requests only after the initializer is executed. The initializer is executed only once during the lifecycle of a function instance.

+
+

Scenario

The service logic shared by multiple requests can be implemented in the initializer to reduce the latency. For example, the logic of loading a deep learning model with large specifications or building a connection pool for databases.

+
+

Prerequisites

You have created a function.

+
+

Initializing a Function

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Click the Configuration tab and choose Advanced Settings.

    Figure 1 Enabling initialization
    + +
    + + + + + + + + + + + + + +
    Table 1 Parameter configuration

    Parameter

    +

    Description

    +

    Initialization

    +

    Enable initialization if needed.

    +

    Initialization Timeout (s)

    +

    Maximum duration the function can be initialized. Set this parameter if you enable function initialization.

    +

    The value ranges from 1s to 300s.

    +

    Initializer

    +

    You can enable function initialization on the Configuration tab page. The initializer must be named in the same way as the handler. For example, for a Node.js or Python function, set an initializer name in the format of [file name].[initialization function name].

    +
    NOTE:

    This parameter is not required if function initialization is disabled.

    +
    +
    +
    +
    • Set the initializer in the same way as the handler. For example, for a Node.js or Python function, set an initializer name in the format of [file name].[initialization function name].
    • For details about the function code configuration, see Creating a Deployment Package.
    +
    +

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0202.html b/docs/fg/umn/functiongraph_01_0202.html new file mode 100644 index 00000000..c7ab3246 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0202.html @@ -0,0 +1,52 @@ + + +

Using an SMN Trigger

+

This section describes how to create an SMN trigger and publish a message to trigger a function.

+

For details about the SMN event source, see section "Supported Event Sources".

+

Prerequisites

+
+

Creating an SMN Trigger

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Triggers and click Create Trigger.

    Figure 1 Creating a trigger
    +

  4. Set the following parameters:

    • Trigger Type: Select Simple Message Notification (SMN).
    • Topic Name: Select a topic, for example, smn-test.
    +

  5. Click OK.

    After the SMN trigger is created, a subscription is generated for the corresponding topic on the SMN console.

    +
    +

+
+

Publishing a Message to Trigger the Function

On the SMN console, publish a message to the smn-test topic. For details, see Publishing a Text Message.

+

Table 1 describes the parameters required for publishing a message.

+ +
+ + + + + + + + + + + + + +
Table 1 Parameters required for publishing a message

Parameter

+

Description

+

Subject

+

Enter SMN-Test.

+

Message Format

+

Select Text.

+

Message

+

Enter {"message":"hello"}.

+
+
+

After a message is published, the function is triggered automatically. For details about example events, see section "Supported Event Sources".

+
+
+

Viewing the Execution Result

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click a function to go to the function details page.
  3. Choose Monitoring > Logs to query function running logs.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0204.html b/docs/fg/umn/functiongraph_01_0204.html new file mode 100644 index 00000000..186b88d1 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0204.html @@ -0,0 +1,95 @@ + + +

Using an APIG (Dedicated) Trigger

+

Prerequisites

You have created an API group, for example, APIGroup_test. For details, see Creating an API Group.

+
+

Creating an APIG Trigger

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. On the Function List page, click Create Function in the upper right corner.
  3. Set the following parameters:

    • Function Name: Enter a function name, for example, apig.
    • Agency: Select Use no agency.
    • Enterprise Project: Select default.
    • Runtime: Select Python 2.7.
    +

  4. Click Create.
  5. On the Code tab page, copy the following code to the code window and click Deploy.

    # -*- coding:utf-8 -*-
    +import json
    +def handler (event, context):
    +    body = "<html><title>Functiongraph Demo</title><body><p>Hello, FunctionGraph!</p></body></html>"
    +    print(body)
    +    return {
    +        "statusCode":200,
    +        "body":body,
    +        "headers": {
    +            "Content-Type": "text/html",
    +        },        
    +        "isBase64Encoded": False
    +    }
    +

  6. Choose Configuration > Triggers and click Create Trigger.

    Figure 1 Creating a trigger
    +

  7. Configure the trigger information.

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 1 Trigger information

    Parameter

    +

    Description

    +

    Trigger Type

    +

    Select API Gateway (Dedicated Gateway).

    +

    API Instance

    +

    Select an instance. If no instance is available, click Create Instance.

    +

    API Name

    +

    Enter an API name, for example, API_apig.

    +

    API Group

    +

    An API group is a collection of APIs. You can manage APIs by API group.

    +

    Select APIGroup_test.

    +

    Environment

    +

    An API can be called in different environments, such as production, test, and development environments. APIG supports environment management, which allows you to define different request paths for an API in different environments.

    +

    To ensure that the API can be called, select RELEASE.

    +

    Security Authentication

    +

    There are three authentication modes:

    +
    • App: AppKey and AppSecret authentication. This mode is of high security and is recommended.
    • IAM: IAM authentication. This mode grants access permissions to IAM users only and is of medium security.
    • None: No authentication. This mode grants access permissions to all users.
    +

    Select None.

    +

    Protocol

    +

    There are two types of protocols:

    +
    • HTTP
    • HTTPS
    +

    Select HTTPS.

    +

    Timeout (ms)

    +

    Enter 5000.

    +
    +
    +

  8. Click OK.

    Figure 2 Creating a trigger
    +
    1. URL indicates the calling address of the APIG trigger.
    2. After the APIG trigger is created, an API named API_apig is generated on the APIG console. You can click the API name in the trigger list to go to the APIG console.
    +
    +

+
+

Invoking the Function

  1. Enter the URL of the APIG trigger in the address bar of a browser, and press Enter.
  2. View the execution result, as shown in Figure 3.

    Figure 3 Returned result
    +
    1. The input for APIG invocation comes from an event template provided by the function. For details, see Table 2.
    2. The function response for APIG invocation is encapsulated and must contain body(String), statusCode(int), headers(Map), and isBase64Encoded(boolean).
    +
    +

+
+

Viewing the Execution Result

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click a function to go to the function details page.
  3. Choose Monitoring > Logs to query function running logs.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0205.html b/docs/fg/umn/functiongraph_01_0205.html new file mode 100644 index 00000000..7b7ec1c9 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0205.html @@ -0,0 +1,24 @@ + + +

Using an OBS Trigger

+

For details about the OBS event source, see section "Supported Event Sources".

+

Prerequisites

Before creating a trigger, ensure that you have prepared the following:

+ +
+

Creating an OBS Trigger

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Triggers and click Create Trigger.

    Figure 1 Creating a trigger
    +

  4. Set the following parameters:

    • Trigger Type: Select Object Storage Service (OBS).
    • Bucket Name: Specify the OBS bucket to be used as an event source, for example, obs-cff.
    • Events: Select events that will trigger the function. In this example, select Put, Post, and Delete. When files in the obs_cff bucket are updated, uploaded, or deleted, the function is triggered.
    • Event Notification Name: Specify the name of the event notification to be sent by SMN when an event occurs.
    • Prefix: Enter a keyword for limiting notifications to those about objects whose names start with the matching characters. This limit can be used to filter the names of OBS objects.
    • Suffix: Enter a keyword for limiting notifications to those about objects whose names end with the matching characters. This limit can be used to filter the names of OBS objects.
    +

  5. Click OK.
+
+

Triggering a Function

On the OBS console, upload an image ZIP package to the obs-cff bucket. For details, see Uploading a File.

+

After the ZIP package is uploaded to the obs-cff bucket, the HelloWorld function is triggered.

+
+
+

Viewing the Execution Result

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click a function to go to the function details page.
  3. Choose Monitoring > Logs to query function running logs.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0206.html b/docs/fg/umn/functiongraph_01_0206.html new file mode 100644 index 00000000..972d2c4e --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0206.html @@ -0,0 +1,55 @@ + + +

Using a DIS Trigger

+

For details about the DIS event source, see section "Supported Event Sources".

+

Prerequisites

Before creating a trigger, ensure that you have prepared the following:

+ +
+

Setting an Agency

Before creating a DIS trigger, set an agency to delegate FunctionGraph to access DIS. For details on how to create an agency, see Configuring Agency Permissions.

+

Since you did not specify an agency while creating the HelloWorld function, specify one first.

+
  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Permissions, and change the agency to serverless-trust created in Configuring Agency Permissions.
  4. Click Save.
+
+

Creating a DIS Trigger

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Triggers and click Create Trigger.
  4. Set the following parameters:

    • Trigger Type: Select Data Ingestion Service (DIS).
    • Stream Name: Select a DIS stream, for example, dis-function.
    • Max. Fetch Bytes: Maximum volume of data that can be fetched in each request. Only the records smaller than this value will be fetched. The value ranges from 1 KB to 4 MB.
    • Starting Position: Specify a position in the specified stream from which to start reading data.
      • TRIM_HORIZON: Data is read from the earliest valid records that are stored in the partition.
      • LATEST: Data is read just after the most recent record in the partition. This setting ensures that you always read the latest data.
      +
    • Pull Period: Set a period for pulling data from the stream.
    • Serial Data Processing: If this option is selected, FunctionGraph pulls data from the stream only after previous data is processed. If this option is not selected, FunctionGraph pulls data from the stream as long as the pull period ends.
    +

  5. Click OK.
+
+

Configuring a DIS Event to Trigger the Function

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. On the function details page, select a version.
  4. On the Code tab page, click Test. The Configure Test Event dialog box is displayed.
  5. Set the parameters described in Table 1 and click Save.

    +

    + + + + + + + + + + + + + + + + +
    Table 1 Test event information

    Parameter

    +

    Description

    +

    Configure Test Event

    +

    You can choose to create a test event or edit an existing one.

    +

    Use the default option Create new test event.

    +

    Event Template

    +

    Select Data Ingestion Service (DIS) to use the built-in DIS event template.

    +

    Event Name

    +

    The event name can contain 1 to 25 characters and must start with a letter and end with a letter or digit. Only letters, digits, underscores (_), and hyphens (-) are allowed. For example, dis-123test.

    +

    Event data

    +

    The system automatically loads the built-in DIS event template, which is used in this example without modifications.

    +
    +
    +

  6. Click Test. The function test result is displayed.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0207.html b/docs/fg/umn/functiongraph_01_0207.html new file mode 100644 index 00000000..ff636748 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0207.html @@ -0,0 +1,21 @@ + + +

Using a Timer Trigger

+

Prerequisites

You have created a function. For details, see Creating a Function from Scratch.

+
+

Creating a Timer Trigger

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Triggers and click Create Trigger.

    Figure 1 Creating a trigger
    +

  4. Set the following parameters:

    • Trigger Type: Select Timer.
    • Timer Name: Enter a timer name, for example, Timer.
    • Rule: Set a fixed rate or a cron expression.
      • Fixed rate: The function is triggered at a fixed rate of minutes, hours, or days. You can set a fixed rate from 1 to 60 minutes, 1 to 24 hours, or 1 to 30 days.
      • Cron expression: The function is triggered based on a complex rule. For example, you can set a function to be executed at 08:30:00 from Monday to Friday. For more information, see Cron Expressions for a Function Timer Trigger.
      +
    • Enable Trigger: Choose whether to enable the timer trigger.
    • Additional Information: The additional information you configure will be put into the user_event field of the timer event source.
    +

  5. Click OK.
+

+
+

Viewing the Execution Result

After the timer trigger is created, the function is executed every 1 minute. To view the function running logs, perform the following steps:

+
  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click a function to go to the function details page.
  3. Choose Monitoring > Logs to query function running logs.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0208.html b/docs/fg/umn/functiongraph_01_0208.html new file mode 100644 index 00000000..ebffc5fc --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0208.html @@ -0,0 +1,52 @@ + + +

Using an LTS Trigger

+

For details about the timer event source, see section "Supported Event Sources".

+

Prerequisites

+
+

Creating an LTS Trigger

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Triggers and click Create Trigger.

    Figure 1 Creating a trigger
    +

  4. Set the following parameters:

    • Trigger Type: Select Log Tank Service (LTS).
    • Log Group: Select a log group, for example, LogGroup1.
    • Log Stream: Select a log stream, for example, LogStream1.
    +

  5. Click OK.
+
+

Configuring an LTS Event to Trigger the Function

When the size of an LTS event message exceeds 75 KB, it will be split into multiple messages by 75 KB to trigger the function.

+
+
  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. On the function details page, select a version.
  4. On the Code tab page, click Test. The Configure Test Event dialog box is displayed.
  5. Set the parameters described in Table 1 and click Save.

    +

    + + + + + + + + + + + + + + + + +
    Table 1 Test event information

    Parameter

    +

    Description

    +

    Configure Test Event

    +

    You can choose to create a test event or edit an existing one.

    +

    Use the default option Create new test event.

    +

    Event Template

    +

    Select lts-event-template.

    +

    Event Name

    +

    The event name can contain 1 to 25 characters and must start with a letter and end with a letter or digit. Only letters, digits, underscores (_), and hyphens (-) are allowed. For example, lts-123test.

    +

    Event data

    +

    The system automatically loads the built-in LTS event template, which is used in this example without modifications.

    +
    +
    +

  6. Click Test. The function test result is displayed.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0209.html b/docs/fg/umn/functiongraph_01_0209.html new file mode 100644 index 00000000..55f21053 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0209.html @@ -0,0 +1,118 @@ + + +

Using a CTS Trigger

+

For details about the CTS event source, see section "Supported Event Sources".

+

Prerequisites

You have created an agency on IAM. For details, see Configuring Agency Permissions.

+
+

Creating a CTS Trigger

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. On the Function List page, click Create Function in the upper right corner.
  3. Set the following parameters:

    • Function Name: Enter a function name, for example, HelloWorld.
    • Agency: Select Use no agency.
    • Enterprise Project: Select default.
    • Runtime: Select Python 2.7.
    +

  4. Click Create Function.
  5. On the Code tab page, copy the following code to the code window and click Deploy.

    # -*- coding:utf-8 -*-
    +'''
    +CTS trigger event:
    +{
    +  "cts":  {
    +        "time": "",
    +        "user": {
    +            "name": "userName",
    +            "id": "",
    +            "domain": {
    +                "name": "domainName",
    +                "id": ""
    +            }
    +        },
    +        "request": {},
    +        "response": {},
    +        "code": 204,
    +        "service_type": "FunctionGraph",
    +        "resource_type": "",
    +        "resource_name": "",
    +        "resource_id": {},
    +        "trace_name": "",
    +        "trace_type": "ConsoleAction",
    +        "record_time": "",
    +        "trace_id": "",
    +        "trace_status": "normal"
    +    }
    +}
    +'''
    +def handler (event, context):
    +    trace_name = event["cts"]["resource_name"]
    +    timeinfo = event["cts"]["time"]
    +    print(timeinfo+' '+trace_name)
    +

  6. Choose Configuration > Triggers and click Create Trigger.

    Figure 1 Creating a trigger
    +

  7. Configure the trigger information.

    +

    + + + + + + + + + + + + + + + + + + + +
    Table 1 Trigger information

    Parameter

    +

    Description

    +

    Trigger Type

    +

    Select Cloud Trace Service (CTS).

    +

    Event Notification Name

    +

    Enter a notification name, for example, Test.

    +

    Service Type

    +

    Select FunctionGraph.

    +

    Resource Type

    +

    Resource types supported by the selected service, such as triggers, instances, and functions.

    +

    Trace Name

    +

    Operations that can be performed on the selected resource type, such as creating or deleting a trigger.

    +
    +
    +

  8. Click OK.
+
+

Configuring a CTS Event to Trigger the Function

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. On the function details page, select a version, and click Test. The Configure Test Event dialog box is displayed.
  4. Set the parameters described in Table 2 and click Save.

    +

    + + + + + + + + + + + + + + + + +
    Table 2 Test event information

    Parameter

    +

    Description

    +

    Configure Test Event

    +

    You can choose to create a test event or edit an existing one.

    +

    Use the default option Create new test event.

    +

    Event Template

    +

    Select cts-event-template.

    +

    Event Name

    +

    Enter an event name, for example, cts-test.

    +

    Event data

    +

    The system automatically loads the event data in the CTS event template. You can modify the event data as required.

    +
    +
    +

  5. Click Test. The function test result is displayed.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0210.html b/docs/fg/umn/functiongraph_01_0210.html new file mode 100644 index 00000000..69f867b9 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0210.html @@ -0,0 +1,54 @@ + + +

Using a DDS Trigger

+

This section describes how to create a DDS trigger for a function, and invoke the function when a database table changes.

+

A function using a DDS trigger will be triggered every time a database table is updated. For details about the DDS event source, see section "Supported Event Sources".

+

Prerequisites

Before creating a trigger, ensure that you have prepared the following:

+ +
+

Creating a DDS Trigger

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Triggers and click Create Trigger.

    Figure 1 Creating a trigger
    +

  4. Set the following parameters:

    • Trigger Type: Select Document Database Service (DDS).
    • DB Instance: Select a DDS DB instance.
    • Password: Enter the password of DDS DB instance administrator rwuser.
    • Database: Enter the name of a database. Note that admin, local, and config are reserved database names and cannot be used here.
    • Collection: Enter the name of a database collection.
    • Batch Size: Set the number of records to be read from the database at a time.
    +

  5. Click OK.

    After VPC access is enabled, you need to configure corresponding subnet permissions for the DDS security group. For details about how to configure VPC access, see Configuring the Network.

    +
    +

+
+

Configuring a DDS Event to Trigger the Function

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. On the function details page, select a version, and click Test. The Configure Test Event dialog box is displayed.
  4. Set the parameters described in Table 1 and click Save.

    +

    + + + + + + + + + + + + + + + + +
    Table 1 Test event information

    Parameter

    +

    Description

    +

    Configure Test Event

    +

    You can choose to create a test event or edit an existing one.

    +

    Use the default option Create new test event.

    +

    Event Template

    +

    Select dds-event-template.

    +

    Event Name

    +

    The event name can contain 1 to 25 characters and must start with a letter and end with a letter or digit. Only letters, digits, underscores (_), and hyphens (-) are allowed. For example, dds-123test.

    +

    Event data

    +

    The system automatically loads the built-in DDS event template, which is used in this example without modifications.

    +
    +
    +

  5. Click Test. The function test result is displayed.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0211.html b/docs/fg/umn/functiongraph_01_0211.html new file mode 100644 index 00000000..0501af8d --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0211.html @@ -0,0 +1,19 @@ + + +

Metrics

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_01_0212.html b/docs/fg/umn/functiongraph_01_0212.html new file mode 100644 index 00000000..3773aa41 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0212.html @@ -0,0 +1,67 @@ + + +

Function Monitoring

+

FunctionGraph is interconnected with Cloud Eye, allowing you to view function metrics without the need for any configurations.

+

Viewing Function Metrics

FunctionGraph collects function metrics and displays aggregated results. Switch to your target function version before viewing metrics.

+
  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Monitoring > Metrics, select an interval (last day, last 3 days, or custom), and check the running status of the function.

    The following metrics are displayed: invocations, errors, duration (maximum, average, and minimum durations), throttles, and instance statistics.

    +
    +
+
+

Metric Description

Table 1 describes the function metrics.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Function metrics

Metric

+

Unit

+

Description

+

Invocations

+

Count

+

Total number of invocation requests, including invocation errors and throttled invocations. In case of asynchronous invocation, the count starts only when a function is executed in response to a request.

+

Duration

+

ms

+

Maximum Duration: the maximum duration a function is executed within a period.

+

Minimum Duration: the minimum duration a function is executed within a period.

+

Average Duration: the average duration a function is executed within a period.

+

Errors

+

Count

+

Number of times that your functions failed with error code 200 being returned. Errors caused by function syntax or execution are also included.

+

Throttles

+

Count

+

Number of times that FunctionGraph throttles your functions due to the resource limit.

+

Instance Statistics

+

Count

+

Numbers of concurrent requests and reserved instances.

+
+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0213.html b/docs/fg/umn/functiongraph_01_0213.html new file mode 100644 index 00000000..0005b997 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0213.html @@ -0,0 +1,223 @@ + + +

Function Metrics

+

Introduction

This section describes the FunctionGraph namespaces, function metrics, and dimensions reported to Cloud Eye. You can view function metrics and alarms by using the Cloud Eye console or calling APIs.

+
+

Namespaces

SYS.FunctionGraph

+
+

Function Metrics

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Function metrics

Metric ID

+

Metric Name

+

Description

+

Value Range

+

Monitored Object

+

Monitoring Period of Raw Data (Minute)

+

count

+

Invocations

+

Number of function invocations

+

Unit: Count

+

≥ 0 counts

+

Functions

+

5

+

failcount

+

Errors

+

Number of invocation errors

+

The following errors are included:

+
  • Function request error (causing an execution failure and returning error code 200)
  • Function syntax or execution error
+

Unit: Count

+

≥ 0 counts

+

Functions

+

5

+

failRate

+

Error rate

+

Percentage of invocation errors to the total invocations

+

Unit: %

+

0% ≤X≤ 100%

+

Functions

+

5

+

rejectcount

+

Throttles

+

Number of function throttles

+

That is, the number of times that FunctionGraph throttles your functions due to the resource limit.

+

Unit: Count

+

≥ 0 counts

+

Functions

+

5

+

concurrency

+

Number of concurrent requests

+

Maximum number of concurrent requests during function invocation.

+

Unit: Count

+

≥ 0 counts

+

Functions

+

5

+

reservedinstancenum

+

Number of reserved instances

+

Number of reserved instances

+

Unit: Count

+

≥ 0 counts

+

Functions

+

5

+

duration

+

Average duration

+

Average duration of function invocation

+

Unit: ms

+

≥ 0 ms

+

Functions

+

5

+

maxDuration

+

Maximum duration

+

Maximum duration of function invocation

+

Unit: ms

+

≥ 0 ms

+

Functions

+

5

+

minDuration

+

Minimum duration

+

Minimum duration of function invocation

+

Unit: ms

+

≥ 0 ms

+

Functions

+

5

+

systemErrorCount

+

System errors

+

Number of 200 errors that cause a failure in executing function requests. Unit: Count

+

≥ 0

+

Functions

+

5

+

functionErrorCount

+

Function errors

+

Number of syntax and execution errors. Unit: Count

+

≥ 0

+

Functions

+

5

+

payPerUseInstance

+

Number of elastic instances.

+

Number of elastic instances. Unit: Count

+

≥ 0

+

Functions

+

5

+
+
+
+

Dimensions

+
+ + + + + + + + + + +

Key

+

Value

+

package-functionname

+

App name-Function name

+

Example: default-myfunction_Python

+

projectId

+

Project ID of the tenant

+
+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0214.html b/docs/fg/umn/functiongraph_01_0214.html new file mode 100644 index 00000000..89048f35 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0214.html @@ -0,0 +1,57 @@ + + +

Using a Kafka Trigger

+

This section describes how to create a Kafka trigger and configure a Kafka event to trigger a function.

+

After a Kafka trigger is used, FunctionGraph periodically polls for new messages in a specific topic in a Kafka instance and passes the messages as input parameters to invoke functions. For details about the DMS for Kafka event source, see section "Supported Event Sources".

+

For details about the differences between DMS for Kafka and open-source Kafka, see Comparing DMS for Kafka and Open-Source Kafka.

+
+

Prerequisites

Before creating a trigger, ensure that you have prepared the following:

+ +
+

Creating a Kafka Trigger

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Triggers and click Create Trigger.

    Figure 1 Creating a trigger
    +

  4. Set the following parameters:

    • Trigger Type: Select DMS (for Kafka).
    • Instance: Select a Kafka premium instance.
    • Topic: Select a topic of the Kafka premium instance.
    • Batch Size: Set the number of messages to be retrieved from a topic each time.
    • Username: Enter the username of the instance if SSL has been enabled for it.
    • Password: Enter the password of the instance if SSL has been enabled for it.
    +

  5. Click OK.

    • After VPC access is enabled, you need to configure corresponding subnet permissions for the Kafka security group. For details about how to configure VPC access, see Configuring the Network.
    • You can create a Kafka trigger with multiple topics. You do not need to create one such trigger for each topic in the same instance.
      Figure 2 Selecting multiple topics
      +
    +
    +

+
+

Configuring a Kafka Event to Trigger the Function

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. On the function details page, select a version.
  4. On the Code tab page, click Test. The Configure Test Event dialog box is displayed.
  5. Set the parameters described in Table 1 and click Save.

    +

    + + + + + + + + + + + + + + + + +
    Table 1 Test event information

    Parameter

    +

    Description

    +

    Configure Test Event

    +

    You can choose to create a test event or edit an existing one.

    +

    Use the default option Create new test event.

    +

    Event Template

    +

    Select DMS (for Kafka) to use the built-in Kafka event template.

    +

    Event Name

    +

    The event name can contain 1 to 25 characters and must start with a letter and end with a letter or digit. Only letters, digits, underscores (_), and hyphens (-) are allowed. For example, kafka-123test.

    +

    Event data

    +

    The system automatically loads the built-in Kafka event template, which is used in this example without modifications.

    +
    +
    +

  6. Click Test. The function test result is displayed.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0215.html b/docs/fg/umn/functiongraph_01_0215.html new file mode 100644 index 00000000..b8270168 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0215.html @@ -0,0 +1,74 @@ + + +

Creating a Custom Policy

+

Custom policies can be created as a supplement to the system policies of FunctionGraph.

+

You can create custom policies in either of the following ways:

+ +

For details, see section "Creating a Custom Policy". This section introduces examples of common FunctionGraph custom policies.

+

Example Custom Policies

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0222.html b/docs/fg/umn/functiongraph_01_0222.html new file mode 100644 index 00000000..c998ead5 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0222.html @@ -0,0 +1,65 @@ + + +

Configuring the Network

+

Public Access

By default, functions can access services on public networks. If the target public network service requires whitelist verification using a fixed IP address, enable VPC access, configure a NAT gateway for the VPC, and bind an Elastic IP (EIP) to the gateway. For details, see Configuring a Fixed Public IP Address

+
+

Configuring VPC Access

Functions can access resources in a VPC bound to it. If a function needs both VPC and public access, configure a NAT gateway for the VPC and bind an EIP to the gateway. For details, see Configuring a Fixed Public IP Address.

+

Required Permissions

+

Configure an agency by referring to Configuring Agency Permissions.

+ +

Procedure

+
  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Network, enable VPC Access, and specify a VPC and subnet.
    Figure 1 Configuring VPC access
    +
    1. For details on how to create a VPC and a subnet, see section "Creating a VPC".
    2. Specify an agency with VPC administrator permissions for the function. For details, see Configuring Agency Permissions.
    3. You can bind functions in a project to up to four different subnets in any VPCs. (Each project has a unique 32-digit project ID, which is allocated when your account is created. The project IDs of your account and IAM user are the same.)
    +
    +
  4. Click Save.
+
+

+ +

Configuring a Fixed Public IP Address

If a function needs to access public network resources in a VPC or requires a fixed public IP address, configure a NAT gateway for the VPC and bind an EIP to the gateway.

+

Prerequisites

+
  1. You have created a VPC and a subnet according to section "Creating a VPC".
  2. You have obtained an EIP according to section "Assigning an EIP".
+

Procedure

+
  1. In the left navigation pane of the management console, choose Network > NAT Gateway to go to the NAT Gateway console. Then click Create NAT Gateway.
  2. On the displayed page, enter gateway information, select a VPC (for example, vpc-01) and subnet, and confirm and submit the settings. For details, see section "Creating a Public NAT Gateway".
  3. Click the NAT gateway name. On the details page that is displayed, click Add SNAT Rule, set the rule, and click OK.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0300.html b/docs/fg/umn/functiongraph_01_0300.html new file mode 100644 index 00000000..c9da078c --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0300.html @@ -0,0 +1,35 @@ + + +

Configuring Functions

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0301.html b/docs/fg/umn/functiongraph_01_0301.html new file mode 100644 index 00000000..a3aaff57 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0301.html @@ -0,0 +1,16 @@ + + +

Managing Triggers

+

Enabling or Disabling a Trigger

You can enable or disable triggers as required. Note that OBS and APIG triggers cannot be disabled and can only be deleted.

+
  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the name of the desired function.
  3. Choose Configuration > Triggers. On the displayed page, locate the row that contains the target trigger, and click Disable or Enable.
+
+

Deleting a Trigger

You can delete triggers that will no longer be used.

+
  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the name of the desired function.
  3. Choose Configuration > Triggers. On the displayed page, locate the row that contains the target trigger and click Delete.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0302.html b/docs/fg/umn/functiongraph_01_0302.html new file mode 100644 index 00000000..e30a182b --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0302.html @@ -0,0 +1,184 @@ + + +

Online Debugging

+

Precautions

Event data is passed to the handler of your function as an input. After configuration, event data is persisted for later use. Each function can have a maximum of 10 test events.

+
+

Creating a Test Event

  1. Log in to the FunctionGraph console, and choose Functions > Function List in the navigation pane.
  2. Click the name of the desired function.
  3. On the function details page, select a version, and click Test.
  4. In the Configure Test Event dialog box, configure the test event information according to Table 1. The parameter marked with an asterisk (*) is mandatory.

    +

    + + + + + + + + + + + + + + + + +
    Table 1 Test event information

    Parameter

    +

    Description

    +

    Configure Test Event

    +

    You can choose to create a test event or edit an existing one.

    +

    Use the default option Create new test event.

    +

    Event Template

    +

    If you select blank-template, you can create a test event from scratch.

    +

    If you select a template, the corresponding test event in the template is automatically loaded. For details about event templates, see Table 2.

    +

    *Event Name

    +

    The event name can contain 1 to 25 characters and must start with a letter and end with a letter or digit. Only letters, digits, underscores (_), and hyphens (-) are allowed. For example, even-123test.

    +

    Event data

    +

    Enter a test event.

    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 2 Event template description

    Template Name

    +

    Description

    +

    API Gateway (Dedicated Gateway)

    +

    Simulates a dedicated APIG event to trigger your function.

    +

    Cloud Trace Service (CTS)

    +

    Simulates a CTS event to trigger your function.

    +

    Document Database Service (DDS)

    +

    Simulates a DDS event to trigger your function.

    +

    Data Ingestion Service (DIS)

    +

    Simulates a DIS event to trigger your function.

    +

    Log Tank Service (LTS)

    +

    Simulates an LTS event to trigger your function.

    +

    Object Storage Service (OBS)

    +

    Simulates an OBS event to trigger your function.

    +

    Simple Message Notification (SMN)

    +

    Simulates an SMN event to trigger your function.

    +

    Timer

    +

    Simulates a timer event to trigger your function.

    +

    DMS (for Kafka)

    +

    Simulates a Kafka event to trigger your function.

    +

    Kafka (OPENSOURCEKAFKA)

    +

    Simulates an open-source Kafka event to trigger your function.

    +

    Blank Template

    +

    The event is {"key": "value"}, which can be changed based on requirements.

    +

    Login Security Analysis

    +

    Serves as an input for the loginSecurity-realtime-analysis-python function template.

    +

    Image Classification

    +

    Serves as an input for the image-tag function template.

    +

    Pornographic Image Analysis

    +

    Serves as an input for the porn-image-analysis function template.

    +

    Speech Recognition

    +

    Serves as an input for the voice-analysis function template.

    +
    +
    +

  5. Click Create.
+
+

Testing a Function

After creating a function, you can test it online to check whether it can run properly as expected.

+
  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the name of the desired function.
  3. On the displayed function details page, select a version and test event, and click Test.

    Figure 1 Selecting a test event
    +

  4. Click Test. The function test result is displayed.

    The Log Output area displays a maximum of 2 KB logs. To view more logs, see Managing Function Logs.

    +
    +

+
+

Modifying a Test Event

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the name of the desired function.
  3. On the displayed function details page, select a version and click Configure Test Event. The Configure Test Event dialog box is displayed.
  4. In the Configure Test Event dialog box, modify the test event information according to Table 3.

    +

    + + + + + + + + + + + + + +
    Table 3 Test event information

    Parameter

    +

    Description

    +

    Create new test event

    +

    Create a test event.

    +

    Edit saved test event

    +

    Modify an existing test event.

    +

    Event data

    +

    Modify the test event code.

    +
    +
    +

  5. Click Save.
+
+

Deleting a Test Event

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the name of the desired function.
  3. On the function details page that is displayed, select a version, as shown in Figure 2.

    Figure 2 Selecting a FunctionGraph version
    +

  4. On the Code tab page, click Configure Test Event. The editing page is displayed, as shown in Figure 3.

    Figure 3 Selecting Configure Test Event
    +

  5. On the Configure Test Event page, select Edit saved test event. In the Saved Test Events list on the left, select the event to be deleted and click Delete.

    Figure 4 Deleting a test event
    + +
    + + + + + + + + + + +
    Table 4 Configuring test event information

    Parameter

    +

    Description

    +

    Create new test event

    +

    Select a test event template.

    +

    Edit saved test event

    +

    Select the test event you want to delete.

    +
    +
    +

+
+
+ diff --git a/docs/fg/umn/functiongraph_01_0303.html b/docs/fg/umn/functiongraph_01_0303.html new file mode 100644 index 00000000..6285e909 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0303.html @@ -0,0 +1,91 @@ + + +

Configuring Single-Instance Multi-Concurrency

+

Overview

By default, each function instance processes only one request at a specific time. For example, to process three concurrent requests, FunctionGraph triggers three function instances. To address this issue, FunctionGraph has launched the single-instance multi-concurrency feature, allowing multiple requests to be processed concurrently on one instance.

+
+

Scenario

This feature is suitable for functions which spend a long time to initialize or wait for a response from downstream services. The feature has the following advantages:

+ +
+

Comparison

If a function takes 5s to execute each time and you set the number of requests that can be concurrently processed by an instance to 1, three requests need to be processed in three instances, respectively. Therefore, the total execution duration is 15s.

+

When you set Max. Requests per Instance to 5, if three requests are sent, they will be concurrently processed by one instance. The total execution time is 5s.

+

If the maximum number of requests per instance is greater than 1, new instances will be automatically added when this number is reached. The maximum number of instances will not exceed Max. Instances per Function you set.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Comparison

Comparison Item

+

Single-Instance Single-Concurrency

+

Single-Instance Multi-Concurrency

+

Log printing

+

-

+

To print logs, Node.js Runtime uses the console.info() function, Python Runtime uses the print() function, and Java Runtime uses the System.out.println() function. In this mode, current request IDs are included in the log content. However, when multiple requests are concurrently processed by an instance, the request IDs are incorrect if you continue to use the preceding functions to print logs. In this case, use context.getLogger() to obtain a log output object, for example, Python Runtime.

+

log = context.getLogger()

+

log.info("test")

+

Shared variables

+

Not involved.

+

Modifying shared variables will cause errors. Mutual exclusion protection is required when you modify non-thread-safe variables during function writing.

+

Monitoring metrics

+

Perform monitoring based on the actual situation.

+

Under the same load, the number of function instances decreases significantly.

+

Flow control error

+

Not involved.

+

When there are too many requests, the error code in the body is FSS.0429, the status in the response header is 429, and the error message is Your request has been controlled by overload sdk, please retry later.

+
+
+
+

Configuring Single-Instance Multi-Concurrency

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Concurrency.
    Set parameters by referring to Table 2 and click Save.
    Figure 1 Concurrency configuration
    + +
    + + + + + + + + + + +
    Table 2 Description

    Parameter

    +

    Description

    +

    Max. Requests per Instance

    +

    Number of concurrent requests supported by a single instance. Value range: 1–1000.

    +

    Max. Instances per Function

    +

    Maximum number of instances in which a function can run. Default: 400. Maximum: 1000. –1: The function can run in any number of instances. 0: The function is disabled.

    +
    NOTE:

    Requests that exceed the processing capability of instances will be discarded.

    +

    Errors caused by excessive requests will not be displayed in function logs. You can obtain error details by referring to Configuring Asynchronous Execution Notification.

    +
    +
    +
    +
    +
+
+

Configuration Constraints

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0304.html b/docs/fg/umn/functiongraph_01_0304.html new file mode 100644 index 00000000..e4680867 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0304.html @@ -0,0 +1,157 @@ + + +

Creating an Alarm Rule

+

After creating a function and trigger, you can monitor the invocation and running statuses of the function in real time.

+

Viewing Function Metrics

FunctionGraph differentiates the metrics of a function by version, allowing you to query the metrics of a specific function version.

+
+

Procedure

Create an alarm rule for a function to report metrics to Cloud Eye so that you can view monitoring graphs and alarm messages on the Cloud Eye console.

+
  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the name of the desired function.
  3. On the displayed function details page, select a function version or alias, and choose Monitoring > Metrics.
  4. Click Create Alarm Rule.
  5. Set alarm parameters and click Next as shown in Figure 1.

    Figure 1 Creating an alarm rule
    +

  6. Enter a rule name and click OK.
+
+

Function Metrics

Table 1 lists the function metrics that can be monitored by Cloud Eye.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Function metrics

Metric

+

Display Name

+

Description

+

Unit

+

Upper Limit

+

Lower Limit

+

Recommended Threshold

+

Value Type

+

Dimension

+

count

+

Invocations

+

Number of function invocations

+

Count

+

-

+

0

+

-

+

int

+

package-functionname

+

failcount

+

Errors

+

Number of invocation errors

+

Count

+

-

+

0

+

-

+

int

+

package-functionname

+

rejectcount

+

Throttles

+

Number of function throttles

+

Count

+

-

+

0

+

-

+

int

+

package-functionname

+

duration

+

Average Duration

+

Average duration of function invocation

+

ms

+

-

+

0

+

-

+

int

+

package-functionname

+

maxDuration

+

Maximum Duration

+

Maximum duration of function invocation

+

ms

+

-

+

0

+

-

+

int

+

package-functionname

+

minDuration

+

Minimum Duration

+

Minimum duration of function invocation

+

ms

+

-

+

0

+

-

+

int

+

package-functionname

+
+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0310.html b/docs/fg/umn/functiongraph_01_0310.html new file mode 100644 index 00000000..1388c926 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0310.html @@ -0,0 +1,24 @@ + + +

Configuring Dynamic Memory

+

Overview

By default, a function is bound with only one resource specification. After enabling dynamic memory, you can configure a specification for request processing. If no specification is configured, the default one is used.

+
+

Scenario

Take video transcoding as an example. The size of a video file ranges from MB to GB. Different encoding formats and resolutions require different computing resources. To ensure performance, you usually need to configure a large resource specification, which however will result in a waste during low-resolution video (such as short video) processing. To solve this problem, implement the transcoding service with two functions: metadata obtaining and transcoding. Configure a specification for the transcoding function according to the metadata information to minimize the resources and cost.

+
+

Prerequisites

You have created a function according to Creating a Function from Scratch.

+
+

Procedure

  1. Log in to the FunctionGraph console, choose Functions > Function List in the navigation pane, and click the name of the created function.

    Figure 1 Selecting a created function
    +

  2. On the function details page, choose Configuration > Advanced Settings and enable Dynamic Memory.
  3. Call the synchronous or asynchronous function execution API, add X-Cff-Instance-Memory to the request header, and set the value to 128, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2560, 3072, 3584, 4096, 8192, or 10240.

    The following describes how to call an API using Postman. Add X-Cff-Instance-Memory to Headers and set the value to 512. If the API is called successfully, error code 200 will be returned.

    +
    Figure 2 Adding a request header and calling the function
    +
    • If Dynamic Memory is not enabled, the memory size set when the function is created will be used by default.
    • If Dynamic Memory is enabled but the memory value has not been set, the memory size set when the function is created will be used by default. If the API is called successfully, error code 200 will be returned.
    • If Dynamic Memory is enabled but the memory value is not 128, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2560, 3072, 3584, 4096, 8192, or 10240, error code FSS.0406 will be returned when the API is called. You only need to reset the memory value.
      Figure 3 Invocation failure
      +
    +
    +

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0320.html b/docs/fg/umn/functiongraph_01_0320.html new file mode 100644 index 00000000..f470df35 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0320.html @@ -0,0 +1,23 @@ + + +

Function Management

+

Overview

Function is a combination of code, runtime, resources, and settings required to achieve a specific purpose. It is the minimum unit that can run independently. A function can be triggered by triggers and automatically schedule required resources and environments to achieve expected results.

+
+

Exporting a Function

You can export the functions that you created.

+
  1. Log in to the FunctionGraph console, and choose Functions > Function List in the navigation pane.
  2. Click a function name.
  3. On the displayed function details page, choose Operation > Export Function in the upper right corner.

    • A user can export only one function at a time.
    • The exported function resource package cannot exceed 50 MB.
    • The name of the exported function resource package is in the format of function name+MD5 value of function code.zip.
    • The exported function resource package does not include alias information.
    +
    +

+
+

Disabling a Function

Disabled functions can no longer be executed.

+
  1. Return to the FunctionGraph console, and choose Functions > Function List in the navigation pane.
  2. Click the name of the function you want to disable.
  3. On the displayed function details page, click Disable Function in the upper right corner.
  4. On the displayed page, click Yes. The function is disabled.

    • Only functions of the latest version can be disabled.
    • Versions published based on the disabled latest version of a function are also disabled and can never be enabled.
    • After disabling a function, you can modify its code but cannot execute the function.
    +
    +

+
+

Enabling a Function

Disabled functions can be enabled again as required.

+
  1. Return to the FunctionGraph console, and choose Functions > Function List in the navigation pane.
  2. Click the name of the function you want to enable.
  3. On the displayed function details page, click Enable Function in the upper right corner.
+
+

Deleting a Function

You can delete unused functions to release resources.

+
  1. Return to the FunctionGraph console, and choose Functions > Function List in the navigation pane.
  2. In the Function List, locate the row that contains the target function and click Delete in the operation column. In the displayed dialog box, enter DELETE and click OK.
+
+
+ diff --git a/docs/fg/umn/functiongraph_01_0390_01.html b/docs/fg/umn/functiongraph_01_0390_01.html new file mode 100644 index 00000000..e42ae176 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0390_01.html @@ -0,0 +1,13 @@ + + +

Monitoring

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0390_03.html b/docs/fg/umn/functiongraph_01_0390_03.html new file mode 100644 index 00000000..dfdb3793 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0390_03.html @@ -0,0 +1,129 @@ + + +

Configuring Asynchronous Execution Notification

+

Overview

Functions can be invoked synchronously or asynchronously. In asynchronous mode, FunctionGraph sends a response immediately after persisting a request. The request result cannot be known in real time. To retry when an asynchronous request fails or obtain asynchronous processing results, configure asynchronous settings.

+
+

Scenario

+
+

Procedure

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Configure Async Notification. On the displayed page, click Edit next to Asynchronous Notification Policy.

    Figure 1 Configuring an asynchronous notification policy
    +

  4. Set parameters by referring to Table 1. For example, specify FunctionGraph for Target Service.

    Figure 2 Setting parameters
    + +
    + + + + + + + + + + + + + +
    Table 1 Parameter description

    Parameter

    +

    Description

    +

    Asynchronous Execution Notification Policy

    +
    • Max. Retries: maximum number of retries when asynchronous invocation fails. Value range: 0–3. Default value: 1.
    • Max. Validity Period (s): maximum lifetime of a message in seconds. Value range: 1–86,400.
    +

    Success Notification

    +

    Target Service: to which a notification will be sent if a function is executed successfully.

    +
    1. FunctionGraph
    2. OBS
    3. SMN
    +

    Failure Notification

    +

    Target Service: to which a notification will be sent if a function fails to be executed.

    +
    1. FunctionGraph
    2. OBS
    3. SMN
    +
    +
    +

  5. Click OK.

    1. Set an agency that allows FunctionGraph to access the target service.
    2. To avoid cyclic invocation, do not set two functions as asynchronous execution targets of each other.
    +
    +

+
+

Configuration Description

For details about how to set the target for asynchronous invocation, see Table 2. The following shows an example:

+
{
+        "timestamp": "2020-08-20T12:00:00.000Z+08:00",
+	"request_context": {
+	        "request_id": "1167bf8c-87b0-43ab-8f5f-26b16c64f252",
+	        "function_urn": "urn:fss:xx-xxxx-x:xxxxxxx:function:xxxx:xxxx:latest",
+	        "condition": "",
+	        "approximate_invoke_count": 0
+	 },
+	    "request_payload": "",
+	    "response_context": {
+	        "status_code": 200,
+	        "function_error": ""
+	  },
+	 "response_payload": "hello world!"
+}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Parameter description

Parameter

+

Description

+

timestamp

+

Time when the invocation starts.

+

request_context

+

Request context.

+

request_context.request_id

+

ID of an asynchronous invocation request.

+

request_context. function_urn

+

URN of the function that is to be executed asynchronously.

+

request_context.condition

+

Invocation error type.

+

request_context. approximate_invoke_count

+

Number of asynchronous invocation times. If the value is greater than 1, function execution has been retried.

+

request_payload

+

Original request payload.

+

response_context

+

Response context.

+

response_context.statusCode

+

Code returned after function invocation. If the code is not 200, a system error occurred.

+

response_context.function_error

+

Invocation error information.

+

response_payload

+

Payload returned after function execution.

+
+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0391.html b/docs/fg/umn/functiongraph_01_0391.html new file mode 100644 index 00000000..8a1afb3a --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0391.html @@ -0,0 +1,13 @@ + + +

Dependency Management

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0401.html b/docs/fg/umn/functiongraph_01_0401.html new file mode 100644 index 00000000..0bfb381c --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0401.html @@ -0,0 +1,22 @@ + + +

Creating a Function Using a Template

+

Overview

FunctionGraph provides templates to automatically complete code, and running environment configurations when you create a function, helping you quickly build applications.

+
+

Creating a Function

  1. Log in to the FunctionGraph console. In the navigation pane, choose Templates.
  2. On the page that is displayed, select the FunctionGraph service, select the context-class-introduction template for Python 2.7, and click Configure.

    The context-class-introduction template for Python 2.7 is used as an example. You can also select other templates.

    +
    +
  3. After you select a function template, the built-in code and configurations of the template are automatically loaded. The Create Function page is displayed.
  4. Set Function Name to context, select a created agency, retain default values for other parameters, and click Create Function.

    If no agency is configured, the following message will be displayed when the function is triggered:

    +
    Failed to access other services because no temporary AK, SK, or token has been obtained. Please set an agency.
    +
    +
  5. Set the parameters based for your service requirements.
+
+

Triggering a Function

  1. On the Code tab page of the context function, click Test in the upper right corner.
  2. In the Configure Test Event dialog box, select Blank Template and click Create.
  3. Click Test. After the test is complete, view the test result.
    Figure 1 Successful execution result
    +
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0402.html b/docs/fg/umn/functiongraph_01_0402.html new file mode 100644 index 00000000..cf672c67 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0402.html @@ -0,0 +1,112 @@ + + +

Configuring Disk Mounting

+

Introduction

FunctionGraph allows you to mount file systems to your functions. Multiple functions can share the same file system. This greatly expands the function execution and storage space compared with the temporary disk space allocated to a function.

+
+

Scenarios

FunctionGraph supports the following types of file systems:

+ +

Benefits from using these file systems:

+ +
+

Creating an Agency

Before adding file systems to a function, specify an agency with permissions for accessing the file system services for the function.

+

There is a limit on the maximum number of agencies you can create, and cloud service agencies cannot be modified. Therefore, you are advised to create an agency with high-level permissions, for example, Tenant Administrator, to allow a function to access all resources in the selected region. For more information, see Configuring Agency Permissions.

+
+

Mounting an SFS Turbo File System

Setting an Agency

+

Before mounting an SFS Turbo file system to a function, specify an agency that has been granted SFS Administrator and VPC Administrator permissions for the function. If no agencies are available, create one in IAM.

+

Configuring VPC Access

+

An SFS Turbo file system is accessible only in the VPC where it has been created. Before mounting such a file system to a function, enable VPC access for the function.

+
  1. On the SFS console, obtain the information about the VPC and subnet where a file system is to be mounted to your function. For details, see "File System Management".
  2. Enable VPC access by referring to Configuring the Network and enter the VPC and subnet obtained in 1.
+

Mounting an SFS Turbo File System

+

SFS Turbo file systems can be mounted in the same way as SFS file systems. Select a file system and set the access path.

+
+

Mounting an ECS Shared Directory

Specifying an Agency

+

Before mounting an ECS shared directory to a function, specify an agency that has been granted Tenant Guest and VPC Administrator permissions for the function. If no agencies are available, create one in IAM. For details, see Creating an Agency.

+

Configuring VPC Access

+

Before adding an ECS shared directory, specify the VPC where the ECS is deployed. View the VPC information on the details page of the ECS. Click the VPC name to go to the VPC details page, and view the subnet.

+

Set the acquired VPC and subnet for the function.

+

Mounting an ECS Directory

+

Enter a shared directory and function access path.

+
Figure 1 Setting the path
+
+

Follow-up Operations

A function can read and write data in an access path in the same way as in the mounted file system.

+

Function logs can be persisted by configuring the log path as a subdirectory in the access path.

+
Figure 2 Function template
+
+

Creating an NFS Shared Directory on ECS

  1. Linux
    • CentOS, SUSE, EulerOS, Fedora, or openSUSE
      1. Configure a YUM repository.

        1. Create a file named euleros.repo in the /etc/yum.repos.d directory. Ensure that the file name must end with .repo.

        +

        2. Run the following command to enter euleros.repo and edit the configuration:

        +
        vi /etc/yum.repos.d/euleros.repo
        +

        The EulerOS 2.0 SP3 YUM configuration is as follows:

        +
        [base] 
        +name=EulerOS-2.0SP3 base
        +baseurl=http://repo.cloud.com/euler/2.3/os/x86_64/
        +enabled=1
        +gpgcheck=1
        +gpgkey=http://repo.cloud.com/euler/2.3/os/RPM-GPG-KEY-EulerOS
        +

        The EulerOS 2.0 SP5 YUM configuration is as follows:

        +
        [base] 
        +name=EulerOS-2.0SP5 base
        +baseurl=http://repo.cloud.com/euler/2.5/os/x86_64/
        +enabled=1
        +gpgcheck=1
        +gpgkey=http://repo.cloud.com/euler/2.5/os/RPM-GPG-KEY-EulerOS
        +

        Parameter description:

        +

        name: repository name

        +
        baseurl: URL of the repository
        • HTTP-based network address: http://path/to/repo
        • Local repository address: file:///path/to/local/repo
        +
        +

        gpgcheck: indicates whether to enable the GNU privacy guard (GPG) to check the validity and security of RPM package resources. 0: The GPG check is disabled. 1: The GPG check is enabled. If this option is not specified, the GPG check is enabled by default.

        +
        +

        3. Save the configurations.

        +

        4. Run the following command to clear the cache:

        +
        yum clean all
        +
      2. Run the following command to install nfs-utils:
        yum install nfs-utils
        +
      3. Create a shared directory.

        When you open /etc/exports and need to create shared directory /sharedata, add the following configuration:

        +

        /sharedata 192.168.0.0/24(rw,sync,no_root_squash)

        +

        The preceding configuration is used to share the /sharedata directory with other servers in the 192.168.0.0/24 subnet.

        +

        After the preceding command is run, run the exportfs -v command to view the shared directory and check whether the setting is successful.

        +
        +
      4. Run the following commands to start the NFS service:
        systemctl start rpcbind
        +service nfs start
        +
      5. Create another shared directory.

        For example, to create the /home/myself/download directory, add the following configuration to /etc/exports:

        +

        /home/myself/download 192.168.0.0/24(rw,sync,no_root_squash)

        +

        Restart the NFS service.

        +
        service nfs restart
        +

        Alternatively, run the following command without restarting the NFS service:

        +
        exportfs -rv
        +
      6. (Optional) Enable automatic startup of the rpcbind service.

        Run the following command:

        +
        systemctl enable rpcbind
        +
      +
    • Ubuntu
      1. Run the following commands to install nfs-kernel-server:
        sudo apt-get update
        +sudo apt install nfs-kernel-server
        +
      2. Create a shared directory.

        When you open /etc/exports and need to create shared directory /sharedata, add the following configuration:

        +

        /sharedata 192.168.0.0/24(rw,sync,no_root_squash)

        +

        The preceding configuration is used to share the /sharedata directory with other servers in the 192.168.0.0/24 subnet.

        +

        After the preceding command is run, run the exportfs -v command to view the shared directory and check whether the setting is successful.

        +
        +
      3. Start the NFS service.
        service nfs-kernel-server restart
        +
      4. Create another shared directory.

        For example, to create the /home/myself/download directory, add the following configuration to /etc/exports:

        +

        /home/myself/download 192.168.0.0/24(rw,sync,no_root_squash)

        +

        Restart the NFS service.

        +
        service nfs restart
        +

        Alternatively, run the following command without restarting the NFS service:

        +
        exportfs -rv
        +
      +
    +
  1. Windows
+
  1. Install the NFS server.

    Paid software: haneWIN. Download the software at the haneWIN official website.

    +

    Free software: FreeNFS and WinNFSd. Download the software at the SourceForge website.

    +
  2. Enable the NFS function.
    • In the case of WinNFSd, see WinNFSd configuration.
    • In the case of haneWIN, perform the following steps:
      1. Run nfsctl.exe as the Windows administrator.
      2. Right-click in the blank area and choose Insert from the shortcut menu.
        Figure 3 Insert
        +
      +
    +
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0406.html b/docs/fg/umn/functiongraph_01_0406.html new file mode 100644 index 00000000..f6f8f2c3 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0406.html @@ -0,0 +1,360 @@ + + +

Custom Runtime

+

Scenarios

A runtime runs the code of a function, reads the handler name from an environment variable, and reads invocation events from the runtime APIs of FunctionGraph. The runtime passes event data to the function handler and returns the response from the handler to FunctionGraph.

+

FunctionGraph supports custom runtimes. You can use an executable file named bootstrap to include a runtime in your function deployment package. The runtime runs the function's handler method when the function is invoked.

+

Your runtime runs in the FunctionGraph execution environment. It can be a shell script or a binary executable file that is compiled in Linux.

+

After programming, simply package your code into a ZIP file (Java, Node.js, Python, and Go) or JAR file (Java), and upload the file to FunctionGraph for execution. When creating a ZIP file, place the handler file under the root directory to ensure that your code can run normally after being decompressed.

+

If you edit code in Go, zip the compiled file, and ensure that the name of the dynamic library file is consistent with the plug-in name of the handler. For example, if the name of the dynamic library file is testplugin.so, set the handler name to testplugin.Handler.

+
+
+

Runtime File bootstrap

If there is a file named bootstrap in your function deployment package, FunctionGraph executes that file. If the bootstrap file is not found or not executable, your function will return an error when invoked.

+

The runtime code is responsible for completing initialization tasks. It processes invocation events in a loop until it is terminated.

+

The initialization tasks run once for each instance of the function to prepare the environment for handling invocations.

+
+

Runtime APIs

FunctionGraph provides HTTP runtime APIs to receive function invocation events and returns response data in the execution environment.

+ +
+

Runtime Environment Variables

You can use both custom and runtime environment variables in function code. The following table lists the runtime environment variables that are used in the FunctionGraph execution environment.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Environment variables

Key

+

Description

+

RUNTIME_PROJECT_ID

+

Project ID

+

RUNTIME_FUNC_NAME

+

Function name

+

RUNTIME_FUNC_VERSION

+

Function version

+

RUNTIME_PACKAGE

+

App to which the function belongs

+

RUNTIME_HANDLER

+

Function handler

+

RUNTIME_TIMEOUT

+

Function timeout duration

+

RUNTIME_USERDATA

+

Value passed through an environment variable

+

RUNTIME_CPU

+

Number of allocated CPU cores

+

RUNTIME_MEMORY

+

Allocated memory

+

RUNTIME_CODE_ROOT

+

Directory that stores the function code

+

RUNTIME_API_ADDR

+

Host IP address and port of a custom runtime API

+
+
+

The value of a custom environment variable can be retrieved in the same way as the value of a FunctionGraph environment variable.

+
+

Example

This example contains one file called bootstrap. The file is implemented in Bash.

+

The runtime loads the function script from the deployment package by using two variables.

+

The bootstrap file is as follows:

+
#!/bin/sh
+set -o pipefail
+#Processing requests loop
+while true
+do
+HEADERS="$(mktemp)"
+  # Get an event
+  EVENT_DATA=$(curl -sS -LD "$HEADERS" -X GET "http://$RUNTIME_API_ADDR/v1/runtime/invocation/request")
+  # Get request id from response header
+  REQUEST_ID=$(grep -Fi x-cff-request-id "$HEADERS" | tr -d '[:space:]' | cut -d: -f2)
+  if [ -z "$REQUEST_ID" ]; then
+    continue
+  fi
+  # Process request data
+  RESPONSE="Echoing request: hello world!"
+  # Put response
+  curl -X POST "http://$RUNTIME_API_ADDR/v1/runtime/invocation/response/$REQUEST_ID" -d "$RESPONSE"
+done
+

After loading the script, the runtime processes invocation events in a loop until it is terminated. It uses the API to retrieve invocation events from FunctionGraph, passes the events to the handler, and then sends responses back to FunctionGraph.

+

To obtain the request ID, the runtime saves the API response header in a temporary file, and then reads the request ID from the x-cff-request-id header field. The runtime processes the retrieved event data and sends a response back to FunctionGraph.

+

The following is an example of source code in Go. It can be executed only after compilation.

+
package main
+
+import (
+    "bytes"
+    "encoding/json"
+    "fmt"
+    "io"
+    "io/ioutil"
+    "log"
+    "net"
+    "net/http"
+    "os"
+    "strings"
+    "time"
+)
+
+var (
+    getRequestUrl           = os.ExpandEnv("http://${RUNTIME_API_ADDR}/v1/runtime/invocation/request")
+    putResponseUrl          = os.ExpandEnv("http://${RUNTIME_API_ADDR}/v1/runtime/invocation/response/{REQUEST_ID}")
+    putErrorResponseUrl     = os.ExpandEnv("http://${RUNTIME_API_ADDR}/v1/runtime/invocation/error/{REQUEST_ID}")
+    requestIdInvalidError   = fmt.Errorf("request id invalid")
+    noRequestAvailableError = fmt.Errorf("no request available")
+    putResponseFailedError  = fmt.Errorf("put response failed")
+    functionPackage         = os.Getenv("RUNTIME_PACKAGE")
+    functionName            = os.Getenv("RUNTIME_FUNC_NAME")
+    functionVersion         = os.Getenv("RUNTIME_FUNC_VERSION")
+
+    client = http.Client{
+        Transport: &http.Transport{
+            DialContext: (&net.Dialer{
+                Timeout: 3 * time.Second,
+            }).DialContext,
+        },
+    }
+)
+
+func main() {
+    // main loop for processing requests.
+    for {
+        requestId, header, payload, err := getRequest()
+        if err != nil {
+            time.Sleep(50 * time.Millisecond)
+            continue
+        }
+
+        result, err := processRequestEvent(requestId, header, payload)
+        err = putResponse(requestId, result, err)
+        if err != nil {
+            log.Printf("put response failed, err: %s.", err.Error())
+        }
+    }
+}
+
+// event processing function
+func processRequestEvent(requestId string, header http.Header, evtBytes []byte) ([]byte, error) {
+    log.Printf("processing request '%s'.", requestId)
+    result := fmt.Sprintf("function: %s:%s:%s, request id: %s, headers: %+v, payload: %s", functionPackage, functionName,
+        functionVersion, requestId, header, string(evtBytes))
+    
+    var event FunctionEvent
+    err := json.Unmarshal(evtBytes, &event)
+    if err != nil {
+        return (&ErrorMessage{ErrorType: "invalid event", ErrorMessage: "invalid json formated event"}).toJsonBytes(), err
+    }
+
+    return (&APIGFormatResult{StatusCode: 200, Body: result}).toJsonBytes(), nil
+}
+
+func getRequest() (string, http.Header, []byte, error) {
+    resp, err := client.Get(getRequestUrl)
+    if err != nil {
+        log.Printf("get request error, err: %s.", err.Error())
+        return "", nil, nil, err
+    }
+    defer resp.Body.Close()
+
+    // get request id from response header
+    requestId := resp.Header.Get("X-CFF-Request-Id")
+    if requestId == "" {
+        log.Printf("request id not found.")
+        return "", nil, nil, requestIdInvalidError
+    }
+
+    payload, err := ioutil.ReadAll(resp.Body)
+    if err != nil {
+        log.Printf("read request body error, err: %s.", err.Error())
+        return "", nil, nil, err
+    }
+
+    if resp.StatusCode != 200 {
+        log.Printf("get request failed, status: %d, message: %s.", resp.StatusCode, string(payload))
+        return "", nil, nil, noRequestAvailableError
+    }
+
+    log.Printf("get request ok.")
+    return requestId, resp.Header, payload, nil
+}
+
+func putResponse(requestId string, payload []byte, err error) error {
+    var body io.Reader
+    if payload != nil && len(payload) > 0 {
+        body = bytes.NewBuffer(payload)
+    }
+
+    url := ""
+    if err == nil {
+        url = strings.Replace(putResponseUrl, "{REQUEST_ID}", requestId, -1)
+    } else {
+        url = strings.Replace(putErrorResponseUrl, "{REQUEST_ID}", requestId, -1)
+    }
+
+    resp, err := client.Post(strings.Replace(url, "{REQUEST_ID}", requestId, -1), "", body)
+    if err != nil {
+        log.Printf("put response error, err: %s.", err.Error())
+        return err
+    }
+    defer resp.Body.Close()
+
+    responsePayload, err := ioutil.ReadAll(resp.Body)
+    if err != nil {
+        log.Printf("read request body error, err: %s.", err.Error())
+        return err
+    }
+
+    if resp.StatusCode != 200 {
+        log.Printf("put response failed, status: %d, message: %s.", resp.StatusCode, string(responsePayload))
+        return putResponseFailedError
+    }
+
+    return nil
+}
+
+type FunctionEvent struct {
+    Type string `json:"type"`
+    Name string `json:"name"`
+}
+
+type APIGFormatResult struct {
+    StatusCode      int               `json:"statusCode"`
+    IsBase64Encoded bool              `json:"isBase64Encoded"`
+    Headers         map[string]string `json:"headers,omitempty"`
+    Body            string            `json:"body,omitempty"`
+}
+
+func (result *APIGFormatResult) toJsonBytes() []byte {
+    data, err := json.MarshalIndent(result, "", "  ")
+    if err != nil {
+        return nil
+    }
+
+    return data
+}
+
+type ErrorMessage struct {
+    ErrorType     string `json:"errorType"`
+    ErrorMessage  string `json:"errorMessage"`
+}
+
+func (errMsg *ErrorMessage) toJsonBytes() []byte {
+    data, err := json.MarshalIndent(errMsg, "", "  ")
+    if err != nil {
+        return nil
+    }
+
+    return data
+}
+

Table 3 describes the environment variables used in the preceding code.

+ +
+ + + + + + + + + + + + + +
Table 3 Environment variables

Environment Variable

+

Description

+

RUNTIME_FUNC_NAME

+

Function name

+

RUNTIME_FUNC_VERSION

+

Function version

+

RUNTIME_PACKAGE

+

App to which the function belongs

+
+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0503.html b/docs/fg/umn/functiongraph_01_0503.html new file mode 100644 index 00000000..eda4e96e --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0503.html @@ -0,0 +1,29 @@ + + + +

FAQs

+ +

+
+ +
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0505.html b/docs/fg/umn/functiongraph_01_0505.html new file mode 100644 index 00000000..fc0617fa --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0505.html @@ -0,0 +1,21 @@ + + + +

Getting Started

+ +

+
+ +
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0908.html b/docs/fg/umn/functiongraph_01_0908.html new file mode 100644 index 00000000..e504a8a5 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0908.html @@ -0,0 +1,353 @@ + + +

Cron Expressions for a Function Timer Trigger

+
You can configure a cron expression in the following formats for a function timer trigger: +
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_0920.html b/docs/fg/umn/functiongraph_01_0920.html new file mode 100644 index 00000000..49b2c68e --- /dev/null +++ b/docs/fg/umn/functiongraph_01_0920.html @@ -0,0 +1,156 @@ + + +

Configuring Agency Permissions

+

Overview

FunctionGraph works with other cloud services in most scenarios. Create a cloud service agency so that FunctionGraph can perform resource O&M in other cloud services on your behalf.

+
+

Scenario

Before using FunctionGraph in the following scenarios, create an agency. Adjust the permissions granted to the agency to meet your service requirements. For example, grant the Admin permission in the development phase, and change it to the fine-grained minimum permission in the product environment. This ensures the required permissions while eliminating risks. Select the required action by referring to Table 1.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Common actions

Scenario

+

Admin Permission

+

Fine-Grained Minimum Permission

+

Description

+

Using a custom image

+

SWR Admin

+

Unavailable

+

SWR Admin: administrator who has all permissions for the SoftWare Repository for Container (SWR) service.

+

For details about how to create a custom image, see Deploying a Function Using a Container Image.

+

Mounting an SFS Turbo file system

+

SFS Administrator or Tenant administrator

+

sfsturbo:shares:getShare (Query details about a file system)

+

SFS Administrator: administrator who has all permissions for the Scalable File Service (SFS) service.

+

Tenant administrator: administrator for all cloud services except IAM. This user can perform any operations on all cloud resources of the enterprise.

+

sfsturbo:shares:getShare: permission for querying a file system in SFS.

+

For details about how to mount an SFS Turbo file system, see Mounting an SFS Turbo File System.

+

Mounting an ECS shared directory

+

Tenant Guest and VPC Administrator

+

ecs:cloudServers:get (Query details about an ECS)

+

Tenant Guest: user with read-only permissions for all cloud services (except IAM)

+

VPC Administrator: network administrator

+

ecs:cloudServers:get: permission for querying an ECS.

+

For details about how to mount an ECS shared directory, see Mounting an ECS Shared Directory.

+

Using a DIS trigger

+

DIS Administrator

+

Unavailable

+

Administrator who has all permissions for the DIS service.

+

For details about how to create a DIS trigger, see Using a DIS Trigger.

+

Configuring cross-domain VPC access

+

VPC Administrator

+

vpc:ports:delete (Delete a port)

+

vpc:ports:get (Query a port)

+

vpc:ports:create (Create a port)

+

vpc:vpcs:get (Query a VPC)

+

vpc:subnets:get (Query a subnet)

+

Users with the VPC Administrator permissions can perform any operations on all cloud resources of the VPC. To configure cross-VPC access, specify an agency with VPC management permissions.

+

Fine-grained minimum permission for VPC: permission for deleting, querying, or creating a port, or querying a VPC or subnet.

+

For details about how to configure cross-domain VPC access, see Configuring the Network.

+

Creating an OBS bucket and trigger

+

Tenant Administrator

+

obs:bucket:GetBucketLocation (Query a bucket location)

+

obs:bucket:ListAllMyBuckets (Query buckets)

+

obs:bucket:GetBucketNotification (Obtain the event notification configuration of a bucket)

+

obs:bucket:PutBucketNotification (Configure event notifications for a bucket)

+

Tenant administrator: administrator for all cloud services except IAM. This user can perform any operations on all cloud resources of the enterprise.

+

Fine-grained minimum permission for OBS: permission for querying a bucket location, buckets, or the event notification configuration of a bucket, or configuring event notifications for a bucket.

+

For details about how to create an OBS trigger, see Using an OBS Trigger.

+
+
+
+

Creating an Agency

In the following example, the Tenant Administrator permission is assigned to FunctionGraph and this setting takes effect only in the authorized regions.

+
+

Create an agency by referring to section "Creating an Agency" and set parameters as follows:

+
  1. Log in to the IAM console.
  2. On the IAM console, choose Agencies from the navigation pane, and click Create Agency in the upper right corner.
    Figure 1 Creating an agency
    +
  3. Configure the agency.
    Figure 2 Setting basic information
    +
    • For Agency Name, enter serverless-trust.
    • For Agency Type, select Cloud service.
    • For Cloud Service, select FunctionGraph.
    • For Validity Period, select Unlimited.
    • Description: Enter the description.
    +
  1. Click Next. On the displayed page, search for the permissions to be added in the search box on the right and select the permissions. The Tenant Administrator permission is used as an example.
    Figure 3 Selecting policies
    + +
    + + + + + + + +
    Table 2 Example of agency permissions

    Policy Name

    +

    Scenario

    +

    Tenant Administrator

    +

    Administrator for all cloud services except IAM. This user can perform any operations on all cloud resources of the enterprise.

    +
    +
    +
  2. Click Next and select the scope.
    Figure 4 Selecting the required permissions
    +
+
+

Configuring an Agency

  1. In the left navigation pane of the management console, choose Compute > FunctionGraph. On the FunctionGraph console, choose Functions > Function List from the navigation pane.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Permissions, click Create Agency, and set an agency based on site requirements by referring to 25. +
    + + + + + + + + + + +
    Table 3 Agency configuration parameters

    Parameter

    +

    Description

    +

    Configuration Agency

    +

    Select a function that you have created.

    +

    Execution Agency

    +

    Mandatory if you select Specify an exclusive agency for function execution.

    +
    +
    +
    • To ensure optimal performance, select Specify an exclusive agency for function execution and set different agencies for function configuration and execution. You can also use no agency or specify the same agency for both purposes. Figure 5 shows the agency options.
      Figure 5 Setting agencies
      +
      +
    • Configuration Agency: For example, to create Data Ingestion Service (DIS) triggers, first specify an agency with DIS permissions. If such an agency is not specified or the specified agency does not exist, no DIS triggers can be created.
    • Execution Agency: This type of agency enables you to obtain a token and AK/SK from the context in the function handler for accessing other cloud services.
    +
    +
  1. Click Save.
+
+

Modifying an Agency

Modifying an agency: You can modify the permissions, validity period, and description of an agency on the IAM console.

+
  • After an agency is modified, it takes about 10 minutes for the modification (for example, context.getToken) to take effect.
  • The agency information obtained using the context method is valid for 24 hours. Refresh it before it expires.
+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1047.html b/docs/fg/umn/functiongraph_01_1047.html new file mode 100644 index 00000000..9e811c3c --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1047.html @@ -0,0 +1,103 @@ + + +

Deploying a Function Using a Container Image

+

Introduction

Package your container images complying with the Open Container Initiative (OCI) standard, and upload them to FunctionGraph. The images will be loaded and run by FunctionGraph. Unlike the code upload mode, you can use a custom code package, which is flexible and reduces migration costs. You can create event and HTTP functions by using a custom image.

+

For details about how to develop and deploy an HTTP function using a container image, see Developing an HTTP Function.

+

For details about how to develop and deploy an event function using a container image, see Developing an Event Function.

+
The following features are supported:
  • Downloading images

    Images are stored in SoftWare Repository for Container (SWR) and can only be downloaded by users with the SWR Admin permission. FunctionGraph will call the SWR API to generate and set temporary login commands before creating instances.

    +
+
  • Setting environment variables

    Encryption settings and environment variables are supported. For details, see Configuring Environment Variables.

    +
  • Attaching external data disks

    External data disks can be attached. For details, see Configuring Disk Mounting.

    +
  • Reserved instances

    For details, see the description about reserved instances.

    +
+

User containers will be started using UID 1003 and GID 1003, which are the same as other types of functions.

+
+
+
+

Prerequisites

You have created an agency with the SWR Admin permission by referring to Configuring Agency Permissions. Images are stored in SWR, and only users with this permission can invoke and pull images.

+
+

Procedure

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. On the Function List page, click Create Function in the upper right corner.
  3. Select Container Image. For details, see Table 1.
    Figure 1 Creating a function using a container image
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 1 Parameter description

    Parameter

    +

    Description

    +

    *Function Type

    +

    Select a function type.

    +

    +
    HTTP function: triggered once HTTP requests are sent to specific URLs.
    NOTE:
    • The custom container image must contain an HTTP server with listening port 8000.
    • HTTP functions support APIG and APIC triggers only.
    • When calling a function using APIG, isBase64Encoded is valued true by default, indicating that the request body transferred to FunctionGraph is encoded using Base64 and must be decoded for processing.
    • The function must return characters strings by using the following structure.
      {
      +    "isBase64Encoded": true|false,
      +    "statusCode": httpStatusCode,
      +    "headers": {"headerName":"headerValue",...},
      +    "body": "..."
      +}
      +
    +
    +
    +

    *Region

    +

    Select a region where you will deploy your code.

    +

    *Function Name

    +

    Name of the function, which must meet the following requirements:

    +
    • Consists of 1 to 60 characters, and can contain letters, digits, hyphens (-), and underscores (_).
    • Starts with a letter and ends with a letter or digit.
    +

    *Enterprise Project

    +

    Select a created enterprise project and add the function to it. By default, default is selected.

    +

    Container Image

    +

    Enter an image URL, that is, the location of the container image. You can click View Image to view private and shared images.

    +

    Container Image Override

    +
    • CMD: container startup command. Example: /bin/sh. If no command is specified, the entrypoint or CMD in the image configuration will be used. Enter one or more commands separated with commas (,).
    • Args: container startup parameter. Example: -args,value1. If no argument is specified, CMD in the image configuration will be used. Enter one or more arguments separated with commas (,).
    • Working Dir: working directory of the container. The folder path cannot be created or modified and must start with a slash (/). If no directory is specified, the directory in the image configuration will be used.
    • User ID: user ID for running the image. If no user ID is specified, the default value 1003 will be used.
    • Group ID: user group ID. If no user group ID is specified, the default value 1003 will be used.
    +

    Agency

    +

    Select an agency with the SWR Admin permission. To create an agency, see Creating an Agency.

    +
    +
    +
    • Command, Args, and Working dir can contain up to 5120 characters.
    • When a function is executed at the first time, the image is pulled from SWR, and the container is started during cold start of the function, which takes a certain period of time. If there is no image on a node during subsequent cold starts, an image will be pulled from SWR.
    • Public and private images are supported. For details, see Setting Image Attributes.
    • The port of a custom container image must be 8000.
    • The image package cannot exceed 10 GB. For a larger package, reduce the capacity. For example, mount the data of a question library to a container where the data was previously loaded through an external file system.
    • FunctionGraph uses LTS to collect all logs that the container outputs to the console. These logs can be redirected to and printed on the console through standard output or an open-source log framework. The logs should include the system time, component name, code line, and key data, to facilitate fault locating.
    • When an out of memory (OOM) error occurs, view the memory usage in the function execution result.
    • Functions must return a valid HTTP response.
    +
    +
+
+

Sample Code

The following uses Node.js Express as an example. During function initialization, FunctionGraph uses the POST method to access the /init path (optional). Each time when a function is called, FunctionGraph uses the POST method to access the /invoke path. The function obtains context from req.headers, obtains event from req.body, and returns an HTTP response struct.

+
const express = require('express');
+const app = express();
+const PORT = 8000;
+
+app.post('/init', (req, res) => {
+  res.send('Hello init\n');
+});
+
+app.post('/invoke', (req, res) => {
+  res.send('Hello invoke\n');
+});
+
+app.listen(PORT, () => {
+  console.log(`Listening on http://localhost:${PORT}`);
+});
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1061.html b/docs/fg/umn/functiongraph_01_1061.html new file mode 100644 index 00000000..7b26dfac --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1061.html @@ -0,0 +1,11 @@ + + +

Synchronous Invocation

+

When triggering a function, clients wait for the result before proceeding. Currently, functions with APIG (dedicated) triggers are executed synchronously. Alternatively, you can use the API described insection "Executing a Function Synchronously" to trigger a function synchronously. In this scenario, a function is executed for up to 15 minutes.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1062.html b/docs/fg/umn/functiongraph_01_1062.html new file mode 100644 index 00000000..4b360a68 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1062.html @@ -0,0 +1,70 @@ + + +

Asynchronous Invocation

+

When a client triggers a function, FunctionGraph persists the request and sends a response immediately to the client. The client proceeds without waiting for the execution result. You cannot know the result in real time. FunctionGraph queues the asynchronous requests and processes them when the server is idle. To obtain asynchronous processing results or to retry when an asynchronous request fails, configure asynchronous settings.

+ +

Example

+

The following procedure uses the APIG trigger of a function as an example.

+
  1. Go to the function details page, and choose Configuration > Triggers.
  2. Click the APIG trigger name to go to the APIG console.
    Figure 1 Clicking a trigger name
    +
  3. Click Edit in the upper right.
    Figure 2 Clicking Edit
    +
  4. Click Next until the Define Backend Request page is displayed. Then change Invocation Mode to Asynchronous.
    Figure 3 Changing the invocation mode
    +
  5. Click Finish to save the settings.
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1441.html b/docs/fg/umn/functiongraph_01_1441.html new file mode 100644 index 00000000..ff80855b --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1441.html @@ -0,0 +1,127 @@ + + +

Creating an Event Function

+

Overview

A function is customized code for processing events. You can create a function from scratch and configure the function based on site requirements.

+

FunctionGraph manages the compute resources required for function execution. After editing code for your function, configure compute resources on the FunctionGraph console.

+

You can create a function from scratch or by using a template or container image.

+

When creating a function from scratch, configure the basic and code information based on Table 1. The parameters marked with an asterisk (*) are mandatory.

+

Each FunctionGraph function runs in its own environment and has its own resources and file system.

+
+
+

Prerequisites

  1. You must be familiar with the programming languages supported by FunctionGraph. For details, see Supported Programming Languages.
  2. You have created a deployment package. For details, see Creating a Deployment Package.
  3. (Optional) You have created an agency. For details, see Configuring Agency Permissions.
+
+

Procedure

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. On the Function List page, click Create Function in the upper right corner.
  3. Click Create from scratch and configure the function information by referring to Table 1. The parameters marked with an asterisk (*) are mandatory.
    Figure 1 Creating a function from scratch
    + +
    + + + + + + + + + + + + + + + + + + + + + + +
    Table 1 Basic information

    Parameter

    +

    Description

    +

    * Function Type

    +
    • Event functions: triggered by triggers.
    • HTTP functions: triggered once HTTP requests are sent to specific URLs.
      NOTE:
      • HTTP functions do not distinguish between programming languages. The handler must be set in the bootstrap file. You can directly write the startup command, and allow access over port 8000.
      • HTTP functions support APIG and APIC triggers only.
      • For details about how to use HTTP functions, see Creating an HTTP Function.
      +
      +
    +

    *Region

    +

    Select a region where you will deploy your code.

    +

    *Function Name

    +

    Name of the function, which must meet the following requirements:

    +
    • Consists of 1 to 60 characters, and can contain letters, digits, hyphens (-), and underscores (_).
    • Starts with a letter and ends with a letter or digit.
    +

    Agency

    +

    An agency is required if FunctionGraph accesses other cloud services. For details on how to create an agency, see Configuring Agency Permissions.

    +

    No agency is required if FunctionGraph does not access any cloud services.

    +

    *Enterprise Project

    +

    Select a created enterprise project and add the function to it. By default, default is selected.

    +

    Runtime

    +

    Select a runtime to compile the function.

    +
    NOTICE:

    CloudIDE supports Node.js and Python only.

    +
    +
    +
    +
  4. Click Create Function. On the displayed Code tab page, continue to configure the code.
+
+

Configuring Code

  1. You can deploy the code based on the runtime you select. For details, see Creating a Deployment Package. After the deployment is complete, click Deploy.

    As shown in the following example, to deploy code in Node.js 10.16, you can edit code inline, upload a local ZIP file, or upload a ZIP file from OBS.

    +
    Figure 2 Deploying code
    +
    Figure 3 Deploying code
    +
  2. You can modify the code and click Deploy to deploy the code again.
+
+

Viewing Code Information

  1. View code attributes.

    Code attributes show the code size and the time the code was modified.

    +
    Figure 4 Viewing code attributes
    +
  2. View basic information.

    Configuring Basic Settings shows the default memory and execution timeout in each runtime. You can click Edit to switch to the Basic Settings page and modify Handler, Memory (MB), and Execution Timeout (s) as required. For details, see Figure 5.

    +
    Figure 5 Editing basic information
    +

    +

    Once a function is created, the runtime cannot be changed.

    +
    + +
    + + + + + + + + + + + + + + + + + + + +
    Table 2 Default basic information of each runtime

    Runtime

    +

    Default Basic Information

    +

    Java

    +

    Memory (MB): 512

    +

    Handler: com.demo.TriggerTests.apigTest

    +

    Execution Timeout (s): 15

    +

    Node.js

    +

    Memory (MB): 128

    +

    Handler: index.handler

    +

    Execution Timeout (s): 3

    +

    Custom

    +

    Memory (MB): 128

    +

    Handler: bootstrap

    +

    Execution Timeout (s): 3

    +

    Python

    +

    Memory (MB): 128

    +

    Handler: index.handler

    +

    Execution Timeout (s): 3

    +

    Go 1.x

    +

    Memory (MB): 128

    +

    Handler: handler

    +

    Execution Timeout (s): 3

    +
    +
    +
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1442.html b/docs/fg/umn/functiongraph_01_1442.html new file mode 100644 index 00000000..d65c8737 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1442.html @@ -0,0 +1,177 @@ + + +

Creating an HTTP Function

+

Overview

HTTP functions are designed to optimize web services. You can send HTTP requests to URLs to trigger function execution. HTTP functions support APIG triggers only.

+
  • HTTP functions do not distinguish between programming languages. The handler must be set in the bootstrap file. You can directly write the startup command, and allow access over port 8000. The bound IP address is 127.0.0.1.
  • The bootstrap file is the startup file of the HTTP function. The HTTP function can only read bootstrap as the startup file name. If the file name is not bootstrap, the service cannot be started. For more information, see the bootstrap file example.
  • HTTP functions support multiple programming languages.
  • Functions must return a valid HTTP response.
  • This section uses Node.js as an example. To use another runtime, simply change the runtime path. The code package path does not need to be changed. For the paths of other runtimes, see Table 1.
+
+
+

Prerequisites

  1. Prepare a Node.js script. A code example is as follows:
    const http = require('http'); // Import Node.js core module
    + 
    +var server = http.createServer(function (req, res) {   //create web server
    +    res.writeHead(200, { 'Content-Type': 'text/html' });
    +    res.write('<html><body><h2>This is http function.</h2></body></html>');
    +    res.end();
    +});
    + 
    +server.listen(8000, '127.0.0.1'); //6 - listen for any incoming requests
    + 
    +console.log('Node.js web server at port 8000 is running..')
    +
  2. You have prepared a bootstrap file as the startup file of the HTTP function.

    Example

    +

    The content of the bootstrap file is as follows:

    +
    /opt/function/runtime/nodejs12.13/rtsp/nodejs/bin/node $RUNTIME_CODE_ROOT/index.js
    +
  3. Compress the preceding two files into a ZIP package.
    Figure 1 Compressing files into a ZIP package
    +

    For HTTP functions in Python, add the -u parameter in the bootstrap file to ensure that logs can be flushed to the disk. Example:

    +
    /opt/function/runtime/python3.6/rtsp/python/bin/python3 -u $RUNTIME_CODE_ROOT/index.py
    +
    +

    To use another runtime, change the runtime path by referring to Table 1. The code package path does not need to be changed.

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 1 Paths for different runtimes

    Runtime

    +

    Path

    +

    Java 8

    +

    /opt/function/runtime/java8/rtsp/jre/bin/java

    +

    Java 11

    +

    /opt/function/runtime/java11/rtsp/jre/bin/java

    +

    Node.js 6

    +

    /opt/function/runtime/nodejs6.10/rtsp/nodejs/bin/node

    +

    Node.js 8

    +

    /opt/function/runtime/nodejs8.10/rtsp/nodejs/bin/node

    +

    Node.js 10

    +

    /opt/function/runtime/nodejs10.16/rtsp/nodejs/bin/node

    +

    Node.js 12

    +

    /opt/function/runtime/nodejs12.13/rtsp/nodejs/bin/node

    +

    Node.js 14

    +

    /opt/function/runtime/nodejs14.18/rtsp/nodejs/bin/node

    +

    Node.js 16

    +

    /opt/function/runtime/nodejs16.17/rtsp/nodejs/bin/node

    +

    Node.js 18

    +

    /opt/function/runtime/nodejs18.15/rtsp/nodejs/bin/node

    +

    Python 2.7

    +

    /opt/function/runtime/python2.7/rtsp/python/bin/python

    +

    Python 3.6

    +

    /opt/function/runtime/python3.6/rtsp/python/bin/python3

    +

    Python 3.9

    +

    /opt/function/runtime/python3.9/rtsp/python/bin/python3

    +
    +
    +
+
+

Procedure

  1. Create a function.
    1. Create an HTTP function. For details, see Creating an Event Function. Pay special attention to the following parameters:
      • Function Type: HTTP function
      • Region: Select a region where you will deploy your code.
      +
    2. Choose Upload > Local ZIP, upload the ZIP package, and click Deploy.
      Figure 2 Uploading a ZIP file
      +
    +
  2. Create a trigger.

    HTTP functions support APIG triggers only.

    +
    +
    1. On the function details page, choose Configuration > Triggers and click Create Trigger.
    2. Set the trigger information. This step uses an APIG (dedicated) trigger as an example. For more information, see Using an APIG (Dedicated) Trigger.

      +
      Figure 3 Creating a trigger
      +

      In this example, Security Authentication is set to None. You need to select an authentication mode based on site requirements.

      +
      • App: AppKey and AppSecret authentication. This mode is of high security and is recommended.
      • IAM: IAM authentication. This mode grants access permissions to IAM users only and is of medium security.
      • None: No authentication. This mode grants access permissions to all users.
      +
      +
    3. When the configuration is complete, click OK. After the trigger is created, API_test_http will be generated on the APIG console.
    +
  3. Publish the API.
    1. On the Triggers tab page, click an API name to go to the API overview page.
      Figure 4 APIG trigger
      +
    2. Click Edit in the upper right corner. The Basic Information page is displayed.
      Figure 5 Editing an API
      +
    3. Click Next. On the Define API Request page that is displayed, change Path to /user/get and click Finish.
      Figure 6 Defining an API request
      +
    4. Click Publish API. On the displayed page, click Publish.
    +
  4. Trigger a function.
    1. Go to the FunctionGraph console, choose Functions > Function List in the navigation pane, and click the created HTTP function to go to its details page.
    2. Choose Configuration > Triggers, copy the URL, and access it using a browser.
      Figure 7 Copying the URL
      +
    3. View the request result.
      Figure 8 Viewing the request result
      +
    +
+
+

Common Function Request Headers

The following table lists the default request header fields of an HTTP function.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Default request header fields

Field

+

Description

+

X-CFF-Request-Id

+

ID of the current request

+

X-CFF-Memory

+

Allocated memory

+

X-CFF-Timeout

+

Function timeout duration

+

X-CFF-Func-Version

+

Function version

+

X-CFF-Func-Name

+

Function name

+

X-CFF-Project-Id

+

Project ID

+

X-CFF-Package

+

App to which the function belongs

+

X-CFF-Region

+

Current region

+
+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1814.html b/docs/fg/umn/functiongraph_01_1814.html new file mode 100644 index 00000000..07ab7dcc --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1814.html @@ -0,0 +1,19 @@ + + +

Retry Mechanism

+

If synchronous or asynchronous invocation fails, do as follows:

+ +

Idempotency

In programming, idempotency means that an application or component can identify duplicate events and prevent duplication, inconsistency, and data loss. If you want to keep a function idempotent, you need to design the function logic to correctly handle repeated events.

+

Idempotent function logic helps reduce the following problems:

+ +

Ensure that your function code can process the same event multiple times without causing duplicate transactions or other unnecessary side effects in case of abnormal calls, retry of client, or retry within dependent functions.

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1822.html b/docs/fg/umn/functiongraph_01_1822.html new file mode 100644 index 00000000..0fdcd4af --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1822.html @@ -0,0 +1,56 @@ + + +

Node.js

+

: Supported. ×: Not supported.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +

Runtime

+

Supported

+

Node.js 6.10

+

+

Node.js 8.10

+

+

Node.js 10.16

+

+

Node.js 12.13

+

+

Node.js 14.18

+

+

Node.js 16.17

+

+

Node.js 18.15

+

+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1823.html b/docs/fg/umn/functiongraph_01_1823.html new file mode 100644 index 00000000..ae6c9b66 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1823.html @@ -0,0 +1,41 @@ + + +

Python

+

: Supported. ×: Not supported.

+ +
+ + + + + + + + + + + + + + + + +

Runtime

+

Supported

+

Python 2.7

+

+

Python 3.6

+

+

Python 3.9

+

+

Python 3.10

+

+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1824.html b/docs/fg/umn/functiongraph_01_1824.html new file mode 100644 index 00000000..7d6a9eb5 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1824.html @@ -0,0 +1,31 @@ + + +

Java

+

: Supported. ×: Not supported.

+ +
+ + + + + + + + + + +

Runtime

+

Supported

+

Java 8

+

+

Java 11

+

+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1825.html b/docs/fg/umn/functiongraph_01_1825.html new file mode 100644 index 00000000..460f5eca --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1825.html @@ -0,0 +1,26 @@ + + +

Go

+

: Supported. ×: Not supported.

+ +
+ + + + + + + +

Runtime

+

Supported

+

Go 1.x

+

+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1828.html b/docs/fg/umn/functiongraph_01_1828.html new file mode 100644 index 00000000..680a96de --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1828.html @@ -0,0 +1,62 @@ + + +

Configuring Basic Settings

+

Introduction

After a function is created, Memory (MB), Handler, and Execution Timeout (s) are automatically set based on your runtime. If needed, modify them based on this section.

+
+

Prerequisites

You have created a function.

+
+

Procedure

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Basic Settings and configure parameters based on Table 1. Parameters marked with an asterisk (*) are mandatory. +
    + + + + + + + + + + + + + + + + + + + + + + +
    Table 1 Basic settings

    Parameter

    +

    Description

    +

    App

    +

    After a function is created, it is automatically categorized into the default app and cannot be switched to other apps.

    +
    NOTICE:

    An app acts like a folder. In the future, functions will be managed by label for better experience.

    +
    +

    *Handler

    +
    • For a Node.js, Python, or PHP function, the handler must be named in the format of [file name].[function name], which must contain a period (.).

      Example: myfunction.handler

      +
    • For a Java function, the handler must be named in the format of [package name].[class name].[execution function name].

      Example: com.xxxxx.exp.Myfunction.myHandler

      +
    • For a Go function, the handler name must be the same as the executable file name in the uploaded code package.

      Example: If the executable file is handler, set this parameter to handler.

      +
    +

    *Enterprise Project

    +

    Select a created enterprise project and add the function to it. By default, default is selected.

    +

    *Execution Timeout (s)

    +

    Maximum duration the function can be executed. You can set this parameter on the Configuration tab page. If the execution takes longer than 90s, use asynchronous invocation.

    +

    The value ranges from 3s to 259,200s.

    +

    Memory (MB)

    +

    Memory of a function instance. Options: 128, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2560, 3072, 3584, 4096, 8192, 10,240.

    +

    Description

    +

    Description of the function, which cannot exceed 512 characters.

    +
    +
    +
  4. Click Save.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1829.html b/docs/fg/umn/functiongraph_01_1829.html new file mode 100644 index 00000000..29027c93 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1829.html @@ -0,0 +1,26 @@ + + +

Managing Aliases

+

Overview

An alias points to a specific function version. Create an alias and expose it to clients, for example, bind a trigger to the alias instead of the corresponding version. Then your modification to the version for update or rollback will be imperceptible to the clients. An alias can point to up to two versions with different weights for dark launch.

+
+

Creating an Alias

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. On the Aliases tab page, click Create Alias.
    Figure 1 Creating an alias
    +
    • Alias: Enter an alias.
    • Version: Select a version to be associated with the alias.
    • Traffic Shifting: Choose whether to enable traffic shifting. If this function is enabled, you can distribute a specific percentage of traffic to the additional version.
    • Additional Version: Select an additional version to be associated. The latest version cannot be used as an additional version.
    • Weight: Enter an integer from 0 to 100.
    • Description: Enter a description for the alias.
    +
    +
  4. Click OK.

    You can create up to 10 aliases for a function.

    +
    +
+
+

Modifying an Alias

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. On the Aliases tab page of the latest version, select the alias to modify.
    Figure 2 Modifying an alias
    +
  4. Modify the alias information, and click OK.

    +
+
+

Deleting an Alias

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. On the Aliases tab page of the latest version, select the alias to delete.
    Figure 3 Deleting an alias
    +
  4. Click OK to delete the version.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1833.html b/docs/fg/umn/functiongraph_01_1833.html new file mode 100644 index 00000000..6d13e022 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1833.html @@ -0,0 +1,17 @@ + + +

Logs

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_01_1834.html b/docs/fg/umn/functiongraph_01_1834.html new file mode 100644 index 00000000..a22ea245 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1834.html @@ -0,0 +1,86 @@ + + +

Managing Function Logs

+

Using LTS to Manage Function Logs

You can enable LTS to better manage function logs. After you enable LTS, FunctionGraph automatically creates a log group starting with functiongraph. When you create a function, a log stream starting with the function name is generated.

+
  • By default, 20 log streams are created, which cannot be customized. On the Logs tab page of the function, press F12 to find out the log stream ID of the query API, and then locate the corresponding log stream ID in LTS.

    +
  • Deleting a function log group by mistake on the LTS console will not be detected by FunctionGraph, and the historical log data can no longer be retrieved. To use a log group, modify the function description and save the changes. A new log group will be created.
+
+
  1. Enable LTS.
  2. Set filter criteria.

    • Request List: Filter requests by request ID, result (success or failure), or cause (initialization failed, load failed, system error, timed out, out of memory, out of disk space, or code error).
    • Request Log: Filter logs by keyword, request ID, or instance ID.
    + +
    + + + + + + + + + + +
    Table 1 Invocation result

    Result

    +

    Description

    +

    Execution successful

    +

    Log printed when a function is successfully executed.

    +

    Execution failed

    +

    Log printed when a function fails to be executed due to invocation timeout, memory or disk threshold exceeded, or code errors.

    +

    To view the logs about invocation timeout, select Invocation timed out from the drop-down list. The methods for viewing the other three types of logs are the same.

    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 2 Cause analysis

    Cause

    +

    Description

    +

    Initialization failed

    +

    Log printed when the function initialization fails.

    +

    Load failed

    +

    Log generated when the runtime fails to load your function file.

    +

    System error

    +

    Internal error.

    +

    Invocation timed out

    +

    Log printed when the function invocation period is longer than the preset limit.

    +

    Memory threshold exceeded

    +

    Log printed when the function memory size exceeds the preset limit.

    +

    Disk threshold exceeded

    +

    Log printed when the disk size exceeds the preset limit.

    +

    Code error

    +

    Log printed when a code error occurs.

    +
    +
    +
    • You can view logs of the last hour, last day, last 3 days, or a custom time period.
    • To manage function logs, go to the LTS console.
    • Max. 10 MB logs can be retained for common instances during initialization. When this limit is reached, the latest logs replace the old ones.
    +
    +
    +

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1837.html b/docs/fg/umn/functiongraph_01_1837.html new file mode 100644 index 00000000..52c9a64d --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1837.html @@ -0,0 +1,101 @@ + + +

Reserved Instance Management

+

Introduction

FunctionGraph provides on-demand and reserved instances.

+ +
+

Configuring a Fixed Number of Reserved Instances

Ensure that the function for which you want to create reserved instances already exists on the FunctionGraph console.

+
  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the target function to go to the details page.
  3. Choose Configuration > Concurrency, and click Add.
    Figure 1 Clicking Add
    +
  4. Set parameters by referring to Table 1.
    You can create a specified number of reserved instances for a function version or alias. This number cannot exceed the maximum number of requests per instance or the maximum number of instances per function.
    Figure 2 Basic settings
    + +
    + + + + + + + + + + + + + + + + + + + + + + +
    Table 1 Basic settings

    Parameter

    +

    Description

    +

    Function Name

    +

    Name of the current function.

    +

    Type

    +

    Select Version or Aliases.

    +

    Version

    +

    Set this parameter when you select Version for Type.

    +

    Alias

    +

    Set this parameter when you select Aliases for Type.

    +

    Min. Instances

    +

    Minimum number of instances. Max.: 1000. FunctionGraph reserves the specified number of instances for the function. These instances will always run unless you change Min. Instances to 0.

    +

    Idle Mode

    +

    This mode saves costs as CPU resources are not used when reserved instances are not invoked.

    +
    +
    +
    • Reserved instances cannot be configured for both a function alias and the corresponding version. For example, if the alias of the latest version is 1.0 and reserved instances have been configured for this version, no more instances can be configured for alias 1.0.
    • After the idle mode is enabled, reserved instances are initialized and the mode change needs some time to take effect. You will still be billed at the price of reserved instances for non-idle mode in this period.
    • If the function concurrency is greater than the number of reserved instances, the excess requests will be allocated to on-demand instances, which involve a cold start.
    +
    +
    +
  5. Click OK. The new policy is displayed in the reserved instance policy list.
    Figure 3 Policy list
    +
+
+

Configuring a Scheduled Scaling Policy

Configure the number of reserved instances that will run in a specified period and a cron expression. During this period, FunctionGraph adjusts the number of reserved instances based on the cron expression. When the period expires, the fixed number of instances will be reserved.

+
  1. Configure the basic settings by referring to Table 1, and then click Add Policy.
    Figure 4 Clicking Add Policy
    +
  2. Set parameters by referring to Table 2.
    Figure 5 Adding a policy
    + +
    + + + + + + + + + + + + + + + + +
    Table 2 Scheduled scaling policy parameters

    Parameter

    +

    Description

    +

    Policy Name

    +

    Policy name.

    +

    Cron Expression (UTC)

    +

    Set this parameter by referring to Cron Expressions for a Function Timer Trigger.

    +

    Validity

    +

    Local time when the cron expression is effective.

    +

    The scheduled scaling policy is effective only during this validity period. In other time, the Min. Instances in the basic settings is used.

    +

    Min. Instances

    +

    The number of reserved instances to be created when the policy is effective.

    +

    Set a number that meets your service requirements.

    +
    NOTE:

    The number must be greater than or equal to the Min. Instances in the basic settings.

    +
    +
    +
    +
  3. Click OK. The new policy is displayed in the reserved instance policy list.
    Figure 6 Policy list
    +
  4. To modify the reserved instance policy, click Edit in the Operation column. Then modify or add scheduled scaling policies.
  5. To delete a reserved instance policy under a function version or alias, click Delete in the Operation column.
  6. To view concurrent instances, click a quantifier in the reserved instance policy list, and click a scheduled scaling policy name.

    Multiple scheduled policies can be configured. For example, the number of reserved instances at 08:00 and 21:00 is updated to 100 and 10 respectively.

    +
    +
+
+
+ diff --git a/docs/fg/umn/functiongraph_01_1838.html b/docs/fg/umn/functiongraph_01_1838.html new file mode 100644 index 00000000..0216191d --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1838.html @@ -0,0 +1,60 @@ + + +

Using an Open-Source Kafka Trigger

+

This section describes how to create an open-source Kafka trigger and configure an event to trigger a function.

+

If you use an open-source Kafka trigger for a function, FunctionGraph periodically polls messages from a specific topic in Kafka and passes the messages as an input parameter to invoke the function.

+

For details about the differences between DMS for Kafka and open-source Kafka, see Comparing DMS for Kafka and Open-Source Kafka.

+
+

Prerequisites

Before creating a trigger, ensure that you have prepared the following:

+ +
+

Creating an Open-Source Kafka Trigger

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Triggers and click Create Trigger.

    Figure 1 Creating a trigger
    +

  4. Set the following parameters:

    • Trigger Type: Select Kafka (OPENSOURCEKAFKA).
    • Connection Address: Addresses of brokers running Kafka. Separate the addresses with commas (,).
    • Topic: Enter one or more topics.
    • Batch Size: Maximum number of data records that can be processed by the function at a time.
    +

  5. Click OK.

    The network configuration must be the same as that of the ECS where Kafka is deployed, including the VPC and subnet.

    +
    +

+
+

Enabling a Kafka Trigger

By default, open-source Kafka triggers are disabled. To use such a trigger, click Enable on the Trigger page.

+

If a trigger cannot be disabled, contact technical support.

+
+
+

Configuring a Kafka Event to Trigger the Function

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. On the function details page, select a version.
  4. On the Code tab page, click Test. The Configure Test Event dialog box is displayed.
  5. Set the parameters described in Table 1 and click Save.

    +

    + + + + + + + + + + + + + + + + +
    Table 1 Test event information

    Parameter

    +

    Description

    +

    Configure Test Event

    +

    You can choose to create a test event or edit an existing one.

    +

    Use the default option Create new test event.

    +

    Event Template

    +

    Select Kafka (OPENSOURCEKAFKA) to use the built-in Kafka event template.

    +

    Event Name

    +

    The event name can contain 1 to 25 characters and must start with a letter and end with a letter or digit. Only letters, digits, underscores (_), and hyphens (-) are allowed. For example, kafka-123test.

    +

    Event data

    +

    The system automatically loads the built-in Kafka event template, which is used in this example without modifications.

    +
    +
    +

  6. Click Test. The function test result is displayed.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1839.html b/docs/fg/umn/functiongraph_01_1839.html new file mode 100644 index 00000000..60502a22 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1839.html @@ -0,0 +1,43 @@ + + +

Configuring Tags

+

Introduction

Tags help you identify your cloud resources. When you have many cloud resources of the same type, you can use tags to classify them by dimension (for example, use, owner, or environment).

+

Add tags for a function on the Configuration tab page. Each function can have a maximum of 20 tags.

+
+

Scenario

Tags help you identify and manage your function resources. For example, you can define a set of tags for function resources in your account to track the owner and usage of each function resource.

+
+

Adding a Tag

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Tag, and click Add Tag.
  4. Add a tag key and value that meet the following rules:
    • Each tag consists of a key-value pair. Each key must be unique and have only one value.
    • Each function can have a maximum of 20 tags.

      If your organization has configured tag policies for FunctionGraph, add tags to functions based on the policies. If a tag does not comply with the tag policies, function creation may fail. Contact your administrator to learn more about tag policies.

      +
      + +
      + + + + + + + + + + +
      Table 1 Tag naming rules

      Parameter

      +

      Rule

      +

      Key

      +
      • Cannot be empty.
      • Cannot start with _sys_ or a space, or end with a space.
      • Can contain UTF-8 letters, digits, spaces, and these characters: _.:=+-@
      • Must be unique and cannot exceed 128 characters.
      +

      Value

      +
      • Can be an empty string.
      • Can contain UTF-8 letters, digits, spaces, and these characters: _.:/=+-@
      • Max. 255 characters.
      +
      +
      +
    +
  5. Click Save.

    Tag values can be modified but tag keys cannot.

    +
+
+

Searching for Functions by Tag

  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. In the search box, select the Tag filter, and then select one or more key-value pairs.
  3. (Optional) Add more filters, such as runtime and package type.
  4. View the search result in the function list.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_1841.html b/docs/fg/umn/functiongraph_01_1841.html new file mode 100644 index 00000000..1231abc0 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_1841.html @@ -0,0 +1,53 @@ + + +

Configuring a Log Group and Log Stream

+

This feature is supported only by FunctionGraph V2.

+
+

Introduction

You can bind a log group and log stream to a function to store its invocation logs. By default, the logs are stored in the log stream automatically created for the function. For details, see Using LTS to Manage Function Logs.

+
+

Prerequisites

You have created a log group and log stream on the LTS console.

+
+

Procedure

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Configuration > Log, and configure log collection according to Table 1. +
    + + + + + + + + + + + + + +
    Table 1 Log configuration parameters

    Parameter

    +

    Description

    +

    Collect Logs

    +

    Enabled by default in FunctionGraph V2. This feature is unavailable for FunctionGraph V1.

    +

    Log Group

    +

    Select a log group for the function. The default log group functiongraph.log.group.xxx cannot be selected.

    +

    By default, the log group (starting with functiongraph) automatically generated by FunctionGraph is selected.

    +

    Log Stream

    +

    Select a log stream in the specified log group.

    +

    By default, the log stream (starting with the function name) automatically generated for the function is selected.

    +
    +
    +
  4. Click Save.
  5. After the function is invoked, view logs in the specified log group and log stream.

    You can change the log stream if needed.

    +
    +
+
+

Viewing Function Logs

View function logs in the specified log group and log stream.

+
  1. Return to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click the function to be configured to go to the function details page.
  3. Choose Monitoring > Logs and view the function logs.
    • As shown in Figure 1, logs of the function are generated in the specified log group and log stream.
    • If no custom log group and log stream are specified, the default log group (starting with functiongraph) and log stream are displayed.
      Figure 1 Viewing function logs
      +
    • The following figure shows two successful requests. The request at the bottom took 13.100 ms, including the cold start time. The request at the top took only 1.671 ms, because no cold start was involved.
      Figure 2 Logs
      +
    +
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_2102.html b/docs/fg/umn/functiongraph_01_2102.html new file mode 100644 index 00000000..76b7777b --- /dev/null +++ b/docs/fg/umn/functiongraph_01_2102.html @@ -0,0 +1,155 @@ + + +

Dependent Libraries

+

Supported Dependent Libraries

+

FunctionGraph supports both standard and third-party libraries.

+ + +

Importing Dependent Libraries

+
Importing a dependency for Python:
from com.obs.client.obs_client import ObsClient
+
+
Importing a dependency for Node.js:
const ObsClient = require('esdk-obs-nodejs');
+
+

For standard libraries and supported non-standard libraries, you can directly use them in your function.

+

For non-standard third-party libraries that are not provided by FunctionGraph, you can use them by performing the following steps:

+
  1. Package the dependent libraries into a ZIP file, upload the ZIP file to an OBS bucket, and obtain the OBS link URL.
  2. Log in to the FunctionGraph console, and choose Functions > Dependencies in the navigation pane.
  3. Click Create Dependency.
  4. Set the dependency name and runtime, specify the OBS link URL, and click OK.
    Figure 1 Setting the dependency
    +
  5. On the function details page, click the Code tab, click Add in the Dependencies area, select the dependency created in 4, and click OK.
    Figure 2 Selecting a dependency
    +

    Each dependency package cannot contain a file with the same name as a code file. Otherwise, the two files may be incorrectly merged or overwritten. For example, if dependency package depends.zip contains a file named index.py, the handler of a function cannot be set to index.handler. Otherwise, a code file also named index.py will be generated.

    +
    +
    +
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_01_2119.html b/docs/fg/umn/functiongraph_01_2119.html new file mode 100644 index 00000000..b58bd4f3 --- /dev/null +++ b/docs/fg/umn/functiongraph_01_2119.html @@ -0,0 +1,94 @@ + + +

Configuring Dependency Packages

+

Overview

Generally, the code of a function consists of public libraries and service logic. The public libraries can be packaged as a dependency and shared among functions, reducing the size of the function code package for easy deployment and update.

+

FunctionGraph also provides some public dependencies, which are cached internally for quick loading. These dependencies are recommended.

+

FunctionGraph enables you to manage dependencies in a unified manner. You can upload dependencies from a local path, or through OBS if they are too large, and specify names for them. Dependencies can be iterated. Each dependency can have multiple versions.

+

For details, see section "How Do I Create Function Dependencies?"

+
  • The name of each file in the dependency package cannot end with a tilde (~).
  • A dependency package can contain up to 30,000 files.
  • If your function uses a large private dependency, increase the execution timeout by choosing Configuration > Basic Settings on the function details page.
+
+
+

Creating a Dependency

  1. Log in to the FunctionGraph console, and choose Functions > Dependencies in the navigation pane.
  2. Click Create Dependency.
  3. Set the following parameters:

    +

    + + + + + + + + + + + + + + + + +
    Table 1 Dependency configuration parameters

    Parameter

    +

    Description

    +

    Name

    +

    Dependency name.

    +

    Code Entry Mode

    +

    Upload a ZIP file directly or upload a file from OBS.

    +
    • Upload ZIP: Click Select File to upload one.
    • Upload from OBS: Specify an OBS link URL.
    +

    Runtime

    +

    Select a runtime.

    +

    Description

    +

    Description of the dependency. This parameter is optional.

    +
    +
    +

  4. Click OK. By default, a new dependency is version 1.
  5. Click the dependency name, and view all versions and related information on the displayed page. Each dependency can have multiple versions.

    • To create a dependency version, click Create Version in the upper right corner of the page.
    • To view the address of a version, click the version.
    • To delete a version, click the delete icon in the same row.

      +

      +
    +

+
+

Configuring Dependencies for a Function

  1. Return to the FunctionGraph console, and choose Functions > Function List in the navigation pane.
  2. Click the name of the desired function.
  3. On the displayed function details page, click the Code tab, click Add in the Dependencies area.
  4. On the displayed Select Dependency dialog box, select dependencies and click OK.

    +

    + + + + + + + + + + + + + + + + +
    Table 2 Dependency configuration

    Parameter

    +

    Description

    +

    Runtime

    +

    Runtime of this function. It cannot be changed.

    +

    Type

    +

    Add a Public or Private dependency.

    +

    Name

    +

    Select a dependency.

    +

    Version

    +

    Select a version to be added.

    +
    +
    +
    • You can add a maximum of 20 dependencies for a function.
    • Except your private dependencies, FunctionGraph provides some public dependencies, which you can choose when creating a function.
    +
    +
    +

+
+

Deleting a Dependency

To delete a dependency, just delete all of its versions.

+
  1. Return to the FunctionGraph console, and choose Functions > Dependencies in the navigation pane.
  2. Click the name of the target dependency to go to the Versions page.
  3. Click the delete icon in the row of a version. Repeat this operation if the dependency has multiple versions.

    Figure 1 Deleting a dependency version
    +

    Dependencies referenced by functions cannot be deleted.

    +
    +

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_02_1000.html b/docs/fg/umn/functiongraph_02_1000.html new file mode 100644 index 00000000..a9a5063c --- /dev/null +++ b/docs/fg/umn/functiongraph_02_1000.html @@ -0,0 +1,17 @@ + + +

Function Types

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_02_1001.html b/docs/fg/umn/functiongraph_02_1001.html new file mode 100644 index 00000000..1ac59b31 --- /dev/null +++ b/docs/fg/umn/functiongraph_02_1001.html @@ -0,0 +1,21 @@ + + +

Event Functions

+

Overview

FunctionGraph supports event functions. An event can trigger function execution. Generally, it is in JSON format. You can create an event to trigger your function through the cloud service platform or CodeArts IDE Online. All types of triggers supported by FunctionGraph can trigger event functions.

+
  1. On the function creation page, Function Type is set to Event Function by default.
  2. During testing, a function can be triggered by simply entering the specified event in JSON format.
  3. You can also use triggers to trigger event functions.
+
+
+

Advantages

+
+

Restrictions

Event functions face event source restrictions. You need to comply with the function development rules of the function platform.

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_02_1002.html b/docs/fg/umn/functiongraph_02_1002.html new file mode 100644 index 00000000..91e778af --- /dev/null +++ b/docs/fg/umn/functiongraph_02_1002.html @@ -0,0 +1,21 @@ + + +

HTTP Functions

+

Overview

FunctionGraph supports event functions and HTTP functions. HTTP functions are designed to optimize web services. You can send HTTP requests to URLs to trigger function execution. HTTP functions support APIG triggers only.

+
  1. HTTP functions support the HTTP/1.1 protocol.
  2. On the function creation page, HTTP Function is newly added.
  3. The HTTP function must be set to bootstrap. You can directly write the startup command and allow access over port 8000.
+
+
+

Advantages

+
+

Restrictions

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_02_1005.html b/docs/fg/umn/functiongraph_02_1005.html new file mode 100644 index 00000000..931deadf --- /dev/null +++ b/docs/fg/umn/functiongraph_02_1005.html @@ -0,0 +1,39 @@ + + +

Concepts

+

Function

Functions are code defined to handle events.

+
+

Event Source

An event source is a public cloud service or custom application that publishes events.

+
+

Synchronous Invocation

Clients wait for explicit responses to their requests from a function. Responses are returned only after the function is invoked.

+
+

Asynchronous Invocation

Clients do not care about the function invocation results of their requests. After receiving a request, FunctionGraph puts it in a queue, returns a response, and processes other requests when there are idle resources.

+
+

Trigger

A trigger is an event that triggers function execution.

+
+

Single-Instance Multi-Concurrency

The number of requests that can be concurrently processed by an instance.

+
+

Custom Images

You can directly package and upload container images. The platform then loads and starts these images to create functions.

+
+

Custom Function Execution

You can customize scripts and files to execute functions.

+
+

Function Logs

Logs generated during function invocation.

+
+

Function Monitoring

Monitoring information generated during function execution.

+
+

Function Version

FunctionGraph allows you to publish one or more versions throughout the development, testing, and production processes to manage your function code. The code and environment variables of each version are saved as a snapshot. After the function code is published, modify settings when necessary.

+
+

Function Alias

You can create an alias for a specific function version. To roll back to a previous version, use the corresponding alias to represent the version instead of modifying the function code.

+

Each function alias can be bound to a major version and an additional version for traffic shifting.

+
+

Dependency Package

FunctionGraph enables you to manage dependencies in a unified manner. You can upload dependencies from a local path, or through OBS if they are too large, and specify names for them.

+
+

Bootstrap File

The bootstrap file is the startup file of an HTTP function. The HTTP function can only read bootstrap as the startup file name. If the file name is not bootstrap, the service cannot be started.

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0100.html b/docs/fg/umn/functiongraph_03_0100.html new file mode 100644 index 00000000..60d637ba --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0100.html @@ -0,0 +1,25 @@ + + +

Trigger Management FAQs

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_03_0110.html b/docs/fg/umn/functiongraph_03_0110.html new file mode 100644 index 00000000..75becf5b --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0110.html @@ -0,0 +1,11 @@ + + +

What Is FunctionGraph?

+

FunctionGraph allows you to run you code without provisioning or managing servers, while ensuring high availability and scalability. All you need to do is upload your code and set execution conditions, and FunctionGraph will take care of the rest.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0110_00.html b/docs/fg/umn/functiongraph_03_0110_00.html new file mode 100644 index 00000000..6a98eb5d --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0110_00.html @@ -0,0 +1,79 @@ + + +

General FAQs

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_03_0120.html b/docs/fg/umn/functiongraph_03_0120.html new file mode 100644 index 00000000..fcc9aed2 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0120.html @@ -0,0 +1,11 @@ + + +

Do I Need to Apply for Any Compute, Storage, or Network Services When Using FunctionGraph?

+

When using FunctionGraph, you do not need to apply for or pre-configure any computing, storage, or network services, but need to upload and run code in supported runtimes. FunctionGraph provides and manages underlying compute resources, including server CPUs, memory, and networks. It performs configuration and resource maintenance, code deployment, automatic scaling, load balancing, secure upgrade, and resource monitoring.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0130.html b/docs/fg/umn/functiongraph_03_0130.html new file mode 100644 index 00000000..24b51044 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0130.html @@ -0,0 +1,18 @@ + + +

How Does a Function Access the MySQL Database?

+

Perform the following operations:

+
  1. Check whether the MySQL database is deployed in a VPC. +
  2. Search for MySQL templates and select the one with the desired runtime, as shown in Figure 1. Set the parameters as required and click Create Function.
    Figure 1 Selecting a function template
    +
  3. After the MySQL function is created, choose Configuration > Environment Variables, enable encryption as required (see Figure 2), and click Save.
    Figure 2 Enabling encryption
    +

    If the function needs to access RDS APIs, create an agency and grant required permissions.

    +
    +
    +
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0160.html b/docs/fg/umn/functiongraph_03_0160.html new file mode 100644 index 00000000..34746f53 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0160.html @@ -0,0 +1,21 @@ + + + + +

Do I Need to Deploy My Code After Programming?

+ +

After programming, you only need to package your code into a ZIP file (Java, Node.js, Python, and Go) or JAR file (Java), and upload the file to FunctionGraph for execution.

+ +

When creating a ZIP file, place the handler file under the root directory to ensure that your code can be run normally after being decompressed.

+ +

If you edit code in Go, zip the compiled file, and ensure that the name of the dynamic library file is consistent with the plugin name of the handler. For example, if the name of the dynamic library file is testplugin.so, set the handler to testplugin.Handler.

+ +
+ + +
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0170.html b/docs/fg/umn/functiongraph_03_0170.html new file mode 100644 index 00000000..a6284374 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0170.html @@ -0,0 +1,11 @@ + + +

How Much Disk Space Is Allocated to Each FunctionGraph Function?

+

Each FunctionGraph function is allocated 512 MB ephemeral disk space. You can upload deployment packages up to 10 GB in size. For more information, see section "Notes and Constraints".

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0180.html b/docs/fg/umn/functiongraph_03_0180.html new file mode 100644 index 00000000..2ed331b1 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0180.html @@ -0,0 +1,11 @@ + + +

Does FunctionGraph Support Class Libraries?

+

Yes. FunctionGraph supports both standard libraries and non-standard third-party libraries. For details, see What Dependencies Does FunctionGraph Support?

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0190.html b/docs/fg/umn/functiongraph_03_0190.html new file mode 100644 index 00000000..8e84954e --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0190.html @@ -0,0 +1,11 @@ + + +

Can I Add Threads and Processes in Function Code?

+

You can create additional threads and processes in your function by using runtime and OS features.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0210.html b/docs/fg/umn/functiongraph_03_0210.html new file mode 100644 index 00000000..10fb1e2b --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0210.html @@ -0,0 +1,11 @@ + + +

How Do I Know the Actual Memory Used for Function Execution?

+

The returned information about a function contains the maximum memory consumed. Alternatively, check the memory usage in the execution result.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0220.html b/docs/fg/umn/functiongraph_03_0220.html new file mode 100644 index 00000000..8bafa8db --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0220.html @@ -0,0 +1,11 @@ + + +

Can I Set Environment Variables When Creating Functions?

+

Yes. Set variables to dynamically pass settings to your function code and libraries without changing your code. For more information, see section "Configuring Environment Variables" in the FunctionGraph User Guide.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0230.html b/docs/fg/umn/functiongraph_03_0230.html new file mode 100644 index 00000000..cc8a55e9 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0230.html @@ -0,0 +1,11 @@ + + +

Can I Enter Sensitive Information in Environment Variables?

+

FunctionGraph displays all the information you enter in plain text. Therefore, do not enter insensitive information such as passwords when you define environment variables.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0240.html b/docs/fg/umn/functiongraph_03_0240.html new file mode 100644 index 00000000..12116dfd --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0240.html @@ -0,0 +1,11 @@ + + +

Does FunctionGraph Support Function Versioning?

+

Yes. For details, see section "Managing Versions".

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0250.html b/docs/fg/umn/functiongraph_03_0250.html new file mode 100644 index 00000000..00a5f83a --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0250.html @@ -0,0 +1,12 @@ + + +

How Long Does It Take to Execute a FunctionGraph Function?

+

Within 900s for synchronous execution and 72 hours for asynchronous execution.

+

The default execution timeout is 3s. You can set the timeout (unit: s) to an integer from 3 to 259,200. If you set the timeout of a function to 3s, it will be terminated after 3s.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0260.html b/docs/fg/umn/functiongraph_03_0260.html new file mode 100644 index 00000000..a592b834 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0260.html @@ -0,0 +1,41 @@ + + +

What Runtimes Does FunctionGraph Support?

+

Table 1 lists the runtimes supported by FunctionGraph.

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Supported runtimes and versions

Runtime

+

Version

+

Python

+

2.7, 3.6, 3.9

+

Node.js

+

6.10, 8.10, 10.16, 12.13, 14.18, 16.17, 18.15

+

Java

+

8 and 11

+

Go

+

1.x

+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0270.html b/docs/fg/umn/functiongraph_03_0270.html new file mode 100644 index 00000000..49028ce9 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0270.html @@ -0,0 +1,11 @@ + + +

How Does FunctionGraph Isolate Code?

+

Each FunctionGraph function runs in its own environment and has its own resources and file system.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0280.html b/docs/fg/umn/functiongraph_03_0280.html new file mode 100644 index 00000000..671cfebe --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0280.html @@ -0,0 +1,137 @@ + + +

What Are the Rules for Packaging a Function Project?

+

+

In addition to inline code editing, you can create a function by uploading a ZIP or JAR file, or uploading a ZIP file from OBS. For details, see Packaging Rules and Example ZIP Project Packages.

+

Packaging Rules

In addition to inline code editing, you can create a function by uploading a local ZIP file or JAR file, or uploading a ZIP file from Object Storage Service (OBS). Table 1 describes the rules for packaging a function project.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 Function project packaging rules

Runtime

+

JAR File

+

ZIP File

+

ZIP File on OBS

+

Node.js

+

Not supported.

+
  • If the function project files are saved under the ~/Code/ directory, select and package all files under this directory to ensure that the function handler is under the root directory after the ZIP file is decompressed.
  • If the function project uses third-party dependencies, package the dependencies into a ZIP file, and import the ZIP file on the function code page. Alternatively, package the third-party dependencies and the function project files together.
+

Compress project files into a ZIP file and upload it to an OBS bucket.

+

PHP

+

Not supported.

+
  • If the function project files are saved under the ~/Code/ directory, select and package all files under this directory to ensure that the function handler is under the root directory after the ZIP file is decompressed.
  • If the function project uses third-party dependencies, package the dependencies into a ZIP file, and import the ZIP file on the function code page. Alternatively, package the third-party dependencies and the function project files together.
+

Compress project files into a ZIP file and upload it to an OBS bucket.

+

Python 2.7

+

Not supported.

+
  • If the function project files are saved under the ~/Code/ directory, select and package all files under this directory to ensure that the function handler is under the root directory after the ZIP file is decompressed.
  • If the function project uses third-party dependencies, package the dependencies into a ZIP file, and import the ZIP file on the function code page. Alternatively, package the third-party dependencies and the function project files together.
+

Compress project files into a ZIP file and upload it to an OBS bucket.

+

Python 3.6

+

Not supported.

+
  • If the function project files are saved under the ~/Code/ directory, select and package all files under this directory to ensure that the function handler is under the root directory after the ZIP file is decompressed.
  • If the function project uses third-party dependencies, package the dependencies into a ZIP file, and import the ZIP file on the function code page. Alternatively, package the third-party dependencies and the function project files together.
+

Compress project files into a ZIP file and upload it to an OBS bucket.

+

Java 8

+

If the function does not reference third-party components, compile only the function project files into a JAR file.

+

If the function references third-party components, compile the function project files into a JAR file, and compress all third-party components and the function JAR file into a ZIP file.

+

Compress project files into a ZIP file and upload it to an OBS bucket.

+

Go 1.x

+

Not supported.

+

Zip the compiled file and ensure that the name of the binary file is consistent with that of the handler. For example, if the name of the binary file is Handler, set the name of the handler to Handler.

+

Compress project files into a ZIP file and upload it to an OBS bucket.

+

C#

+

Not supported.

+

Compress project files into a ZIP file. The ZIP file must contain the following files: Project_name.deps.json, Project_name.dll, Project_name.runtimeconfig.json, Project_name.pdb, and HC.Serverless.Function.Common.dll.

+

Compress project files into a ZIP file and upload it to an OBS bucket.

+

Custom

+

Not supported.

+

Compress project files into a ZIP file. The ZIP file must contain a bootstrap file.

+

Compress project files into a ZIP file and upload it to an OBS bucket.

+
+
+
+

Example ZIP Project Packages

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0290.html b/docs/fg/umn/functiongraph_03_0290.html new file mode 100644 index 00000000..d54c3a7b --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0290.html @@ -0,0 +1,52 @@ + + +

What If Error Code 500 Is Reported When Functions that Use APIG Triggers Return Strings?

+

Ensure that the function response for an invocation by API Gateway has been encapsulated and contains body(String), statusCode(int), headers(Map), and isBase64Encoded(boolean).

+

The following is an example response returned by a Node.js function that uses an APIG trigger:

+
exports.handler = function (event, context, callback) {
+    const response = {
+        'statusCode': 200,
+        'isBase64Encoded': false,
+        'headers': {
+            "Content-type": "application/json"
+        },
+        'body': 'Hello, FunctionGraph with APIG',
+    }
+    callback(null, response);
+}
+

The following is an example response returned by a Java function that uses an APIG trigger:

+
import java.util.Map;
+
+public HttpTriggerResponse index(String event, Context context){
+        String body = "<html><title>FunctionStage</title>"
+                + "<h1>This is a simple APIG trigger test</h1><br>"
+                + "<h2>This is a simple APIG trigger test</h2><br>"
+                + "<h3>This is a simple APIG trigger test</h3>"
+                + "</html>";
+        int code = 200;
+        boolean isBase64 = false;
+        Map<String, String> headers = new HashMap<String, String>();
+        headers.put("Content-Type", "text/html; charset=utf-8");
+        return new HttpTriggerResponse(body, headers, code, isBase64);
+    }
+
+
+class HttpTriggerResponse {
+    private String body;
+    private Map<String, String> headers;
+    private int statusCode;
+    private boolean isBase64Encoded;
+    public HttpTriggerResponse(String body, Map<String,String> headers, int statusCode, boolean isBase64Encoded){
+        this.body = body;
+        this.headers = headers;
+        this.statusCode = statusCode;
+        this.isBase64Encoded = isBase64Encoded;
+    }
+}
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0300.html b/docs/fg/umn/functiongraph_03_0300.html new file mode 100644 index 00000000..7a58e701 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0300.html @@ -0,0 +1,24 @@ + + +

How Does a Function Access Redis?

+

Perform the following operations:

+
  1. Check whether the Redis instance is deployed in a VPC.
    • If the Redis instance is deployed in a VPC, configure the same VPC and subnet as the Redis instance for the function by referring to section "Configuring VPC Access".
    • If the Redis instance is built on a public network, obtain its public IP address.
    +
  2. Compile code for connecting a function to the Redis instance.

    FunctionGraph has integrated third-party library redis-py in its Python 2.7 and Python 3.6 runtimes. Therefore, you do not need to download any other Redis libraries.

    +
    # -*- coding:utf-8 -*-
    +import redis
    +def handler (event, context):
    +    r = redis.StrictRedis(host="host_ip",password="passwd",port=6379)
    +    print(str(r.get("hostname")))   
    +    return "^_^"
    +
    +
    • If the function fails to access to the Redis instance on a public network, perform the following operations:
      • Modify the redis.conf file to allow access from any IP addresses.
      • Set a password for accessing the Redis instance in the redis.conf file.
      • Disable the firewall.
      +
    • If the function needs to access DCS APIs, create an agency and grant required permissions.
    +
    +
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0320.html b/docs/fg/umn/functiongraph_03_0320.html new file mode 100644 index 00000000..dadd1f26 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0320.html @@ -0,0 +1,13 @@ + + +

What Do LATEST and TRIM_HORIZON Mean in DIS Trigger Configuration?

+

Cursors LATEST and TRIM_HORIZON specify the start points for reading data in Data Ingestion Service (DIS) streams.

+ +
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0330.html b/docs/fg/umn/functiongraph_03_0330.html new file mode 100644 index 00000000..e1b2d6f2 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0330.html @@ -0,0 +1,16 @@ + + +

How Does a Function Read or Write Files?

+

Background

A function can read files in the code directory. The working directory of a function is the upper-level directory of the handler file. Assume that you have uploaded a folder named backend. To read its test.conf file in the same level of directory as the handler file, use relative path code/backend/test.conf or use a full path (that is, the value of the RUNTIME_CODE_ROOT environment variable). To write a file (for example, to create or download a file), go to the /tmp directory or use the file system mounting feature provided by FunctionGraph.

+
  • If containers are reclaimed, file read/written content will become invalid.
  • Currently, FunctionGraph does not support instance persistence.
+
+
+

Typical Scenarios

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0341.html b/docs/fg/umn/functiongraph_03_0341.html new file mode 100644 index 00000000..52cb386a --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0341.html @@ -0,0 +1,12 @@ + + +

Does FunctionGraph Support Function Extension?

+

FunctionGraph has integrated non-standard libraries such as redis, http, and obs_client. You can directly use these libraries when developing functions.

+

Alternatively, use your own dependencies. For more information, see section "Dependency Management".

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0342.html b/docs/fg/umn/functiongraph_03_0342.html new file mode 100644 index 00000000..b5d25b66 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0342.html @@ -0,0 +1,11 @@ + + +

Which Permissions Are Required for an IAM User to Use FunctionGraph?

+

If you are prompted insufficient permissions when creating, deleting, modifying, or querying functions and triggers in FunctionGraph as an IAM user, contact the administrator to grant permissions to your user group. If you want to invoke other cloud services, such as OBS, configure an agency with the required permissions. For security purpose, do this by following the principle of least privilege.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0343.html b/docs/fg/umn/functiongraph_03_0343.html new file mode 100644 index 00000000..824291f6 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0343.html @@ -0,0 +1,54 @@ + + +

How Do I Create Function Dependencies?

+

You are advised to create function dependencies in EulerOS. If other OSs are used, an error may occur due to underlying dependent libraries. For example, the dynamic link library cannot be found.

+

If the modules to be installed need dependencies such as .dll, .so, and .a, archive them to a .zip package.

+
+

Creating a Dependency for a Python Function

Ensure that the Python version of the packaging environment is the same as that of the function. For Python 2.7, Python 2.7.12 or later is recommended. For Python 3.6, Python 3.6.3 or later is recommended.

+

To install the PyMySQL dependency for a Python 2.7 function in the local /tmp/pymysql directory, run the following command:

+
pip install PyMySQL --root /tmp/pymysql
+

After the command is successfully executed, go to the /tmp/pymysql directory:

+
cd /tmp/pymysql/
+

Go to the site-packages directory (generally, usr/lib64/python2.7/site-packages/) and then run the following command:

+
zip -rq pymysql.zip *
+

The required dependency is generated.

+

To install the local wheel installation package, run the following command:

+
pip install piexif-1.1.0b0-py2.py3-none-any.whl --root /tmp/piexif   
+//Replace piexif-1.1.0b0-py2.py3-none-any.whl with the actual installation package name.
+
+
+

Creating a Dependency for a Node.js Function

Ensure that the corresponding Node.js version has been installed in the environment.

+

To install the MySQL dependency for a Node.js 8.10 function, run the following command:

+
npm install mysql --save
+

The node_modules folder is generated under the current directory.

+ + +

To install multiple dependencies, create a package.json file first. For example, enter the following content into the package.json file and then run the following command:

+
{
+	"name": "test",
+	"version": "1.0.0",
+	"dependencies": {
+		"redis": "~2.8.0",
+		"mysql": "~2.17.1"
+	}
+}
+
npm install --save
+

Do not run the CNPM command to generate Node.js dependencies.

+
+

Compress node_modules into a ZIP package. This generates a dependency that contains both MySQL and Redis.

+

For other Node.js versions, you can create dependencies in the way stated above.

+
+

Creating a Dependency for a Java Function

When you compile a function using Java, dependencies need to be compiled locally.

+

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0344.html b/docs/fg/umn/functiongraph_03_0344.html new file mode 100644 index 00000000..9e07e983 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0344.html @@ -0,0 +1,21 @@ + + +

Function Creation FAQs

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_03_0346.html b/docs/fg/umn/functiongraph_03_0346.html new file mode 100644 index 00000000..9ada68fc --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0346.html @@ -0,0 +1,39 @@ + + +

Function Execution FAQs

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_03_0347.html b/docs/fg/umn/functiongraph_03_0347.html new file mode 100644 index 00000000..23787a08 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0347.html @@ -0,0 +1,12 @@ + + +

Which Steps Are Included in Function Execution?

+

Function execution includes two steps:

+
  1. Select an idle instance with required memory.
  2. Run specified code.
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0348.html b/docs/fg/umn/functiongraph_03_0348.html new file mode 100644 index 00000000..1fe52017 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0348.html @@ -0,0 +1,13 @@ + + +

How Does FunctionGraph Process Concurrent Requests?

+

FunctionGraph automatically scales in or out function instances based on the number of requests. If the number of concurrent requests increases, FunctionGraph allocates more function instances to process the requests. If that number decreases, FunctionGraph allocates fewer function instances accordingly.

+

Number of function instances = Function concurrency/Concurrency per instance

+ +
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0349.html b/docs/fg/umn/functiongraph_03_0349.html new file mode 100644 index 00000000..939382e9 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0349.html @@ -0,0 +1,11 @@ + + +

What If Function Instances Have Not Been Executed for a Long Time?

+

If a function has not been executed for a period of time, all instances related to the function will be released.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0350.html b/docs/fg/umn/functiongraph_03_0350.html new file mode 100644 index 00000000..98f8f8f1 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0350.html @@ -0,0 +1,13 @@ + + +

How Can I Speed Up Initial Access to a Function?

+

C# and Go support a lower startup speed than other languages due to mechanism issues. You can use the following methods to speed up initial access to a function:

+ +
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0351.html b/docs/fg/umn/functiongraph_03_0351.html new file mode 100644 index 00000000..2eec8c5a --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0351.html @@ -0,0 +1,19 @@ + + +

Function Configuration FAQs

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_03_0352.html b/docs/fg/umn/functiongraph_03_0352.html new file mode 100644 index 00000000..bb76d434 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0352.html @@ -0,0 +1,11 @@ + + +

What Is the Quota of FunctionGraph?

+

For details about the resource quota of FunctionGraph, see section "Notes and Constraints".

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0355.html b/docs/fg/umn/functiongraph_03_0355.html new file mode 100644 index 00000000..0ef53be3 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0355.html @@ -0,0 +1,19 @@ + + +

External Resource Access FAQs

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_03_0771.html b/docs/fg/umn/functiongraph_03_0771.html new file mode 100644 index 00000000..7fae0040 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0771.html @@ -0,0 +1,11 @@ + + +

Can I Enable a Listening Port in a Function to Receive External TCP Requests via EIP?

+

No. FunctionGraph does not support this feature currently. Functions are about serverless computing, and compute resources are allocated while functions are running. Customizing a listening port is not suitable.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0817.html b/docs/fg/umn/functiongraph_03_0817.html new file mode 100644 index 00000000..abe5ec8c --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0817.html @@ -0,0 +1,11 @@ + + +

What Are the Common Application Scenarios of FunctionGraph?

+
  1. Web applications: mini programs, web pages/apps, chatbots, and Backends for Frontends (BFF).
  2. Event-driven applications: file processing, image processing, live video streaming/transcoding, real-time data stream processing, and IoT rule/event processing.
  3. AI applications: third-party service integration, AI inference, and license plate recognition.
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0819.html b/docs/fg/umn/functiongraph_03_0819.html new file mode 100644 index 00000000..b39177f3 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0819.html @@ -0,0 +1,11 @@ + + +

Why Can't I Enable or Disable OBS Triggers by Calling APIs?

+

OBS does not support pull triggers. Therefore, OBS triggers cannot be enabled or disabled.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0820.html b/docs/fg/umn/functiongraph_03_0820.html new file mode 100644 index 00000000..2a7b5721 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0820.html @@ -0,0 +1,11 @@ + + +

Why Is My First Request Slow?

+

Functions are cold-started. If initialization or a lengthy operation is performed during the first function execution, the first request will be delayed. However, subsequent requests before container deletion will be faster. If there is no request within one minute, the container will be deleted.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0821.html b/docs/fg/umn/functiongraph_03_0821.html new file mode 100644 index 00000000..192ad396 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0821.html @@ -0,0 +1,11 @@ + + +

What Do I Do If an Error Occurs When Calling an API?

+

Rectify the fault by referring to section "Error Codes". If the fault persists, contact technical support.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0824.html b/docs/fg/umn/functiongraph_03_0824.html new file mode 100644 index 00000000..fdced756 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0824.html @@ -0,0 +1,17 @@ + + +

Other FAQs

+
+
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_03_0825.html b/docs/fg/umn/functiongraph_03_0825.html new file mode 100644 index 00000000..21630407 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0825.html @@ -0,0 +1,11 @@ + + +

How Do I View the Alarm Rules Configured for a Function?

+

Log in to the Cloud Eye console and view alarm rules.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0826.html b/docs/fg/umn/functiongraph_03_0826.html new file mode 100644 index 00000000..e639f7b4 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0826.html @@ -0,0 +1,11 @@ + + +

Why Can't the API Gateway Domain Name Bound to a Service Be Resolved During Function Invocation?

+

Currently, FunctionGraph resolves only DNS domain names and POD domain names.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0827.html b/docs/fg/umn/functiongraph_03_0827.html new file mode 100644 index 00000000..6a290b7a --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0827.html @@ -0,0 +1,11 @@ + + +

Does FunctionGraph Support ZIP Decompiling During Video Transcoding?

+

No. Please decompile your files before uploading them.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0828.html b/docs/fg/umn/functiongraph_03_0828.html new file mode 100644 index 00000000..59251fb1 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0828.html @@ -0,0 +1,11 @@ + + +

Does FunctionGraph Support Synchronous Transmission at the Maximum Intranet Bandwidth?

+

Not currently.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0830.html b/docs/fg/umn/functiongraph_03_0830.html new file mode 100644 index 00000000..06232b1a --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0830.html @@ -0,0 +1,23 @@ + + +

How Can I Create an ODBC Drive-based Python Dependency Package for Database Query?

+

For OS-dependent packages (for example, unixODBC), download the source code to compile dependency packages.

+
  1. Log in to your ECS on the ECS console (ensure that the GCC and Make tools have been installed), and run the following command to download the source code package:
    wget source code path
    +

    If you downloaded a .zip file, run the following command to decompress it:

    +
    unzip xxx/xx.zip 
    +

    If you downloaded a tar.gz file, run the following command to decompress it:

    +
    tar -zxvf xxx/xx.tar.gz
    +
  2. Run the following command to create the /opt/function/code directory:
    mkdir /opt/function/code
    +
  3. Go to the destination directory and run the following command:
    ./configure --prefix=/opt/function/code --sysconfdir=/opt/function/code;make;make install
    +
  4. Go to /opt/function/code/lib/pkgconfig and check whether the prefix directory is /opt/function/code.
    cd /opt/function/code/lib/pkgconfig
    +
  5. Copy all files in /opt/function/code/lib to /opt/function/code.
    cp -r /opt/function/code/lib/* /opt/function/code
    +
  6. Switch to /opt/function/code and compress all files in it to a .zip package.
    cd /opt/function/code 
    +
    zip -r xxx.zip *
    +
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0832.html b/docs/fg/umn/functiongraph_03_0832.html new file mode 100644 index 00000000..d20cadae --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0832.html @@ -0,0 +1,11 @@ + + +

What If the VPC Quota Is Used Up?

+

A tenant can create up to 4 VPCs. To create more VPCs, submit a service ticket.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0833.html b/docs/fg/umn/functiongraph_03_0833.html new file mode 100644 index 00000000..92d7eb12 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0833.html @@ -0,0 +1,11 @@ + + +

How Can I Print Info, Error, or Warn Logs?

+

Take Java as an example. You can use this demo to print logs.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0834.html b/docs/fg/umn/functiongraph_03_0834.html new file mode 100644 index 00000000..2be74061 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0834.html @@ -0,0 +1,15 @@ + + +

How Do I Configure External Network Access?

+

By default, functions deployed in a VPC are isolated from the Internet. If a function needs to access both internal and external networks, add a NAT gateway for the VPC.

+

Prerequisites

+
  1. You have created a VPC and subnet according to section "Creating a VPC".
  2. You have obtained an elastic IP address according to section "Assigning an EIP".
+

Procedure of Creating a NAT Gateway

+
  1. Log in to the NAT Gateway console, and click Create NAT Gateway.
  2. On the displayed page, enter gateway information, select a VPC and subnet (for example, vpc-01), and confirm and submit the settings to create a NAT gateway. For details, see section "Creating a NAT Gateway".
  3. Click the NAT gateway name. On the details page that is displayed, click Add an SNAT Rule and click OK.
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0835.html b/docs/fg/umn/functiongraph_03_0835.html new file mode 100644 index 00000000..d8be7e46 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0835.html @@ -0,0 +1,11 @@ + + +

How Do I Use an APIG Trigger to Invoke a Function?

+

For details, see section "Using an APIG Trigger".

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0836.html b/docs/fg/umn/functiongraph_03_0836.html new file mode 100644 index 00000000..d5408cfa --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0836.html @@ -0,0 +1,11 @@ + + +

How Can I Watermark Images?

+

See section "Watermarking Images".

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0837.html b/docs/fg/umn/functiongraph_03_0837.html new file mode 100644 index 00000000..a09fac3d --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0837.html @@ -0,0 +1,11 @@ + + +

How Do I Create the Bootstrap File for an HTTP Function?

+

To create an HTTP function, create a bootstrap file. For details, see section "Creating a Bootstrap File".

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0838.html b/docs/fg/umn/functiongraph_03_0838.html new file mode 100644 index 00000000..4b0c6941 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0838.html @@ -0,0 +1,13 @@ + + +

How Do I Read the Request Header of a Function?

+

The first parameter in the function handler contains the request header. You can print the function execution result to obtain required fields.

+

As shown in the following figure, event is the first parameter in the function handler, and headers is the request header.

+

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0840.html b/docs/fg/umn/functiongraph_03_0840.html new file mode 100644 index 00000000..fa60743b --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0840.html @@ -0,0 +1,14 @@ + + +

How Do I Use a Domain Name to Access an API Registered with API Gateway (Dedicated)?

+

The domain name www.test.com is used as an example. The procedure is as follows:

+
  1. Log in to the API Gateway console, choose Dedicated Gateways in the navigation pane, and click the target gateway name. On the Gateway Information page, view EIP in the Inbound Access area to obtain the IP address of the API gateway.
  2. On the DNS console, configure an IPv4 rule for mapping www.test.com to an API gateway address.
  3. Configure domain name resolution. In this way, you can access the API registered with the API gateway by using domain name www.test.com.
+

+

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0841.html b/docs/fg/umn/functiongraph_03_0841.html new file mode 100644 index 00000000..28ff7bc7 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0841.html @@ -0,0 +1,12 @@ + + +

Can I Set the Domain Name of an API to My Own Domain Name?

+

Yes. The procedure is as follows:

+
  1. Log in to the APIG console and bind a domain name by referring to section "Binding a Domain Name" in the API Gateway User Guide.
  2. On the Domain Names tab page of the created API group, click Bind Independent Domain Name. For example, set xxxx.apig.x to test.com/user/get.
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0842.html b/docs/fg/umn/functiongraph_03_0842.html new file mode 100644 index 00000000..feb668c3 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0842.html @@ -0,0 +1,11 @@ + + +

Can I Change the Runtime?

+

No. Once a function is created, its runtime cannot be changed.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0843.html b/docs/fg/umn/functiongraph_03_0843.html new file mode 100644 index 00000000..5b16d757 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0843.html @@ -0,0 +1,16 @@ + + +

Why Is Message "failed to mount exist system path" Displayed?

+

When you see this message, mount the file to a new path.

+

User ID/user group ID: Can be any number except 1000. The value –1 will be automatically converted to 1003. The two IDs control the directory permissions for accessing a remote file system.

+

File system/ECS name: Name of the file system or ECS to create. Ensure that you have specified a VPC and agency that you have been authorized to access.

+

Shared directory: To configure a remote shared directory for the mounted ECS, see section "Creating an NFS Shared Directory on an ECS".

+

Access path: Location where the file system is to be mounted in the function. Set a new two-level directory that starts with /mnt. For example, /mnt/test.

+

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0846.html b/docs/fg/umn/functiongraph_03_0846.html new file mode 100644 index 00000000..15b33288 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0846.html @@ -0,0 +1,15 @@ + + +

How Do I Obtain Uploaded Files?

+

Take Python as an example. If you use os.getcwd() to query the current directory, the directory will be /opt/function. However, code has actually been uploaded to /opt/function/code.

+

You can use either of the following methods to obtain uploaded files:

+
  1. Run the cd command to switch to /opt/function/code.
  2. Access the full path (value of the RUNTIME_CODE_ROOT environment variable).

    You can obtain uploaded files by referring to the preceding methods when other languages are used.

    +
    +
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0847.html b/docs/fg/umn/functiongraph_03_0847.html new file mode 100644 index 00000000..188e05e8 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0847.html @@ -0,0 +1,11 @@ + + +

What Are the Precautions for Using a Dependency?

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0848.html b/docs/fg/umn/functiongraph_03_0848.html new file mode 100644 index 00000000..f2c62b6c --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0848.html @@ -0,0 +1,11 @@ + + +

Why Can't I Receive Responses for Synchronous Invocation?

+

If the E2E function execution latency exceeds 90s, asynchronous invocation is recommended. If synchronous invocation is used, no responses can be received after 90s due to gateway restrictions.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0849.html b/docs/fg/umn/functiongraph_03_0849.html new file mode 100644 index 00000000..8e01b535 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0849.html @@ -0,0 +1,11 @@ + + +

What Should I Do If the os.system("command &") Execution Logs Are Not Collected?

+

Do not use os.system("command &"). The background command output will not be collected. To obtain the command output, use subprocess.Popen instead.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0855.html b/docs/fg/umn/functiongraph_03_0855.html new file mode 100644 index 00000000..38891901 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0855.html @@ -0,0 +1,11 @@ + + +

Which Directories Can Be Accessed When a Custom Runtime Is Used?

+

By default, only the /tmp directory can be accessed, for example, for creating or downloading files.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0856.html b/docs/fg/umn/functiongraph_03_0856.html new file mode 100644 index 00000000..ba59843f --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0856.html @@ -0,0 +1,11 @@ + + +

Which Minor Versions of Python 3.6 and 3.9 Are Supported?

+

3.6.8 and 3.9.2.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0857.html b/docs/fg/umn/functiongraph_03_0857.html new file mode 100644 index 00000000..790de6a8 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0857.html @@ -0,0 +1,46 @@ + + +

Which Actions Can Be Used Instead of a VPC Administrator Agency for VPC Access?

+

The actions listed in Table 1 can be used.

+ +
+ + + + + + + + + + + + + + + + + + + +
Table 1 Actions

Permission

+

Action

+

Deleting a port

+

vpc:ports:delete

+

Querying a port

+

vpc:ports:get

+

Creating a port

+

vpc:ports:create

+

Querying a VPC

+

vpc:vpcs:get

+

Querying a subnet

+

vpc:subnets:get

+
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0858.html b/docs/fg/umn/functiongraph_03_0858.html new file mode 100644 index 00000000..cf016f34 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0858.html @@ -0,0 +1,11 @@ + + +

Can I Change a Function's Name?

+

No. A function's name cannot be changed once the function is created.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0859.html b/docs/fg/umn/functiongraph_03_0859.html new file mode 100644 index 00000000..af31bc9d --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0859.html @@ -0,0 +1,11 @@ + + +

What Are the Possible Causes for Function Timeout?

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0860.html b/docs/fg/umn/functiongraph_03_0860.html new file mode 100644 index 00000000..5a6b22c9 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0860.html @@ -0,0 +1,18 @@ + + +

How Does a Function Obtain the Request Path or Parameters When Using an APIG Trigger?

+

By default, the request path or parameters are included in event. A function invokes APIG using its event template. You can obtain the request path or parameters from the function execution result.

+

Example:

+

+ +

You can call an API using its request path. Example: https://464d86ec641d45a683c5919ac57f3823.apig.projectID.com/apig-demo/subpath

+

Alternatively, you can call an API by adding request parameters. Example:

+

https://464d86ec641d45a683c5919ac57f3823.apig.projectID.com/apig-demo/subpath?a=1&b=2

+

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0868.html b/docs/fg/umn/functiongraph_03_0868.html new file mode 100644 index 00000000..740931c7 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0868.html @@ -0,0 +1,11 @@ + + +

Why Does a Function Use More Memory Than Estimated and Even Trigger the Out of Memory Alarm?

+
  1. Event parsing and cache consume extra memory during function invocation.
  2. After the invocation is complete, reclaimed memory is often put in the internal pool instead of back to the OS, resulting in high memory usage. This is more obvious in the case of high concurrency.
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0869.html b/docs/fg/umn/functiongraph_03_0869.html new file mode 100644 index 00000000..c6b4e0d5 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0869.html @@ -0,0 +1,12 @@ + + +

How Do I Check the Memory Usage When Seeing "runtime memory limit exceeded"?

+

Check the used memory in the response.

+
Figure 1 Checking the used memory
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0870.html b/docs/fg/umn/functiongraph_03_0870.html new file mode 100644 index 00000000..3a4305c6 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0870.html @@ -0,0 +1,13 @@ + + +

How Do I Troubleshoot "CrashLoopBackOff"?

+

The message "CrashLoopBackOff: The application inside the container keeps crashing" is displayed when a custom image execution failure occurs. In this case, perform the following operations:

+
  1. Analyze the causes.
    Figure 1 Viewing the execution result
    +
  2. Verify the container image by referring to section "Deploying a Function Using a Container Image".
  3. Check whether the image uses the Linux x86 architecture. Currently, only Linux x86 images are supported.
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0871.html b/docs/fg/umn/functiongraph_03_0871.html new file mode 100644 index 00000000..0b0cae61 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0871.html @@ -0,0 +1,11 @@ + + +

How Do I Obtain the Code of a Function?

+
  1. Log in to the FunctionGraph console, and click the name of the target function to go to the details page. Choose Operation > Export function in the upper right, and click Export Code.
  2. Alternatively, call the function export API.
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0872.html b/docs/fg/umn/functiongraph_03_0872.html new file mode 100644 index 00000000..c0bb9227 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0872.html @@ -0,0 +1,19 @@ + + +

How Does a Container Image–based Function Resolve a Private DNS Domain Name?

+

FunctionGraph functions created with a container image cannot directly parse private Domain Name Service (DNS) domain names. However, you can call DNS APIs to achieve this purpose.

+

Resolving a Private DNS Domain Name

  1. Obtain a private domain name and zone ID.

    This procedure uses a domain name with a record set as an example.

    +
    1. Log in to the DNS console.
    2. Obtain a zone ID.

      Click , and select Domain Name in the search box to obtain a zone ID.

      +
    3. Obtain the private domain name corresponding to a recording set.

      Click the domain name to go to the record set list, and select a record set.

      +
    +
  1. Compile the resolution logic.

    Debug the API used to query record sets in a zone.

    +
    • Set zone_id to the zone ID obtained in the preceding step, and click Debug. The IP address of the private domain name is displayed in the response body.
    • Switch to the Sample Code tab to obtain the complete code. For details about the dependencies, click View SDK Details.
    +
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0874.html b/docs/fg/umn/functiongraph_03_0874.html new file mode 100644 index 00000000..f89bc3d3 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0874.html @@ -0,0 +1,11 @@ + + +

Can I Create an OBS Trigger with an Existing Bucket?

+

Yes. If a message is displayed indicating that the configuration of the current trigger conflicts with that of another one, the two triggers have the same bucket, prefix, and suffix. If you still want to use this bucket for the current trigger, modify the prefix or suffix.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0875.html b/docs/fg/umn/functiongraph_03_0875.html new file mode 100644 index 00000000..ee2a6085 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0875.html @@ -0,0 +1,11 @@ + + +

After I Updated an Image with the Same Name, Reserved Instances Still Use the Old Image. What Can I Do?

+

Use a non-latest tag to manage image updates, and do not use the same image name.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0882.html b/docs/fg/umn/functiongraph_03_0882.html new file mode 100644 index 00000000..12e54faa --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0882.html @@ -0,0 +1,27 @@ + + +

Do You Have Sample Code for Initializers?

+

Yes. See the following examples:

+ +
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0883.html b/docs/fg/umn/functiongraph_03_0883.html new file mode 100644 index 00000000..000fa8f7 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0883.html @@ -0,0 +1,35 @@ + + + +

Dependency Management FAQs

+ +

+
+ +
+ + + +
+ diff --git a/docs/fg/umn/functiongraph_03_0884.html b/docs/fg/umn/functiongraph_03_0884.html new file mode 100644 index 00000000..e7070628 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0884.html @@ -0,0 +1,23 @@ + + +

How Do I Enable Structured Log Query?

+

Scenario

To check the status of asynchronous invocation requests, view the records by choosing Configuration > Configure Async Notification on the function details page, as shown in Figure 1.

+
Figure 1 Asynchronous invocation records
+
+

Prerequisites

You have enabled asynchronous invocation status persistence.

+
+

Procedure

  1. Contact customer service to add your account to the whitelist of this feature.
  2. On the Configure Async Notification page, click Enable LTS.
  3. Click Edit next to Asynchronous Notification Policy, and enable Asynchronous Invocation Status Persistence, as shown in Figure 2 and Figure 3.

    Figure 2 Configuring asynchronous notification policy
    +
    Figure 3 Enabling asynchronous invocation status persistence
    +

  4. Configure structured query on the LTS console.

    1. On the function details page, view the log group and log stream. Press F12, choose Network, enter filter async-status-log-detail, and obtain the log group ID and log stream ID, as shown in Figure 4.
      Figure 4 Obtaining log group ID and log stream ID
      +
    2. On the LTS console, locate the log group and log stream by their IDs.
    3. On the log stream details page, click the gear icon in the upper right.
    4. Configure log structuring.
    5. Click Intelligent Extraction.
    6. Click to modify the field definition as follows:
      1. Change field1 to function_urn and its type to string.
      2. Change field2 to request_id and its type to string.
      3. Change field3 to seq_status and its type to long.
      4. Change field4 to operation_timestamp and its type to long.
      5. Change field5 to error_code and its type to long.
      6. Change field6 to error_message and its type to string.
      +

      Enable Quick Analysis.

      +
    7. Click Save.
    +

+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0885.html b/docs/fg/umn/functiongraph_03_0885.html new file mode 100644 index 00000000..5085a269 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0885.html @@ -0,0 +1,11 @@ + + +

When Do I Need a Dependency?

+

When you install a program or develop code that relies on an environment to run, you need to introduce the dependency.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0886.html b/docs/fg/umn/functiongraph_03_0886.html new file mode 100644 index 00000000..200aeb47 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0886.html @@ -0,0 +1,139 @@ + + +

What Dependencies Does FunctionGraph Support?

+

Supported Dependencies

+

FunctionGraph supports standard libraries and third-party dependencies.

+ + +
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0887.html b/docs/fg/umn/functiongraph_03_0887.html new file mode 100644 index 00000000..fbc1b095 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0887.html @@ -0,0 +1,11 @@ + + +

How Do I Use Third-Party Dependencies on FunctionGraph?

+
  1. Package third-party libraries into a ZIP package by referring to How Do I Create Function Dependencies?
  2. Create a dependency on the FunctionGraph console by referring to How Do I Create a Dependency on the FunctionGraph Console?
  3. On the function details page, click the Code tab, and add the dependency by referring to How Do I Add a Dependency to a Function? Then you can use the dependency in the function code.
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0888.html b/docs/fg/umn/functiongraph_03_0888.html new file mode 100644 index 00000000..05c1c395 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0888.html @@ -0,0 +1,44 @@ + + +

How Do I Create a Dependency on the FunctionGraph Console?

+
  1. Log in to the FunctionGraph console, and choose Functions > Dependencies in the navigation pane.
  2. Click Create Dependency.
  3. Set the following parameters. +
    + + + + + + + + + + + + + + + + +
    Table 1 Dependency configuration parameters

    Parameter

    +

    Description

    +

    Name

    +

    Dependency name.

    +

    Code Entry Mode

    +

    Upload a ZIP file directly or through OBS.

    +
    • Upload ZIP file: Click Select File to upload a ZIP file.
    • Upload from OBS: Specify an OBS link URL.
    +

    Runtime

    +

    Select a runtime.

    +

    Description

    +

    Description of the dependency. This parameter is optional.

    +
    +
    +
  4. Click OK. By default, a new dependency is version 1.
  5. Click the dependency name, and view all versions and related information on the displayed page. Each dependency can have multiple versions.
    • To create a dependency version, click Create Version in the upper right corner of the page.
    • To view the address of a version, click the version.
    • To delete a version, click the delete icon in the same row.

      +
    +
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0889.html b/docs/fg/umn/functiongraph_03_0889.html new file mode 100644 index 00000000..32f7dcd3 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0889.html @@ -0,0 +1,12 @@ + + +

How Do I Add a Dependency to a Function?

+
  1. On the function details page, click the Code tab, and click Add in the Dependencies area.
    • Public: Public dependencies are provided by FunctionGraph and can be directly added.
    • Private: Private dependencies are those you created and uploaded.
    +
  2. Click OK.
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_03_0890.html b/docs/fg/umn/functiongraph_03_0890.html new file mode 100644 index 00000000..e4df1ef3 --- /dev/null +++ b/docs/fg/umn/functiongraph_03_0890.html @@ -0,0 +1,11 @@ + + +

What Is a Dependency?

+

A dependency is a program package and also an environment required for running a software package. The software package relies on and can only run in the environment.

+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_04_0100.html b/docs/fg/umn/functiongraph_04_0100.html new file mode 100644 index 00000000..f356d51b --- /dev/null +++ b/docs/fg/umn/functiongraph_04_0100.html @@ -0,0 +1,16 @@ + + +

Introduction

+

General Procedure

FunctionGraph allows you to run your code without provisioning or managing servers, while ensuring high availability and scalability. All you need to do is upload your code and set execution conditions, and FunctionGraph will take care of the rest. In addition, you pay only for what you use and you are not charged when your code is not running.

+

To quickly create a function using FunctionGraph, do as follows:

+

+

+
  1. Set permissions: Ensure that you have the FunctionGraph FullAccess permissions.
  2. Create a function: Create a function from scratch or using the sample code or a container image.
  3. Configure the function: Configure the code source or modify other parameters.
  4. Test the function: Create a test event to debug the function.
  5. View the execution result: On the function details page, view the execution result based on the configured test event.
  6. View metrics: On the Monitoring tab page of the function details page, view function metrics.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_04_0101.html b/docs/fg/umn/functiongraph_04_0101.html new file mode 100644 index 00000000..586759a6 --- /dev/null +++ b/docs/fg/umn/functiongraph_04_0101.html @@ -0,0 +1,41 @@ + + +

Creating a Function from Scratch

+

Introduction

This section describes how to quickly create and test a HelloWorld function on the FunctionGraph console.

+
+

Step 1: Prepare the Environment

To perform the operations described in this section, ensure that you have the FunctionGraph FullAccess permissions, that is, all permissions for FunctionGraph. For more information, see section "Permissions Management".

+
+

Step 2: Create a Function

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click Create Function in the upper right corner and choose Create from scratch.
  3. On the displayed page, set Function Name to HelloWorld, retain the default values for other parameters, and click Create Function. For details, see Figure 1.
+
Figure 1 Configuring basic information
+
  1. Configure the code source, copy the following code to the code window, and click Deploy.
    The sample code enables you to obtain test events and print test event information.
    exports.handler = function (event, context, callback) {
    +    const error = null;
    +    const output = `Hello message: ${JSON.stringify(event)}`;
    +    callback(error, output);
    +}
    +
    +
+
+

Step 3: Test the Function

  1. On the function details page, click Test. In the displayed dialog box, create a test event.
  2. Select blank-template, set Event Name to test, modify the test event as follows, and click Create.
    {
    +    "hello": "function"
    +}
    +
    Figure 2 Configuring a test event
    +
+
+

Step 4: View the Execution Result

Click Test and view the execution result on the right.

+ +

A maximum of 2 KB logs can be displayed. For more log information, see section "Querying Function Logs".

+
+
+

Step 5: View Monitoring Metrics

On the function details page, click the Monitoring tab.

+ +
+

Step 6: Delete a Function

  1. On the function details page, choose Operation > Delete Function in the upper right corner.
  2. In the confirmation dialog box, enter DELETE and click OK to release resources in a timely manner.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_04_0102.html b/docs/fg/umn/functiongraph_04_0102.html new file mode 100644 index 00000000..0a0730f2 --- /dev/null +++ b/docs/fg/umn/functiongraph_04_0102.html @@ -0,0 +1,34 @@ + + +

Creating a Function Using a Template

+

Introduction

FunctionGraph provides templates to automatically complete code and running environment configurations when you create a function, helping you quickly build applications.

+
+

Step 1: Prepare the Environment

To perform the operations described in this section, ensure that you have the FunctionGraph FullAccess permissions, that is, all permissions for FunctionGraph. For more information, see section "Permissions Management".

+
+

Step 2: Create a Function

  1. Log in to the FunctionGraph console. In the navigation pane, choose Functions > Function List.
  2. Click Create Function in the upper right corner and choose Select template.
  3. Select the template shown in Figure 1 and click Configure.
    Figure 1 Selecting a template
    +
  1. Set Function Name to context, select any agency from the Agency drop-down list, retain default values for other parameters, and click Create Function.
    • If no agency is configured, the following message will be displayed when the function is triggered:
      Failed to access other services because no temporary AK, SK, or token has been obtained. Please set an agency.
      +
    +
    +
    Figure 2 Setting basic information
    +
+
+

Step 3: Test the Function

  1. On the function details page, click Test. In the displayed dialog box, create a test event.
  2. Select blank-template, set Event Name to test, and click Create.
    Figure 3 Configuring a test event
    +
+
+

Step 4: View the Execution Result

Click Test and view the execution result on the right.

+ +

A maximum of 2 KB logs can be displayed. For more log information, see section "Querying Function Logs".

+
+
+

Step 5: View Monitoring Metrics

On the function details page, click the Monitoring tab.

+ +
+

Step 6: Delete a Function

  1. On the function details page, choose Operation > Delete Function in the upper right corner.
  2. In the confirmation dialog box, enter DELETE and click OK to release resources in a timely manner.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_04_0103.html b/docs/fg/umn/functiongraph_04_0103.html new file mode 100644 index 00000000..fc3a20f7 --- /dev/null +++ b/docs/fg/umn/functiongraph_04_0103.html @@ -0,0 +1,125 @@ + + +

Developing an HTTP Function

+

Introduction

When developing an HTTP function using a custom image, implement an HTTP server in the image and listen on port 8000 for requests. (Do not change port 8000 in the examples provided in this section.) HTTP functions support only APIG triggers.

+
+

Step 1: Prepare the Environment

To perform the operations described in this section, ensure that you have the FunctionGraph FullAccess permissions, that is, all permissions for FunctionGraph. For more information, see section "Permissions Management".

+
+

Step 2: Create an Image

Take the Linux x86 64-bit OS as an example.

+
+
  1. Create a folder.
    mkdir custom_container_http_example && cd custom_container_http_example
    +
  1. Implement an HTTP server. Node.js is used as an example. For details about other languages, see section "Creating an HTTP Function".

    Create the main.js file to introduce the Express framework, receive POST requests, print the request body as standard output, and return "Hello FunctionGraph, method POST" to the client.

    +
    const express = require('express'); 
    + 
    +const PORT = 8000; 
    + 
    +const app = express(); 
    +app.use(express.json());
    + 
    +app.post('/*', (req, res) => { 
    +    console.log('receive', req.body); 
    +    res.send('Hello FunctionGraph, method POST');
    +});
    + 
    +app.listen(PORT, () => { 
    +  console.log(`Listening on http://localhost:${PORT}`); 
    +});
    +
  1. Create the package.json file for npm so that it can identify the project and process project dependencies.
    {
    +  "name": "custom-container-http-example",
    +  "version": "1.0.0",
    +  "description": "An example of a custom container http function",
    +  "main": "main.js",
    +  "scripts": {},
    +  "keywords": [],
    +  "author": "",
    +  "license": "ISC",
    +  "dependencies": {
    +      "express": "^4.17.1"
    +  }
    +}
    +
    • name: project name
    • version: project version
    • main: application entry file
    • dependencies: all available dependencies of the project in npm
    +
  2. Create a Dockerfile.
    FROM node:12.10.0
    +
    +ENV HOME=/home/custom_container
    +ENV GROUP_ID=1003
    +ENV GROUP_NAME=custom_container
    +ENV USER_ID=1003
    +ENV USER_NAME=custom_container
    +
    +RUN mkdir -m 550 ${HOME} && groupadd -g ${GROUP_ID} ${GROUP_NAME} && useradd -u ${USER_ID} -g ${GROUP_ID} ${USER_NAME}
    +
    +COPY --chown=${USER_ID}:${GROUP_ID} main.js ${HOME}
    +COPY --chown=${USER_ID}:${GROUP_ID} package.json ${HOME}
    +
    +RUN cd ${HOME} && npm install
    +
    +RUN chown -R ${USER_ID}:${GROUP_ID} ${HOME}
    +
    +RUN find ${HOME} -type d | xargs chmod 500
    +RUN find ${HOME} -type f | xargs chmod 500
    +
    +USER ${USER_NAME}
    +WORKDIR ${HOME}
    +
    +EXPOSE 8000
    +ENTRYPOINT ["node", "main.js"]
    +
    • FROM: Specify base image node:12.10.0. The base image is mandatory and its value can be changed.
    • ENV: Set environment variables HOME (/home/custom_container), GROUP_NAME and USER_NAME (custom_container), USER_ID and GROUP_ID (1003). These environment variables are mandatory and their values can be changed.
    • RUN: Use the format RUN <Command>. For example, RUN mkdir -m 550 ${HOME}, which means to create the home directory for user ${USER_NAME} during container building.
    • USER: Switch to user ${USER_NAME}.
    • WORKDIR: Switch the working directory to the home directory of user ${USER_NAME}.
    • COPY: Copy main.js and package.json to the home directory of user ${USER_NAME} in the container.
    • EXPOSE: Expose port 8000 of the container. Do not change this parameter.
    • ENTRYPOINT: Run the node main.js command to start the container. Do not change this parameter.
    +
    1. You can use any base image.
    2. In the cloud environment, UID 1003 and GID 1003 are used to start the container by default. The two IDs can be modified by choosing Configuration > Basic Settings > Container Image Override on the function details page. They cannot be root or a reserved ID.
    3. Do not change port 8000 in the example HTTP function.
    +
    +
  1. Build an image.

    In the following example, the image name is custom_container_http_example, the tag is latest, and the period (.) indicates the directory where the Dockerfile is located. Run the image build command to pack all files in the directory and send the package to a container engine to build an image.

    +
    docker build -t custom_container_http_example:latest .
    +
+

Step 3: Perform Local Verification

  1. Start the Docker container.
    docker run -u 1003:1003 -p 8000:8000 custom_container_http_example:latest
    +
  1. Open a new Command Prompt, and send a message through port 8000. You can access all paths in the root directory in the template code. The following uses helloworld as an example.
    curl -XPOST -H 'Content-Type: application/json' -d '{"message":"HelloWorld"}' localhost:8000/helloworld
    +
    The following information is returned based on the module code:
    Hello FunctionGraph, method POST
    +
    +
  1. Check whether the following information is displayed:
    receive {"message":"HelloWorld"}
    +

    +

    Alternatively, run the docker logs command to obtain container logs.

    +

    +
+
+

Step 4: Upload the Image

  1. Log in to the SoftWare Repository for Container (SWR) console. In the navigation pane, choose My Images.
  2. Click Upload Through Client or Upload Through SWR in the upper right corner.
  3. Upload the image as prompted.

    +

    +
  4. View the image on the My Images page.
+
+

Step 5: Create a Function

  1. In the left navigation pane of the management console, choose Compute > FunctionGraph. On the FunctionGraph console, choose Functions > Function List from the navigation pane.
  2. Click Create Function in the upper right corner and choose Container Image.
  3. Set the basic information.
    • Function Type: Select HTTP Function.
    • Function Name: Enter custom_container_http.
    • Container Image: Select the image uploaded to SWR.
    • Agency: Select an agency with the SWR Admin permission. If no agency is available, create one by referring to section "Creating an Agency".
    +
  4. After the configuration is complete, click Create Function.
+
+

Step 6: Test the Function

  1. On the function details page, click Test. In the displayed dialog box, create a test event.
  2. Select apig-event-template, set Event Name to helloworld, modify the test event as follows, and click Create.
    {
    +    "body": "{\"message\": \"helloworld\"}",
    +    "requestContext": {
    +        "requestId": "11cdcdcf33949dc6d722640a13091c77",
    +        "stage": "RELEASE"
    +    },
    +    "queryStringParameters": {
    +        "responseType": "html"
    +    },
    +    "httpMethod": "POST",
    +    "pathParameters": {},
    +    "headers": {
    +        "Content-Type": "application/json"
    +    },
    +    "path": "/helloworld",
    +    "isBase64Encoded": false
    +}
    +
+
+

Step 7: View the Execution Result

Click Test and view the execution result on the right.

+
Figure 1 Execution result
+ +
+

Step 8: View Monitoring Metrics

On the function details page, click the Monitoring tab.

+ +
+

Step 9: Delete the Function

  1. On the function details page, choose Operation > Delete Function in the upper right corner.
  2. In the confirmation dialog box, enter DELETE and click OK to release resources in a timely manner.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_04_0104.html b/docs/fg/umn/functiongraph_04_0104.html new file mode 100644 index 00000000..4585dc09 --- /dev/null +++ b/docs/fg/umn/functiongraph_04_0104.html @@ -0,0 +1,122 @@ + + +

Developing an Event Function

+

Introduction

When developing an event function using a custom image, implement an HTTP server in the image and listen on port 8000 for requests. By default, the request path /init is the function initialization entry. Implement it as required. The request path /invoke is the function execution entry where trigger events are processed. For details about request parameters, see section "Supported Event Sources".

+

+
+

Step 1: Prepare the Environment

To perform the operations described in this section, ensure that you have the FunctionGraph FullAccess permissions, that is, all permissions for FunctionGraph. For more information, see section "Permissions Management".

+
+

Step 2: Create an Image

Take the Linux x86 64-bit OS as an example.

+
+
  1. Create a folder.
    mkdir custom_container_event_example && cd custom_container_event_example
    +
  1. Implement an HTTP server to process init and invoke requests and give a response. Node.js is used as an example.

    Create the main.js file to introduce the Express framework and implement a function handler (method POST and path /invoke and an initializer (method POST and path /init).

    +
    const express = require('express'); 
    + 
    +const PORT = 8000; 
    + 
    +const app = express(); 
    +app.use(express.json());
    + 
    +app.post('/init', (req, res) => { 
    +  console.log('receive', req.body);
    +  res.send('Hello init\n'); 
    +}); 
    + 
    +app.post('/invoke', (req, res) => { 
    +  console.log('receive', req.body);
    +  res.send('Hello invoke\n'); 
    +}); 
    + 
    +app.listen(PORT, () => { 
    +  console.log(`Listening on http://localhost:${PORT}`); 
    +});
    +
  1. Create the package.json file for npm so that it can identify the project and process project dependencies.
    {
    +  "name": "custom-container-event-example",
    +  "version": "1.0.0",
    +  "description": "An example of a custom container event function",
    +  "main": "main.js",
    +  "scripts": {},
    +  "keywords": [],
    +  "author": "",
    +  "license": "ISC",
    +  "dependencies": {
    +      "express": "^4.17.1"
    +  }
    +}
    +
    • name: project name
    • version: project version
    • main: application entry file
    • dependencies: all available dependencies of the project in npm
    +
  2. Create a Dockerfile.
    FROM node:12.10.0
    +
    +ENV HOME=/home/custom_container
    +ENV GROUP_ID=1003
    +ENV GROUP_NAME=custom_container
    +ENV USER_ID=1003
    +ENV USER_NAME=custom_container
    +
    +RUN mkdir -m 550 ${HOME} && groupadd -g ${GROUP_ID} ${GROUP_NAME} && useradd -u ${USER_ID} -g ${GROUP_ID} ${USER_NAME}
    +
    +COPY --chown=${USER_ID}:${GROUP_ID} main.js ${HOME}
    +COPY --chown=${USER_ID}:${GROUP_ID} package.json ${HOME}
    +
    +RUN cd ${HOME} && npm install
    +
    +RUN chown -R ${USER_ID}:${GROUP_ID} ${HOME}
    +
    +RUN find ${HOME} -type d | xargs chmod 500
    +RUN find ${HOME} -type f | xargs chmod 500
    +
    +USER ${USER_NAME}
    +WORKDIR ${HOME}
    +
    +EXPOSE 8000
    +ENTRYPOINT ["node", "main.js"]
    +
    • FROM: Specify base image node:12.10.0. The base image is mandatory and its value can be changed.
    • ENV: Set environment variables HOME (/home/custom_container), GROUP_NAME and USER_NAME (custom_container), USER_ID and GROUP_ID (1003). These environment variables are mandatory and their values can be changed.
    • RUN: Use the format RUN <Command>. For example, RUN mkdir -m 550 ${HOME}, which means to create the home directory for user ${USER_NAME} during container building.
    • USER: Switch to user ${USER_NAME}.
    • WORKDIR: Switch the working directory to the home directory of user ${USER_NAME}.
    • COPY: Copy main.js and package.json to the home directory of user ${USER_NAME} in the container.
    • EXPOSE: Expose port 8000 of the container. Do not change this parameter.
    • ENTRYPOINT: Run the node /home/tester/main.js command to start the container.
    +
    1. You can use any base image.
    2. In the cloud environment, UID 1003 and GID 1003 are used to start the container by default. The two IDs can be modified by choosing Configuration > Basic Settings > Container Image Override on the function details page. They cannot be root or a reserved ID.
    +
    +
  1. Build an image.

    In the following example, the image name is custom_container_event_example, the tag is latest, and the period (.) indicates the directory where the Dockerfile is located. Run the image build command to pack all files in the directory and send the package to a container engine to build an image.

    +
    docker build -t custom_container_event_example:latest .
    +
+

Step 3: Perform Local Verification

  1. Start the Docker container.
    docker run -u 1003:1003 -p 8000:8000 custom_container_event_example:latest
    +
  1. Open a new Command Prompt, and send a message through port 8000 to access the /init directory specified in the template code.
    curl -XPOST -H 'Content-Type: application/json' localhost:8000/init
    +

    The following information is returned based on the module code:

    +
    Hello init
    +
  1. Open a new Command Prompt, and send a message through port 8000 to access the /invoke directory specified in the template code.
    curl -XPOST -H 'Content-Type: application/json' -d '{"message":"HelloWorld"}' localhost:8000/invoke
    +

    The following information is returned based on the module code:

    +
    Hello invoke
    +
  1. Check whether the following information is displayed:
    Listening on http://localhost:8000
    +receive {}
    +receive { message: 'HelloWorld' }
    +

    +

    Alternatively, run the docker logs command to obtain container logs.

    +

    +
+
+

Step 4: Upload the Image

  1. Log in to the SWR console. In the navigation pane, choose My Images.
  2. Click Upload Through Client or Upload Through SWR in the upper right corner.
  3. Upload the image as prompted.

    +

    +
  4. View the image on the My Images page.
+
+

Step 5: Create a Function

  1. In the left navigation pane of the management console, choose Compute > FunctionGraph. On the FunctionGraph console, choose Functions > Function List from the navigation pane.
  2. Click Create Function in the upper right corner and choose Container Image.
  3. Set the basic information.
    • Function Type: Select Event Function.
    • Function Name: Enter custom_container_event.
    • Container Image: Enter the image uploaded to SWR.
    • Agency: Select an agency with the SWR Admin permission. If no agency is available, create one by referring to section "Creating an Agency".
    +
  4. After the configuration is complete, click Create Function.
  5. On the function details page, choose Configuration > Advanced Settings, and enable Initialization. The init API will be called to initialize the function.
+
+

Step 6: Test the Function

  1. On the function details page, click Test. In the displayed dialog box, create a test event.
  2. Select blank-template, set Event Name to helloworld, modify the test event as follows, and click Create.
    {
    +    "message": "HelloWorld"
    +}
    +
+
+

Step 7: View the Execution Result

Click Test and view the execution result on the right.

+
Figure 1 Execution result
+ +
+

Step 8: View Monitoring Metrics

On the function details page, click the Monitoring tab.

+ +
+

Step 9: Delete the Function

  1. On the function details page, choose Operation > Delete Function in the upper right corner.
  2. In the confirmation dialog box, enter DELETE and click OK to release resources in a timely manner.
+
+
+
+ +
+ diff --git a/docs/fg/umn/functiongraph_04_0105.html b/docs/fg/umn/functiongraph_04_0105.html new file mode 100644 index 00000000..ed195ec5 --- /dev/null +++ b/docs/fg/umn/functiongraph_04_0105.html @@ -0,0 +1,21 @@ + + + +

Deploying a Function Using a Container Image

+ +

+
+ +
+ + + +
+ diff --git a/docs/fg/umn/public_sys-resources/caution_3.0-en-us.png b/docs/fg/umn/public_sys-resources/caution_3.0-en-us.png new file mode 100644 index 00000000..60f60762 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/caution_3.0-en-us.png differ diff --git a/docs/fg/umn/public_sys-resources/danger_3.0-en-us.png b/docs/fg/umn/public_sys-resources/danger_3.0-en-us.png new file mode 100644 index 00000000..47a9c723 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/danger_3.0-en-us.png differ diff --git a/docs/fg/umn/public_sys-resources/delta.gif b/docs/fg/umn/public_sys-resources/delta.gif new file mode 100644 index 00000000..0d1b1f67 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/delta.gif differ diff --git a/docs/fg/umn/public_sys-resources/deltaend.gif b/docs/fg/umn/public_sys-resources/deltaend.gif new file mode 100644 index 00000000..cc7da0fc Binary files /dev/null and b/docs/fg/umn/public_sys-resources/deltaend.gif differ diff --git a/docs/fg/umn/public_sys-resources/icon-arrowdn.gif b/docs/fg/umn/public_sys-resources/icon-arrowdn.gif new file mode 100644 index 00000000..37942803 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/icon-arrowdn.gif differ diff --git a/docs/fg/umn/public_sys-resources/icon-arrowrt.gif b/docs/fg/umn/public_sys-resources/icon-arrowrt.gif new file mode 100644 index 00000000..6aaaa11c Binary files /dev/null and b/docs/fg/umn/public_sys-resources/icon-arrowrt.gif differ diff --git a/docs/fg/umn/public_sys-resources/icon-caution.gif b/docs/fg/umn/public_sys-resources/icon-caution.gif new file mode 100644 index 00000000..079c79b2 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/icon-caution.gif differ diff --git a/docs/fg/umn/public_sys-resources/icon-danger.gif b/docs/fg/umn/public_sys-resources/icon-danger.gif new file mode 100644 index 00000000..079c79b2 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/icon-danger.gif differ diff --git a/docs/fg/umn/public_sys-resources/icon-huawei.gif b/docs/fg/umn/public_sys-resources/icon-huawei.gif new file mode 100644 index 00000000..a31d60f8 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/icon-huawei.gif differ diff --git a/docs/fg/umn/public_sys-resources/icon-note.gif b/docs/fg/umn/public_sys-resources/icon-note.gif new file mode 100644 index 00000000..31be2b03 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/icon-note.gif differ diff --git a/docs/fg/umn/public_sys-resources/icon-notice.gif b/docs/fg/umn/public_sys-resources/icon-notice.gif new file mode 100644 index 00000000..40907065 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/icon-notice.gif differ diff --git a/docs/fg/umn/public_sys-resources/icon-tip.gif b/docs/fg/umn/public_sys-resources/icon-tip.gif new file mode 100644 index 00000000..c47bae05 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/icon-tip.gif differ diff --git a/docs/fg/umn/public_sys-resources/icon-warning.gif b/docs/fg/umn/public_sys-resources/icon-warning.gif new file mode 100644 index 00000000..079c79b2 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/icon-warning.gif differ diff --git a/docs/fg/umn/public_sys-resources/note_3.0-en-us.png b/docs/fg/umn/public_sys-resources/note_3.0-en-us.png new file mode 100644 index 00000000..57a0e1f5 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/note_3.0-en-us.png differ diff --git a/docs/fg/umn/public_sys-resources/notice_3.0-en-us.png b/docs/fg/umn/public_sys-resources/notice_3.0-en-us.png new file mode 100644 index 00000000..fa4b6499 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/notice_3.0-en-us.png differ diff --git a/docs/fg/umn/public_sys-resources/warning_3.0-en-us.png b/docs/fg/umn/public_sys-resources/warning_3.0-en-us.png new file mode 100644 index 00000000..def5c356 Binary files /dev/null and b/docs/fg/umn/public_sys-resources/warning_3.0-en-us.png differ