Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/scaleway/serverless-scaleway-functions
Plugin for Serverless Framework to allow users to deploy their serverless applications on Scaleway Functions
https://github.com/scaleway/serverless-scaleway-functions
cloud faas function functions provider scalable scale scaleway serverless serverless-framework
Last synced: 3 months ago
JSON representation
Plugin for Serverless Framework to allow users to deploy their serverless applications on Scaleway Functions
- Host: GitHub
- URL: https://github.com/scaleway/serverless-scaleway-functions
- Owner: scaleway
- License: mit
- Created: 2019-06-19T15:08:52.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-08-12T19:57:59.000Z (3 months ago)
- Last Synced: 2024-08-12T21:52:22.781Z (3 months ago)
- Topics: cloud, faas, function, functions, provider, scalable, scale, scaleway, serverless, serverless-framework
- Language: JavaScript
- Homepage:
- Size: 2.18 MB
- Stars: 77
- Watchers: 7
- Forks: 24
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
- Code of conduct: .github/CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Scaleway plugin for Serverless Framework
Plugin for using Scaleway [Serverless Functions](https://www.scaleway.com/en/serverless-functions/) and [Serverless Containers](https://www.scaleway.com/en/serverless-containers/) with [Serverless Framework](https://serverless.com/).
## Requirements
- [Serverless Framework v3 CLI](https://serverless.com) installed on your local computer (e.g. run `npm install [email protected] -g`). V4 is not supported.
- [Scaleway CLI](https://www.scaleway.com/en/cli/) installed on your local computerIf you are using [Scaleway IAM](https://www.scaleway.com/en/iam/), you need to be the Owner of the Scaleway Organization in which the deployment will take place, or be an IAM user of the Organization with a policy granting you the necessary Permission Sets. See the [IAM Overview](https://www.scaleway.com/en/docs/identity-and-access-management/iam/reference-content/overview/) for more information.
## Quick start
1. Export the template you wish to use (see the list [here](https://github.com/scaleway/serverless-scaleway-functions/tree/master/examples)). We will use `python3`:
```shell
export TEMPLATE=python3
```2. Create a function from this template:
```shell
serverless create \
--path ${TEMPLATE}-func \
--template-url https://github.com/scaleway/serverless-scaleway-functions/tree/master/examples/${TEMPLATE}
```3. Install dependencies:
```shell
cd ${TEMPLATE}-func
npm i
```4. Deploy the function:
```shell
serverless deploy
```5. Invoke the function (note that `first` is the function name in this example):
```shell
serverless invoke --function first
```## Contents
- [Quick start](#quick-start)
- [Configuration](#configuration)
- [Supported commands](#supported-commands)
- [Unsupported commands](#unsupported-commands)
- [Useful links](#useful-links)
- [Contributing](#contributing)
- [License](#license)More detailed documentation can be found in the [`docs`](docs/) folder, including:
- [Managing containers](docs/containers.md)
- [Configuring custom domains](docs/custom-domains.md)
- [Handling events (e.g. CRONs)](docs/events.md)
- [Security and secret management](docs/secrets.md)
- [Troubleshooting](docs/troubleshooting.md)There are also language-specific notes for Serverless Functions:
- [Golang functions](docs/golang.md)
- [Javascript functions](docs/javascript.md)
- [PHP functions](docs/php.md)
- [Python functions](docs/python.md)
- [Rust functions](docs/rust.md)## Configuration
With Serverless Framework, your functions and containers are defined in a `serverless.yml` file.
Each `serverless.yml` file corresponds to one function _or_ container namespace.
### General configuration
The following configuration is common to both functions and containers:
```yaml
# The name of your namespace
service: my-namespace# Read environment variables from a .env file
useDotenv: false# Use of this plugin. This must not be changed
plugins:
- serverless-scaleway-functions# Scaleway-specific configuration
provider:
# Must not change
name: scaleway# Runtime used for functions (unless overridden)
# List: https://www.scaleway.com/en/docs/serverless/functions/reference-content/functions-lifecycle/#available-runtimes
runtime: python310# Global environment variables, used in every function/container in this namespace
env:
MY_VAR: "some var"
MY_OTHER_VAR: "some other var"# Global secrets, used in every function/container in this namespace
secret:
MY_SECRET: "some secret"
MY_OTHER_SECRET: "some other secret"# Optional override of Scaleway credentials
scwToken:
scwProject:# Scaleway region for the deploy
scwRegion: fr-par# Include/exclude directories
package:
patterns:
- "!node_modules/**"
- "!.gitignore"
- "!.git/**"
```### Function-specific configuration
To define functions, you can include a `functions` block:
```yaml
functions:
my-func:
# Handler entrypoint
handler: handler.py# Minimum and maximum number of instances
minScale: 0
maxScale: 10# Memory limit (in MiB)
# Limits: https://www.scaleway.com/en/docs/serverless/functions/reference-content/functions-limitations/
memoryLimit: 1024# Maximum duration a request will wait to be served before it times out (in seconds)
# Value in string format ex: "300s" (default: 300 seconds)
timeout: 300s# Runtime for this function, allows overriding provider.runtime
runtime: node20# How to handle HTTP. Options: enabled (allow HTTP), or redirected (redirect HTTP -> HTTPS)
httpOption: enabled# Execution environment to use when running the function. Options: v1 (legacy), v2 (recommended, with improved cold starts)
sandbox: v2# Controls privacy of the function. Options: public (no authentication), private (token-based authentication)
privacy: public# Local environment variables, used only in this function
env:
LOCAL_VAR: "local var"# Local secrets, used only in this function
secret:
LOCAL_SECRET: "local secret"# Custom domains configured for the function
# https://www.scaleway.com/en/docs/compute/functions/how-to/add-a-custom-domain-name-to-a-function/
custom_domains:
- my-func.some.domain.com# List of events to trigger the function
events:
- schedule:
rate: "1 * * * *"
# Data passed as input in the request
input:
key-a: "value-a"
key-b: "value-b"
```### Container-specific configuration
To define containers, you can include a `custom.containers` block (note that you can only have `functions` _or_ `custom.containers`).
```yaml
custom:
containers:
my-container:
# Subdirectory holding the Dockerfile, cannot be used with registryImage
directory: container/# Name of the registry image, cannot be used with directory
registryImage: nginx:latest# Minimum and maximum number of instances
minScale: 0
maxScale: 10# Number of simultaneous requests to handle simultaneously
maxConcurrency: 20# Memory limit (in MiB)
# Limits: https://www.scaleway.com/en/docs/serverless/containers/reference-content/containers-limitations/
memoryLimit: 1024# CPU limit for the container in mvCPU, chosen based on resource tiers if not set
# Limits and tiers: https://www.scaleway.com/en/docs/serverless/containers/reference-content/containers-limitations/
cpuLimit: 1000# Maximum duration a request will wait to be served before it times out (in seconds)
# Value in string format ex: "300s" (default: 300 seconds)
timeout: 300s# How to handle HTTP. Options: enabled (allow HTTP), or redirected (redirect HTTP -> HTTPS)
httpOption: enabled# Execution environment to use when running the container. Options: v1 (legacy), v2 (recommended, with improved cold starts)
sandbox: v2# Controls privacy of the container. Options: public (no authentication), private (token-based authentication)
privacy: public# Local environment variables, used only in this container
env:
LOCAL_VAR: "local var"# Local secrets, used only in this container
secret:
LOCAL_SECRET: "local secret"# Custom domains configured for the function
# https://www.scaleway.com/en/docs/serverless/containers/how-to/add-a-custom-domain-to-a-container/
custom_domains:
- my-container.some.domain.com# List of events to trigger the container
events:
- schedule:
rate: "1 * * * *"
# Data passed as input in the request
input:
key-a: "value-a"
key-b: "value-b"
```## Supported commands
### `serverless deploy`
Note that by default `serverless deploy` applies the configuration located in your `serverless.yml` and removes functions in that namespace that are not in the file.
This can be switched off by setting the `singleSource` option to `false`.
### `serverless logs`
> [!WARNING]
> This command is deprecated and will be removed on March 12, 2024. Please refer to the documentation (for [functions](https://www.scaleway.com/en/developers/api/serverless-functions/#logs) and [containers](https://www.scaleway.com/en/developers/api/serverless-functions/#logs)) to continue getting your logs.
> TL;DR: You can still access function and container logs conveniently via the [Cockpit](https://www.scaleway.com/en/docs/observability/cockpit/how-to/access-grafana-and-managed-dashboards/) interface. Dedicated dashboards called "Serverless Functions Logs" and "Serverless Containers Logs" are accessible there.The `serverless logs` command lets you watch the logs of a specific function or container.
You can fetch the logs of a specific function for with the `--function` option. You must specify the name of your function in the command.
```bash
serverless logs --function
```### `serverless info`
The `serverless info` command gives you information about your functions' or containers' current deployement state in JSON format.
## Unsupported commands
### `serverless invoke local`
`serverless invoke local` is **not supported** directly but instead we provide additional packages to install close to your handler.
Documentation is available through runtimes frameworks for:
- [Go](https://github.com/scaleway/serverless-functions-go)
- [Python](https://github.com/scaleway/serverless-functions-python)
- [Node](https://github.com/scaleway/serverless-functions-node)## Useful links
- [Scaleway Serverless Functions Documentation](https://www.scaleway.com/en/docs/compute/functions/api-cli/fun-uploading-with-serverless-framework/)
- [Scaleway Serverless Containers Documentation](https://www.scaleway.com/en/docs/compute/containers/api-cli/cont-uploading-with-serverless-framework/)
- [Serverless Framework documentation](https://serverless.com)
- [Scaleway Serverless example projects](https://github.com/scaleway/serverless-examples)## Contributing
This plugin is developed and maintained by the `Scaleway Serverless Team`, but we welcome pull requests and issues, and are available to chat on our [Community Slack Channels](https://scaleway-community.slack.com/): #serverless-containers and #serverless-functions.
If you are looking for a way to contribute please read [CONTRIBUTING.md](./.github/CONTRIBUTING.md). You can also look at the [development documentation](docs/development.md).
For general information about developing Serverless Framework, refer to the Serverless Framework [plugins documentation](https://www.serverless.com/framework/docs/guides/plugins/creating-plugins).
## Help & support
- Scaleway support is available on Scaleway Console.
- Additionally, you can join our [Slack Community](https://www.scaleway.com/en/docs/tutorials/scaleway-slack-community/)## Reach Us
We love feedback. Feel free to:
- Open a [Github issue](https://github.com/scaleway/serverless-scaleway-functions/issues/new)
- Send us a message on the [Scaleway Slack community](https://slack.scaleway.com/), in the
[#serverless-functions](https://scaleway-community.slack.com/app_redirect?channel=serverless-functions) channel.## License
This project is MIT licensed.