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 @@ + + + +
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.
+ +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.
+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.
+Figure 1 shows the process of using functions.
+The following shows the details:
+ +Edit code inline, upload a local ZIP or JAR file, or upload a ZIP file from OBS. For details, see Creating a Deployment Package.
+Functions are triggered by API calls or cloud service events. For details, see Creating Triggers.
+FunctionGraph implements auto scaling based on the number of requests. For details, see section "Notes and Constraints".
+View run logs of function. FunctionGraph is interconnected with Log Tank Service (LTS). For details, see Logs.
+View graphical monitoring information. FunctionGraph is interconnected with Cloud Eye. For details, see Metrics.
+Table 1 describes the 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. + |
+
Table 1 describes the cloud services that have been interconnected with FunctionGraph.
+ +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. +
|
+
DDS + |
+DDS triggers trigger FunctionGraph functions upon a table change in the database. + |
+
FunctionGraph is suitable for various scenarios, such as real-time file processing, real-time data stream processing, web & mobile application backends, and AI application.
+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.
+When files are uploaded from a client to OBS, functions can be triggered to create image thumbnails in real time, convert video formats, aggregate and filter data files, or implement other file operations.
+Advantages:
+FunctionGraph works with DIS to process data streams in real time. FunctionGraph supports application activity tracking, sequential transaction processing, data stream analysis, data sorting, metric generation, log filtering, indexing, social media analysis, and IoT device data telemetry and metering.
+Advantages:
+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:
+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:
+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.
+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".
+Create a user group on the IAM console, and assign the FunctionGraph Invoker role to the group.
+Create a user on the IAM console and add the user to the group created in 1.
+Log in to the management console as the created user and check whether this user only has read permissions for FunctionGraph:
+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 + |
+
|
+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. + |
+
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 + |
+
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.
+Table 1 lists the code entry modes supported by FunctionGraph for each runtime.
+ +Runtime + |
+Editing Code Inline + |
+Uploading a ZIP File + |
+Uploading a JAR File + |
+Uploading a ZIP File from OBS + |
+
---|---|---|---|---|
+ | +Supported + |
+Supported + |
+Not supported + |
+Supported + |
+
+ | +Supported + |
+Supported + |
+Not supported + |
+Supported + |
+
+ | +Not supported + |
+Supported + |
+Supported + |
+Supported + |
+
+ | +Not supported + |
+Supported + |
+Not supported + |
+Supported + |
+
+ | +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.
+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. +
|
+
Upload ZIP file + |
+
|
+
Upload file from OBS + |
+
|
+
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.
+After creating a ZIP deployment package, upload it to the FunctionGraph console. If the package size exceeds 40 MB, upload the package from OBS.
+For details about function resource restrictions, see section "Notes and Constraints".
+After creating a ZIP deployment package, upload it to an OBS bucket in the same region as your FunctionGraph, and then paste the link URL of the OBS bucket into the function. The maximum size of the ZIP file that can be uploaded to OBS is 300 MB.
+For details about function resource restrictions, see section "Notes and Constraints".
+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.
+After creating a ZIP deployment package, upload it to the FunctionGraph console. If the package size exceeds 40 MB, upload the package from OBS.
+For details about function resource restrictions, see section "Notes and Constraints".
+After creating a ZIP deployment package, upload it to an OBS bucket in the same region as your FunctionGraph, and then paste the link URL of the OBS bucket into the function. The maximum size of the ZIP file that can be uploaded to OBS is 300 MB.
+For details about function resource restrictions, see section "Notes and Constraints".
+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.
+After creating a ZIP deployment package, upload it to the FunctionGraph console. If the package size exceeds 40 MB, upload the package from OBS.
+For details about function resource restrictions, see section "Notes and Constraints".
+After creating a ZIP deployment package, upload it to an OBS bucket in the same region as your FunctionGraph, and then paste the link URL of the OBS bucket into the function. The maximum size of the ZIP file that can be uploaded to OBS is 300 MB.
+For details about function resource restrictions, see section "Notes and Constraints".
+Uploading a Deployment Package
+You can only upload a Go deployment package in ZIP format. There are two ways to upload it.
+After creating a ZIP deployment package, upload it to the FunctionGraph console. If the package size exceeds 40 MB, upload the package from OBS.
+For details about function resource restrictions, see section "Notes and Constraints".
+After creating a ZIP deployment package, upload it to an OBS bucket in the same region as your FunctionGraph, and then paste the link URL of the OBS bucket into the function. The maximum size of the ZIP file that can be uploaded to OBS is 300 MB.
+For details about function resource restrictions, see section "Notes and Constraints".
+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.
+After creating a ZIP deployment package, upload it to the FunctionGraph console. If the package size exceeds 40 MB, upload the package from OBS.
+For details about function resource restrictions, see section "Notes and Constraints".
+After creating a ZIP deployment package, upload it to an OBS bucket in the same region as your FunctionGraph, and then paste the link URL of the OBS bucket into the function. The maximum size of the ZIP file that can be uploaded to OBS is 300 MB.
+For details about function resource restrictions, see section "Notes and Constraints".
+Environment variables allow you to pass dynamic parameters to a function without modifying code.
+You can configure encryption settings and environment variables to dynamically pass settings to your function code and libraries without changing your code.
+For example, for Node.js, encryption settings and environment variable values can be obtained from getUserData(string key) in Context.
+The following lists preset parameters. Do not configure environment variables with the same names as any of these parameters.
+ +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 + |
+
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.
+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.
+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.
+ +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:
+For more information about the permissions required to use these triggers and relevant functions, see Table 2.
+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.
+ +Operation + |
+FunctionGraph ReadOnlyAccess + |
+FunctionGraph CommonOperations + |
+FunctionGraph FullAccess + |
+
---|---|---|---|
Creating functions + |
+× + |
+× + |
+√ + |
+
Querying functions + |
+√ + |
+√ + |
+√ + |
+
Modifying functions + |
+× + |
+× + |
+√ + |
+
Deleting functions + |
+× + |
+× + |
+√ + |
+
Invoking functions + |
+× + |
+√ + |
+√ + |
+
Querying function logs + |
+√ + |
+√ + |
+√ + |
+
Viewing function metrics + |
+√ + |
+√ + |
+√ + |
+
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 the following ways:
+After creating a function, test it and view test logs on the execution result page. For details, see Online Debugging.
+The execution result page displays a maximum of 2 KB logs. To view more logs of the function, go to the Logs tab page.
+On the function details page, choose Monitoring > Logs to query log information. For details, see Managing Function Logs.
+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.
+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.
+FunctionGraph automatically runs your code and frees you from provisioning and managing servers, allowing you to focus on business innovation.
+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.
+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.
+If an instance becomes faulty, FunctionGraph starts another instance to process new requests and releases resources from the unhealthy instance.
+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 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.
+Resource specifications can be dynamically adjusted to minimize resource usage and reduce costs.
+FunctionGraph provides console-based function management.
+You are advised to use the latest runtime version.
+FunctionGraph allows you to edit code inline, upload a ZIP file from Object Storage Service (OBS), or directly upload a ZIP or JAR file. Table 2 lists the code entry modes supported for each runtime.
+ +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 + |
+
C# + |
+Not supported + |
+Supported + |
+Not supported + |
+Supported + |
+
PHP + |
+Supported + |
+Supported + |
+Not supported + |
+Supported + |
+
Custom + |
+Supported + |
+Supported + |
+Not supported + |
+Supported + |
+
Table 3 lists the invocation modes for different trigger types.
+ +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 + |
+
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.
+The initializer interface is introduced to:
+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.
+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.
+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.
+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.
+You have created a function.
+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. + |
+
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".
+After the SMN trigger is created, a subscription is generated for the corresponding topic on the SMN console.
+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.
+ +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".
+You have created an API group, for example, APIGroup_test. For details, see Creating an API Group.
+# -*- 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 + }+
+
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: +
Select None. + |
+
Protocol + |
+There are two types of protocols: +
Select HTTPS. + |
+
Timeout (ms) + |
+Enter 5000. + |
+
For details about the OBS event source, see section "Supported Event Sources".
+Before creating a trigger, ensure that you have prepared the following:
+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.
+For details about the DIS event source, see section "Supported Event Sources".
+Before creating a trigger, ensure that you have prepared the following:
+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.
++
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. + |
+
You have created a function. For details, see Creating a Function from Scratch.
+After the timer trigger is created, the function is executed every 1 minute. To view the function running logs, perform the following steps:
+For details about the timer event source, see section "Supported Event Sources".
+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.
++
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. + |
+
For details about the CTS event source, see section "Supported Event Sources".
+You have created an agency on IAM. For details, see Configuring Agency Permissions.
+# -*- 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)+
+
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. + |
+
+
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. + |
+
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".
+Before creating a trigger, ensure that you have prepared the following:
+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.
++
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. + |
+
FunctionGraph is interconnected with Cloud Eye, allowing you to view function metrics without the need for any configurations.
+FunctionGraph collects function metrics and displays aggregated results. Switch to your target function version before viewing metrics.
+The following metrics are displayed: invocations, errors, duration (maximum, average, and minimum durations), throttles, and instance statistics.
+Table 1 describes the 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. + |
+
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.
+SYS.FunctionGraph
+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: +
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 + |
+
Key + |
+Value + |
+
---|---|
package-functionname + |
+App name-Function name +Example: default-myfunction_Python + |
+
projectId + |
+Project ID of the tenant + |
+
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.
+Before creating a trigger, ensure that you have prepared the following:
++
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. + |
+
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.
+{ + "Version": "1.1", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "functiongraph:function:list", + "functiongraph:function:getConfig", + "funcitongraph:function:getCode" + ] + } + ] +}+
A policy with only "Deny" permissions must be used in conjunction with other policies to take effect. If both "Allow" and "Deny" permissions are assigned to a user, the "Deny" permissions take precedence over the "Allow" permissions.
+If you need to assign permissions of the FunctionGraph FullAccess policy to a user but prevent the user from deleting functions, create a custom policy for denying function deletion, and attach both policies to the group to which the user belongs. In this way, the user can perform all operations on FunctionGraph except deleting functions. The following is an example of a deny policy:
+{ + "Version": "1.1", + "Statement": [ + "Effect": "Deny", + "Action": [ + "functiongraph:function:delete" + ] + ] +}+
You can grant an IAM user permissions for specific resources. For example, to grant a user permissions for the functionname function in the Default application, set functionname to a specified resource path, that is, FUNCTIONGRAPH:*:*:function:Default/functionname.
+Specify function resources:
+Format: FUNCTIONGRAPH:*:*:function: application or function name
+For function resources, IAM automatically generates the resource path prefix FUNCTIONGRAPH:*:*:function:. You can specify a resource path by adding the application or function name next to the path prefix. Wildcards (*) are supported. For example, FUNCTIONGRAPH:*:*:function:Default/* indicates any function in the Default application.
+{ + "Version": "1.1", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "functiongraph:function:list" + ] + }, + { + "Effect": "Allow", + "Action": [ + "functiongraph:function:listAlias", + "functiongraph:function:listVersion", + "functiongraph:function:getConfig", + "functiongraph:function:getCode", + "functiongraph:function:updateCode", + "functiongraph:function:invoke", + "functiongraph:function:updateConfig", + "functiongraph:function:createVersion", + "functiongraph:function:updateAlias", + "functiongraph:function:createAlias" + ], + "Resource": [ + "FUNCTIONGRAPH:*:*:function:Default/*" + ] + } + ] +}+
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
+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
+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
+Procedure
+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 used.
+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.
++
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. + |
+
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. + |
+
After creating a function, you can test it online to check whether it can run properly as expected.
+The Log Output area displays a maximum of 2 KB logs. To view more logs, see Managing Function Logs.
++
+Parameter + |
+Description + |
+
---|---|
Create new test event + |
+Select a test event template. + |
+
Edit saved test event + |
+Select the test event you want to delete. + |
+
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.
+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:
+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.
+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. + |
+
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. + |
+
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 function by version, allowing you to query the metrics of a specific function version.
+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.
+Table 1 lists the function metrics that can be monitored by Cloud Eye.
+ +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 + |
+
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.
+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.
+You have created a function according to Creating a Function from Scratch.
+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.
+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.
+You can export the functions that you created.
+Disabled functions can no longer be executed.
+Disabled functions can be enabled again as required.
+You can delete unused functions to release resources.
+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.
+Parameter + |
+Description + |
+
---|---|
Asynchronous Execution Notification Policy + |
+
|
+
Success Notification + |
+Target Service: to which a notification will be sent if a function is executed successfully. +
|
+
Failure Notification + |
+Target Service: to which a notification will be sent if a function fails to be executed. +
|
+
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!" +}+ +
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. + |
+
FunctionGraph provides templates to automatically complete code, and running environment configurations when you create a function, helping you quickly build applications.
+The context-class-introduction template for Python 2.7 is used as an example. You can also select other templates.
+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.+
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.
+FunctionGraph supports the following types of file systems:
+SFS Turbo supports the following storage classes: Standard (500 GB–32 TB), Standard-Enhanced (10 TB–320 TB), Performance (500 GB–32 TB), and Performance-Enhanced (10 TB–320 TB). SFS Turbo is expandable to 320 TB, and provides fully hosted shared file storage. It features high availability and durability, and supports massive quantities of small files and applications requiring low latency and high input/output operations per second (IOPS). SFS Turbo is suitable for high-performance websites, log storage, compression and decompression, DevOps, enterprise offices, and containerized applications. For details, see SFS Service Overview.
+A directory on an ECS is specified as a shared file system (see Mounting an ECS Shared Directory) by using the network file system (NFS) service. The directory can then be mounted to a function in the same VPC as the ECS so that the function can read and write data in the directory. ECS file systems make it possible for dynamic expansion of compute resources. This type of file system is suitable for low service demand scenarios.
+Benefits from using these file systems:
+You can write temporary files in the /tmp directory. The total size of these files cannot exceed 10,240 MB.
+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.
+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.
+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.
+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.
+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.
+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
+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+
yum install nfs-utils+
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.
+systemctl start rpcbind +service nfs start+
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+
systemctl enable rpcbind+
sudo apt-get update +sudo apt install nfs-kernel-server+
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.
+service nfs-kernel-server restart+
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+
Paid software: haneWIN. Download the software at the haneWIN official website.
+Free software: FreeNFS and WinNFSd. Download the software at the SourceForge website.
+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.
+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.
+FunctionGraph provides HTTP runtime APIs to receive function invocation events and returns response data in the execution environment.
+Method – Get
+Path – http://$RUNTIME_API_ADDR/v1/runtime/invocation/request
+This API is used to retrieve an invocation event. The response body contains the event data. The following table describes additional data about the invocation contained in the response header.
+ +Parameter + |
+Description + |
+
---|---|
X-Cff-Request-Id + |
+Request ID. + |
+
X-CFF-Access-Key + |
+AK of the account. An agency must be configured for the function if this variable is used. + |
+
X-CFF-Auth-Token + |
+Token of the account. An agency must be configured for the function if this variable is used. + |
+
X-CFF-Invoke-Type + |
+Invocation type of the function. + |
+
X-CFF-Secret-Key + |
+SK of the account. An agency must be configured for the function if this variable is used. + |
+
X-CFF-Security-Token + |
+Security token of the account. An agency must be configured for the function if this variable is used. + |
+
Method – POST
+Path – http://$RUNTIME_API_ADDR/v1/runtime/invocation/response/$REQUEST_ID
+This API is used to send a successful invocation response to FunctionGraph. After the runtime invokes the function handler, it publishes the response from the function to the invocation response path.
+Method – POST
+Path – http://$RUNTIME_API_ADDR/v1/runtime/invocation/error/$REQUEST_ID
+$REQUEST_ID is the value of variable X-Cff-Request-Id in the header of an event retrieval response. For more information, see Table 1.
+$RUNTIME_API_ADDR is a system environment variable. For more information, see Table 2.
+This API is used to send an error invocation response to FunctionGraph. After the runtime invokes the function handler, it publishes the response from the function to the invocation response path.
+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.
+ +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.
+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.
+ + +The format is "@every N unit". N is a positive integer. unit can be ns, µs, ms, s, m, or h. An @every expression means to invoke a function every N time units, as shown in Table 1.
+ + +The format is "seconds minutes hours day-of-month month day-of-week". day-of-week is optional. The fields must be separated from each other using a space. Table 2 describes the fields in a standard cron expression.
+ +Parameter + |
+Description + |
+Value Range + |
+Special Characters Allowed + |
+
---|---|---|---|
Seconds + |
+Yes + |
+0–59 + |
+, - * / + |
+
Minutes + |
+Yes + |
+0–59 + |
+, - * / + |
+
Hours + |
+Yes + |
+0–23 + |
+, - * / + |
+
Day-of-month + |
+Yes + |
+1–31 + |
+, - * ? / + |
+
Month + |
+Yes + |
+1–12 or Jan–Dec. The value is case-insensitive, as shown in Table 3. + |
+, - * / + |
+
Day-of-week + |
+No + |
+0–6 or Sun–Sat. The value is case-insensitive, as shown in Table 4. 0 means Sunday. + |
+, - * ? / + |
+
Month + |
+Digit + |
+Abbreviation + |
+
---|---|---|
January + |
+1 + |
+Jan + |
+
February + |
+2 + |
+Feb + |
+
March + |
+3 + |
+Mar + |
+
April + |
+4 + |
+Apr + |
+
May + |
+5 + |
+May + |
+
June + |
+6 + |
+Jun + |
+
July + |
+7 + |
+Jul + |
+
August + |
+8 + |
+Aug + |
+
September + |
+9 + |
+Sep + |
+
October + |
+10 + |
+Oct + |
+
November + |
+11 + |
+Nov + |
+
December + |
+12 + |
+Dec + |
+
Day of Week + |
+Digit + |
+Abbreviation + |
+
---|---|---|
Monday + |
+1 + |
+Mon + |
+
Tuesday + |
+2 + |
+Tue + |
+
Wednesday + |
+3 + |
+Wed + |
+
Thursday + |
+4 + |
+Thu + |
+
Friday + |
+5 + |
+Fri + |
+
Saturday + |
+6 + |
+Sat + |
+
Sunday + |
+0 + |
+Sun + |
+
Table 5 describes the special characters that can be used in a cron expression.
+ +Special Character + |
+Meaning + |
+Description + |
+
---|---|---|
* + |
+Used to specify all values within a field. + |
+* in the minutes field means every minute. + |
+
, + |
+Used to specify multiple values, which can be discontinuous. + |
+For example, "Jan,Apr,Jul,Oct" or "1,4,7,10" in the month field and "Sat,Sun" or "6,0" in the day-of-week field. + |
+
- + |
+Used to specify a range. + |
+For example, "0-3" in the minutes field. + |
+
? + |
+Used to specify something in one of the two fields in which the character is allowed, but not the other. + |
+You can specify something only in the day-of-month or day-of-week field. For example, if you want your function to be executed on a particular day (such as the 10th) of the month, but do not care what day of the week that is, then put "10" in the day-of-month field and "?" in the day-of-week field. + |
+
/ + |
+Used to specify increments. The character before the slash indicates when to start, and the one after the slash represents the increment. + |
+For example, "1/3" in the minutes field means to trigger the function every 3 minutes starting from 00:01:00 of the hour. + |
+
Table 6 describes several example cron expressions.
+ +Function Scheduling Example + |
+Cron Expression (UTC Time) + |
+
---|---|
12:00 every day + |
+0 0 4 * * * + |
+
12:30 every day + |
+0 30 4 * * * + |
+
26th, 29th, and 33rd minutes of each hour + |
+0 26,29,33 * * * * + |
+
12:30 from Monday to Friday + |
+0 30 4 ? * MON-FRI + |
+
Every 5 minutes during 12:00 and 14:00 from Monday to Friday + |
+0 0/5 4-6 ? * MON-FRI + |
+
12:00 every day from January to April + |
+0 0 4 ? JAN,FEB,MAR,APR * + |
+
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.
+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.
+ +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. + |
+
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:
+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. + |
+
Parameter + |
+Description + |
+
---|---|
Configuration Agency + |
+Select a function that you have created. + |
+
Execution Agency + |
+Mandatory if you select Specify an exclusive agency for function execution. + |
+
Modifying an agency: You can modify the permissions, validity period, and description of an agency on the IAM console.
+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.
+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.
+Encryption settings and environment variables are supported. For details, see Configuring Environment Variables.
+External data disks can be attached. For details, see Configuring Disk Mounting.
+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.
+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.
+Parameter + |
+Description + |
+
---|---|
*Function Type + |
+Select a function type. + +HTTP function: triggered once HTTP requests are sent to specific URLs.
+ NOTE:
+
|
+
*Region + |
+Select a region where you will deploy your code. + |
+
*Function Name + |
+Name of the function, which must meet the following requirements: +
|
+
*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 + |
+
|
+
Agency + |
+Select an agency with the SWR Admin permission. To create an agency, see Creating an Agency. + |
+
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}`); +});+
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.
+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.
+Event Source + |
+Invocation Mode + |
+
---|---|
SMN + |
+Asynchronous + |
+
OBS + |
+Asynchronous + |
+
DIS + |
+Asynchronous + |
+
Timer + |
+Asynchronous + |
+
LTS + |
+Asynchronous + |
+
CTS + |
+Asynchronous + |
+
DDS + |
+Asynchronous + |
+
DMS for Kafka + |
+Asynchronous + |
+
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.
+Example
+The following procedure uses the APIG trigger of a function as an example.
+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.
+Parameter + |
+Description + |
+
---|---|
* Function Type + |
+
|
+
*Region + |
+Select a region where you will deploy your code. + |
+
*Function Name + |
+Name of the function, which must meet the following requirements: +
|
+
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. + |
+
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.
+Code attributes show the code size and the time the code was modified.
+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.
+ + +Once a function is created, the runtime cannot be changed.
+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 + |
+
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.
+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..')+
Example
+The content of the bootstrap file is as follows:
+/opt/function/runtime/nodejs12.13/rtsp/nodejs/bin/node $RUNTIME_CODE_ROOT/index.js+
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.
+ +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 + |
+
HTTP functions support APIG triggers only.
+In this example, Security Authentication is set to None. You need to select an authentication mode based on site requirements.
+The following table lists the default request header fields of an HTTP function.
+ +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 + |
+
If synchronous or asynchronous invocation fails, do as follows:
+You can set the maximum number of retries and the maximum message validity period (up to 24 hours) by referring to Configuring Asynchronous Execution Notification. FunctionGraph will retry a function based on these two parameters.
+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.
+√: 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 + |
+√ + |
+
√: Supported. ×: Not supported.
+ +Runtime + |
+Supported + |
+
---|---|
Python 2.7 + |
+√ + |
+
Python 3.6 + |
+√ + |
+
Python 3.9 + |
+√ + |
+
Python 3.10 + |
+√ + |
+
√: Supported. ×: Not supported.
+ +Runtime + |
+Supported + |
+
---|---|
Java 8 + |
+√ + |
+
Java 11 + |
+√ + |
+
√: Supported. ×: Not supported.
+ +Runtime + |
+Supported + |
+
---|---|
Go 1.x + |
+√ + |
+
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 have created a function.
+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.
+You can create up to 10 aliases for a function.
+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.
+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. + |
+
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. + |
+
FunctionGraph provides on-demand and reserved instances.
+After reserved instances are created for a function, the code, dependencies, and initializer of the function are automatically loaded. Reserved instances are always alive in the execution environment, eliminating the influence of cold starts on your services. (Do not execute one-time services using the initializer of reserved instances.)
+You can configure a fixed number of reserved instances or scheduled scaling policies.
+Ensure that the function for which you want to create reserved instances already exists on the FunctionGraph console.
+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. + |
+
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.
+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. + |
+
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.
+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.
+Before creating a trigger, ensure that you have prepared the following:
+The network configuration must be the same as that of the ECS where Kafka is deployed, including the VPC and subnet.
+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.
++
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. + |
+
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.
+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.
+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.
+Parameter + |
+Rule + |
+
---|---|
Key + |
+
|
+
Value + |
+
|
+
Tag values can be modified but tag keys cannot.
+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 the log stream automatically created for the function. For details, see Using LTS to Manage Function Logs.
+You have created a log group and log stream on the LTS console.
+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. + |
+
You can change the log stream if needed.
+View function logs in the specified log group and log stream.
+Supported Dependent Libraries
+FunctionGraph supports both standard and third-party libraries.
+When using standard libraries, you can import them to your inline code or package and upload them to FunctionGraph.
+FunctionGraph provides built-in third-party components listed in Table 1 and Table 2. You can import these libraries to your inline code in the same way as you import standard libraries.
+ +Name + |
+Usage + |
+Version + |
+
---|---|---|
q + |
+Asynchronous method encapsulation + |
+1.5.1 + |
+
co + |
+Asynchronous process control + |
+4.6.0 + |
+
lodash + |
+Common tool and method library + |
+4.17.10 + |
+
esdk-obs-nodejs + |
+OBS sdk + |
+2.1.5 + |
+
express + |
+Simplified web-based application development framework + |
+4.16.4 + |
+
fgs-express + |
+Provides a Node.js application framework for FunctionGraph and APIG to run serverless applications and REST APIs. This component provides an example of using the Express framework to build serverless web applications or services and RESTful APIs. + |
+1.0.1 + |
+
request + |
+Simplifies HTTP invocation and supports HTTPS and redirection. + |
+2.88.0 + |
+
Module + |
+Usage + |
+Version + |
+
---|---|---|
dateutil + |
+Date and time processing + |
+2.6.0 + |
+
requests + |
+HTTP library + |
+2.7.0 + |
+
httplib2 + |
+httpclient + |
+0.10.3 + |
+
numpy + |
+Mathematical computing + |
+For pip 2.7, numpy==1.16.6. +For pip 3.10, numpy==1.24.2. +For pip 3.9, numpy==1.18.5. +For pip 3.6, numpy==1.18.5. + |
+
redis + |
+Redis client + |
+2.10.5 + |
+
obsclient + |
+OBS client + |
+- + |
+
smnsdk + |
+SMN access + |
+1.0.1 + |
+
Package the dependency third-party libraries and upload them to an OBS bucket or on the function details page. These libraries will then be used in your function code.
+Importing Dependent Libraries
+from com.obs.client.obs_client import ObsClient+
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:
+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.
+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?"
++
Parameter + |
+Description + |
+
---|---|
Name + |
+Dependency name. + |
+
Code Entry Mode + |
+Upload a ZIP file directly or upload a file from OBS. +
|
+
Runtime + |
+Select a runtime. + |
+
Description + |
+Description of the dependency. This parameter is optional. + |
+
+
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. + |
+
To delete a dependency, just delete all of its versions.
+Dependencies referenced by functions cannot be deleted.
+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.
+You can edit event functions on FunctionGraph or upload code packages there and deploy them with just a few clicks. There is no need for you to care about function concurrency or fault rectification.
+Event functions can be started, scaled, and called within milliseconds. Faults can be detected and rectified within seconds.
+FunctionGraph provides comprehensive logging, tracing, debugging, and monitoring, allowing developers to roll out functions in just three steps.
+Event functions face event source restrictions. You need to comply with the function development rules of the function platform.
+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.
+You can use common web frameworks, such as Node.js Express and Koa, to write web functions, and migrate your local web framework services to the cloud with least modifications.
+Functions can directly receive and process HTTP requests, eliminating the need for API Gateway to convert the JSON format. This accelerates request processing and improves web service performance.
+Writing HTTP functions is similar to writing native web services. You can also use native Node.js APIs to enjoy local development-like experience.
+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 their requests from a function. Responses are returned only after the function is invoked.
+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.
+A trigger is an event that triggers function execution.
+The number of requests that can be concurrently processed by an instance.
+You can directly package and upload container images. The platform then loads and starts these images to create functions.
+You can customize scripts and files to execute functions.
+Logs generated during function invocation.
+Monitoring information generated during function execution.
+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.
+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.
+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.
+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.
+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.
+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.
+Perform the following operations:
+If the function needs to access RDS APIs, create an agency and grant required permissions.
+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.
+ +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".
+Yes. FunctionGraph supports both standard libraries and non-standard third-party libraries. For details, see What Dependencies Does FunctionGraph Support?
+You can create additional threads and processes in your function by using runtime and OS features.
+The returned information about a function contains the maximum memory consumed. Alternatively, check the memory usage in the execution result.
+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.
+FunctionGraph displays all the information you enter in plain text. Therefore, do not enter insensitive information such as passwords when you define environment variables.
+Yes. For details, see section "Managing Versions".
+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.
+Table 1 lists the runtimes supported by FunctionGraph.
+ + +Each FunctionGraph function runs in its own environment and has its own resources and file system.
+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.
+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.
+ +Runtime + |
+JAR File + |
+ZIP File + |
+ZIP File on OBS + |
+
---|---|---|---|
Node.js + |
+Not supported. + |
+
|
+Compress project files into a ZIP file and upload it to an OBS bucket. + |
+
PHP + |
+Not supported. + |
+
|
+Compress project files into a ZIP file and upload it to an OBS bucket. + |
+
Python 2.7 + |
+Not supported. + |
+
|
+Compress project files into a ZIP file and upload it to an OBS bucket. + |
+
Python 3.6 + |
+Not supported. + |
+
|
+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 Example project package +|--- lib Service file directory +|--- node_modules NPM third-party component directory +|--- index.js .js handler file (mandatory) +|--- package.json NPM project management file+
Example.zip Example project package +|--- ext Extension library directory +|--- pear PHP extension and application repository +|--- index.php PHP handler file+
Example.zip Example project package +|--- com Service file directory +|--- PLI Third-party dependency PLI directory +|--- index.py .py handler file (mandatory) +|--- watermark.py .py file for image watermarking +|--- watermark.png Watermarked image+
Example.zip Example project package +|--- obstest.jar Service function JAR file +|--- esdk-obs-java-3.20.2.jar Third-party dependency JAR file +|--- jackson-core-2.10.0.jar Third-party dependency JAR file +|--- jackson-databind-2.10.0.jar Third-party dependency JAR file +|--- log4j-api-2.12.0.jar Third-party dependency JAR file +|--- log4j-core-2.12.0.jar Third-party dependency JAR file +|--- okhttp-3.14.2.jar Third-party dependency JAR file +|--- okio-1.17.2.jar Third-party dependency JAR file+
Example.zip Example project package +|--- testplugin.so Service function package+
Example.zip Example project package +|--- fssExampleCsharp2.0.deps.json File generated after project compilation +|--- fssExampleCsharp2.0.dll File generated after project compilation +|--- fssExampleCsharp2.0.pdb File generated after project compilation +|--- fssExampleCsharp2.0.runtimeconfig.json File generated after project compilation +|--- Handler Help file, which can be directly used +|--- HC.Serverless.Function.Common.dll .dll file provided by FunctionGraph+
Example.zip Example project package +|--- bootstrap Executable boot file+
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; + } +}+
Perform the following operations:
+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 "^_^" ++
Cursors LATEST and TRIM_HORIZON specify the start points for reading data in Data Ingestion Service (DIS) streams.
+For example, a tenant used a DIS stream to upload three pieces of data A1, A2, and A3. Assuming that A1 expires but A2 and A3 are still valid after a period of time, if the tenant specifies TRIM_HORIZON for downloading data, only A2 and A3 can be downloaded.
+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.
+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".
+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.
+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.
+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.+
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.
+Run the following command to generate a ZIP package.
+zip -rq mysql-node8.10.zip node_modules+
The required dependency is generated.
+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.
+When you compile a function using Java, dependencies need to be compiled locally.
+ +Function execution includes two steps:
+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
+If a function has not been executed for a period of time, all instances related to the function will be released.
+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:
+ +For details about the resource quota of FunctionGraph, see section "Notes and Constraints".
+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.
+OBS does not support pull triggers. Therefore, OBS triggers cannot be enabled or disabled.
+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.
+Rectify the fault by referring to section "Error Codes". If the fault persists, contact technical support.
+Log in to the Cloud Eye console and view alarm rules.
+Currently, FunctionGraph resolves only DNS domain names and POD domain names.
+No. Please decompile your files before uploading them.
+Not currently.
+For OS-dependent packages (for example, unixODBC), download the source code to compile dependency packages.
+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+
mkdir /opt/function/code+
./configure --prefix=/opt/function/code --sysconfdir=/opt/function/code;make;make install+
cd /opt/function/code/lib/pkgconfig+
cp -r /opt/function/code/lib/* /opt/function/code+
cd /opt/function/code+
zip -r xxx.zip *+
A tenant can create up to 4 VPCs. To create more VPCs, submit a service ticket.
+Take Java as an example. You can use this demo to print logs.
+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
+Procedure of Creating a NAT Gateway
+For details, see section "Using an APIG Trigger".
+See section "Watermarking Images".
+To create an HTTP function, create a bootstrap file. For details, see section "Creating a Bootstrap File".
+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.
+The domain name www.test.com is used as an example. The procedure is as follows:
+Yes. The procedure is as follows:
+No. Once a function is created, its runtime cannot be changed.
+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.
+ +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:
+You can obtain uploaded files by referring to the preceding methods when other languages are used.
+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.
+Do not use os.system("command &"). The background command output will not be collected. To obtain the command output, use subprocess.Popen instead.
+By default, only the /tmp directory can be accessed, for example, for creating or downloading files.
+3.6.8 and 3.9.2.
+The actions listed in Table 1 can be used.
+ + +No. A function's name cannot be changed once the function is created.
+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
+Check the used memory in the response.
+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:
+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.
+This procedure uses a domain name with a record set as an example.
+ +Debug the API used to query record sets in a zone.
+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.
+Use a non-latest tag to manage image updates, and do not use the same image name.
+Yes. See the following examples:
+exports.initializer = function(context, callback) { + callback(null, ''); + };+
def my_initializer(context): + print("hello world!")+
public void my_initializer(Context context) +{ +RuntimeLogger log = context.getLogger(); +log.log(String.format("ak:%s", context.getAccessKey())); +}+
<?php +Function my_initializer($context) { + echo 'hello world' . PHP_EOL; + } +?>+
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.
+ +You have enabled asynchronous invocation status persistence.
+Enable Quick Analysis.
+When you install a program or develop code that relies on an environment to run, you need to introduce the dependency.
+Supported Dependencies
+FunctionGraph supports standard libraries and third-party dependencies.
+When using standard libraries, you can import them to your inline code, or package and upload them to FunctionGraph.
+FunctionGraph provides built-in third-party components, as described in Table 1 and Table 2. You can import these components to your inline code in the same way as you import standard libraries.
+ +Name + |
+Description + |
+Version + |
+
---|---|---|
q + |
+Asynchronous method encapsulation + |
+1.5.1 + |
+
co + |
+Asynchronous process control + |
+4.6.0 + |
+
lodash + |
+Common tool and method library + |
+4.17.10 + |
+
esdk-obs-nodejs + |
+OBS sdk + |
+2.1.5 + |
+
express + |
+Simplified web-based application development framework + |
+4.16.4 + |
+
fgs-express + |
+Provides a Node.js application framework for FunctionGraph and APIG to run serverless applications and REST APIs. This component provides an example of using the Express framework to build serverless web applications or services and RESTful APIs. + |
+1.0.1 + |
+
request + |
+Simplifies HTTP invocation and supports HTTPS and redirection. + |
+2.88.0 + |
+
Module + |
+Description + |
+Version + |
+
---|---|---|
dateutil + |
+Date and time processing + |
+2.6.0 + |
+
requests + |
+HTTP library + |
+2.7.0 + |
+
httplib2 + |
+httpclient + |
+0.10.3 + |
+
numpy + |
+Mathematical computation + |
+1.13.1 + |
+
redis + |
+Redis client + |
+2.10.5 + |
+
obsclient + |
+OBS client + |
+- + |
+
smnsdk + |
+SMN access + |
+1.0.1 + |
+
For other third-party libraries not listed in the preceding tables, package and upload them to an OBS bucket or on the function details page. For details, see How Do I Create a Dependency on the FunctionGraph Console? These libraries will then be used in your function code.
+Parameter + |
+Description + |
+
---|---|
Name + |
+Dependency name. + |
+
Code Entry Mode + |
+Upload a ZIP file directly or through OBS. +
|
+
Runtime + |
+Select a runtime. + |
+
Description + |
+Description of the dependency. This parameter is optional. + |
+
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.
+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:
+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 you have the FunctionGraph FullAccess permissions, that is, all permissions for FunctionGraph. For more information, see section "Permissions Management".
+exports.handler = function (event, context, callback) { + const error = null; + const output = `Hello message: ${JSON.stringify(event)}`; + callback(error, output); +}+
{ + "hello": "function" +}+
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".
+On the function details page, click the Monitoring tab.
+FunctionGraph provides templates to automatically complete code and running environment configurations when you create a function, helping you quickly build applications.
+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".
+Failed to access other services because no temporary AK, SK, or token has been obtained. Please set an agency.+
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".
+On the function details page, click the Monitoring tab.
+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.
+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".
+Take the Linux x86 64-bit OS as an example.
+mkdir custom_container_http_example && cd custom_container_http_example+
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}`); +});+
{ + "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" + } +}+
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"]+
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 .+
docker run -u 1003:1003 -p 8000:8000 custom_container_http_example:latest+
curl -XPOST -H 'Content-Type: application/json' -d '{"message":"HelloWorld"}' localhost:8000/helloworld+
Hello FunctionGraph, method POST+
receive {"message":"HelloWorld"}+
Alternatively, run the docker logs command to obtain container logs.
+{ + "body": "{\"message\": \"helloworld\"}", + "requestContext": { + "requestId": "11cdcdcf33949dc6d722640a13091c77", + "stage": "RELEASE" + }, + "queryStringParameters": { + "responseType": "html" + }, + "httpMethod": "POST", + "pathParameters": {}, + "headers": { + "Content-Type": "application/json" + }, + "path": "/helloworld", + "isBase64Encoded": false +}+
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".
+On the function details page, click the Monitoring tab.
+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".
+ +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".
+Take the Linux x86 64-bit OS as an example.
+mkdir custom_container_event_example && cd custom_container_event_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}`); +});+
{ + "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" + } +}+
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"]+
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 .+
docker run -u 1003:1003 -p 8000:8000 custom_container_event_example:latest+
curl -XPOST -H 'Content-Type: application/json' localhost:8000/init+
The following information is returned based on the module code:
+Hello init+
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+
Listening on http://localhost:8000 +receive {} +receive { message: 'HelloWorld' }+
Alternatively, run the docker logs command to obtain container logs.
+{ + "message": "HelloWorld" +}+
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".
+On the function details page, click the Monitoring tab.
+