UNPKG

serverless

Version:

Serverless Framework - Build web, mobile and IoT applications with serverless architectures using AWS Lambda, Azure Functions, Google CloudFunctions & more

185 lines (144 loc) • 4.3 kB
<!-- title: Serverless Framework - Alibaba Cloud Function Compute Guide - Functions menuText: Functions menuOrder: 5 description: How to configure Alibaba Cloud Function Compute in the Serverless Framework layout: Doc --> <!-- DOCS-SITE-LINK:START automatically generated --> ### [Read this on the main serverless docs site](https://www.serverless.com/framework/docs/providers/aliyun/guide/functions) <!-- DOCS-SITE-LINK:END --> # Alibaba Cloud - Functions If you are using Alibaba Cloud Function Compute as a provider, all _functions_ inside the service are Alibaba Cloud Function Compute functions. ## Configuration All of the Alibaba Cloud Function Compute in your serverless service can be found in `serverless.yml` under the `functions` property. ```yml # serverless.yml service: my-aliyun-service provider: name: aliyun plugins: - serverless-aliyun-function-compute functions: first: handler: index.hello events: - http: path: /foo method: get ``` ## Handler The `handler` property should be the function name you've exported in your entrypoint file. When you e.g. export a function with the name `hello` in `index.js` your `handler` should be `handler: index.hello`. ```javascript // index.js exports.hello = (event, context, callback) => {}; ``` ## Memory size and timeout The `memorySize` and `timeout` for the functions can be specified on the provider or function level. The provider wide definition causes all functions to share this config, whereas the function wide definition means that this configuration is only valid for the function. The default `memorySize` is 128 MB and the default timeout is `30s` if not specified. ```yml # serverless.yml provider: memorySize: 512 timeout: 90s functions: first: handler: first second: handler: second memorySize: 256 timeout: 120s ``` ## Handler signatures The signature of an event handler is: ```javascript function (event, context, callback) { } ``` ### `event` If the function is triggered by a HTTP event without the `bodyFormat` specified, the `event` passed to the handler will be: ```javascript // event { type: 'Buffer', // A buffer containing a JSON string of data about the incoming request data: [ ... ] } // let objEvent = JSON.parse(Buffer.from(event).toString()); // let objBody = Base64.decode(objEvent.body); use a Base64 decoder // This will give a string of the data. JSON.parse() if you need to turn it into a string ``` If the `bodyFormat` is specified, the `event` passed to the handler will be something like this: ```javascript // event { body: '', headers: { ... }, httpMethod: 'GET', isBase64Encoded: false, path: '/test', pathParameters: { ... }, queryParameters: { ... } } ``` If the function is triggered by an OSS event, then the `event` would be a JSON string containing data about the event: ```javascript // JSON.parse(event) { events: [{ eventName: 'ObjectCreated:PostObject', eventSource: 'acs:oss', eventTime: '2017-09-15T03:23:17.000Z', eventVersion: '1.0', oss: { bucket: { arn: 'acs:oss:cn-shanghai:xxx:my-service-resource', name: 'my-service-resource', ownerIdentity: 'xxx', virtualBucket: '' }, object: { deltaSize: 585, eTag: '...', key: 'source/some.object', size: 585 }, ossSchemaVersion: '1.0', ruleId: '...' }, region: 'cn-shanghai', requestParameters: { ... }, responseElements: { ... }, userIdentity: { ... } }] } ``` ### `context` The `context` argument contains information about the function and the service. The credentials in `context.credentials` can be used to access other Alibaba Cloud resources. ```javascript { requestId: '...', credentials: { accessKeyId: '...', accessKeySecret: '...', securityToken: '...' }, function: { name: '...' handler: '...' memory: 128, timeout: 30 } } ``` ### `callback` The `callback` argument is a callback taking an `error` and a `response`: ```javascript exports.http = (event, context, callback) => { const response = { statusCode: 200, body: JSON.stringify({ message: 'Hello World!' }), }; callback(null, response); }; ```