Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/aliyun/serverless-aliyun-function-compute

Serverless Alibaba Cloud Function Compute Plugin – Add Alibaba Cloud Function Compute support to the Serverless Framework
https://github.com/aliyun/serverless-aliyun-function-compute

Last synced: 3 months ago
JSON representation

Serverless Alibaba Cloud Function Compute Plugin – Add Alibaba Cloud Function Compute support to the Serverless Framework

Awesome Lists containing this project

README

        

# Aliyun Function Compute Serverless Plugin

This plugin enables Aliyun Function Compute support within the Serverless Framework.

- [![Build Status](https://travis-ci.org/aliyun/serverless-aliyun-function-compute.svg?branch=master)](https://travis-ci.org/aliyun/serverless-aliyun-function-compute)

## Getting started

### Pre-requisites

* Node.js v8.x for using the plugin.
* Serverless CLI v1.26.1+. You can get it by running `npm i -g serverless`.
* An Aliyun account.

### Example

You can install the following example from GitHub:

```sh
$ serverless install --url https://github.com/aliyun/serverless-function-compute-examples/tree/master/aliyun-nodejs
```

The structure of the project should look something like this:

```
├── index.js
├── node_modules
├── package.json
└── serverless.yml
```

Install `serverless-aliyun-function-compute` plugin to your service.

```yaml
$ serverless plugin install --name serverless-aliyun-function-compute
```

`serverless.yml`:

```yaml
service: serverless-aliyun-hello-world

provider:
name: aliyun
runtime: nodejs8
credentials: ~/.aliyun_credentials # path must be absolute

plugins:
- serverless-aliyun-function-compute

package:
exclude:
- package-lock.json
- .gitignore
- .git/**

functions:
hello:
handler: index.hello
events:
- http:
path: /foo
method: get
```

`package.json`:

```json
{
"name": "serverless-aliyun-hello-world",
"version": "0.1.0",
"description": "Hello World example for aliyun provider with Serverless Framework.",
"main": "index.js",
"license": "MIT"
}
```

`index.js`:

```js
'use strict';

exports.hello = (event, context, callback) => {
const response = {
statusCode: 200,
body: JSON.stringify({ message: 'Hello!' }),
};

callback(null, response);
};
```

In order to deploy this function, we need the credentials with permissions to access Aliyun Function Compute.
Please create a `credentials` file and configure the credentials in it.
Here is an example `credentials` file:

```ini
[default]
aliyun_access_key_id = xxxxxxxx
aliyun_access_key_secret = xxxxxxxxxxxxxxxxxxxx
aliyun_account_id = 1234567890
```

You can find the `aliyun_access_key_secret` and `aliyun_access_key_id` from https://ak-console.aliyun.com/?#/accesskey. You can also chose to create an Access Key or use sub-account Access Key.
You can find the `aliyun_account_id` from https://account-intl.console.aliyun.com/?#/secure .
After creating the `credentials` file, please make sure to change the `credentials` field value in `serverless.yml` to the absolute file path.

See [test/project](./test/project) for a more detailed example (including how to access other Aliyun services, how to set up a HTTP POST endpoint, how to set up OSS triggers, etc.).

### Workflow

Make sure that you have activated Function Compute and any other dependent services such as RAM, Log Service, API Gateway and OSS before attempting to deploy your function.

* Deploy your service to Aliyun:

```sh
$ serverless deploy
```

If your service contains HTTP endpoints, you will see the URLs for invoking your functions after a successful deployment.

Note: you can use `serverless deploy function --function ` to deploy a single function instead of the entire service.
* Invoke a function directly (without going through the API gateway):

```sh
$ serverless invoke --function hello
```
* Retrieve the LogHub logs generated by your function:

```sh
$ serverless logs --function hello
```
* Get information on your deployed functions

```sh
$ serverless info
```
* When you no longer needs your service, you can remove the service, functions, along with deployed endpoints and triggers using:

```sh
$ serverless remove
```

Note: by default RAM roles and policies created during the deployment are not removed. You can use `serverless remove --remove-roles` if you do want to remove them.

#### Change Region

* Changing the region in provider of serverless.yml:
```yaml
provider:
name: aliyun
region: cn-hongkong
```

* Changing the region in CLI parameters:
```sh
$ serverless deploy --region cn-hongkong
```

Note: CLI parameter `--region` has higher priority than provider, But you have to add this parameter to all the invocations, not only `deploy`.

## Develop

```sh
# clone this repo
git clone [email protected]:aliyun/serverless-aliyun-function-compute.git

# link this module to global node_modules
cd serverless-aliyun-function-compute
npm install
npm link

# try it out by packaging the test project
cd test/project
npm install
npm link serverless-aliyun-function-compute
serverless package
```

## License

MIT