Serverless Devs est un outil open source dédié au développement, à la compilation, aux tests et au déploiement de projets serverless tout au long de leur cycle de vie. Cette rubrique explique comment initialiser et déployer un projet Function Compute à l'aide de Serverless Devs. Tous les exemples utilisent Node.js 14.
Référence rapide des commandes
| Commande | Description |
|---|---|
sudo s |
Lancer l'assistant interactif de projet (Méthode 1) |
sudo s init <template> |
Initialiser un projet à partir d'un modèle spécifique (Méthode 2) |
sudo s build |
Compiler le projet localement |
sudo s local start |
Démarrer un serveur local pour les fonctions HTTP |
sudo s local invoke |
Appeler une fonction événementielle en local |
sudo s deploy -y |
Déployer le projet sur Function Compute |
sudo s invoke -e '<payload>' |
Appeler la fonction déployée à distance |
sudo s remove service |
Supprimer le service et toutes les ressources associées |
Prérequis
Avant de commencer, assurez-vous que :
Le service Function Compute est activé. Pour plus d'informations, consultez Activer Function Compute.
Vous avez installé Serverless Devs et ses dépendances. Consultez Installer Serverless Devs et ses dépendances.
Vous avez configuré Serverless Devs. Consultez Configurer Serverless Devs.
Choisir une méthode
| Méthode | Commande | Idéal pour | Résultat obtenu |
|---|---|---|---|
| Méthode 1 : Configuration interactive | s |
Nouveaux utilisateurs | Assistant guidé pour la création de projet et déploiement en une étape |
| Méthode 2 : Flux de travail pas à pas | s init |
Contrôle granulaire | Compilation, débogage local, appel distant et suppression des ressources |
Méthode 1 : Configuration interactive avec s
Exécutez s pour lancer l'assistant interactif :
sudo s
L'assistant vous invite à configurer le projet. L'exemple suivant illustre une session type :
No Serverless-Devs project is currently detected. Do you want to create a new project? Yes
Serverless Awesome: https://github.com/Serverless-Devs/Serverless-Devs/blob/master/docs/zh/awesome.md
Hello Serverless for Cloud Vendors Alibaba Cloud Serverless
Hello, serverlesser. Which template do you like? Quick start [Deploy a Hello World function to FaaS]
Which template do you like? [Event] Node.js 14
Create application command: [s init devsapp/start-fc-event-nodejs14]
Please input your project name (init dir) start-fc-event-nodejs14
file decompression completed
____ _ _ ___ _ _ _ _____ ____
/ _ \/ \ / \\ \/// \ /\/ \ /| / // _\
| / \|| | | | \ / | | ||| |\ || | __\| /
| |-||| |_/\| | / / | \_/|| | \|| | | | \__
\_/ \|\____/\_//_/ \____/\_/ \| \_/ \____/
please select credential alias default
Welcome to the Aliyun FC start application
This application requires to open these services:
FC : https://fc.console.alibabacloud.com/
* The project is initialized. You can go to the project directory and run the s deploy command to deploy the project.
Thanks for using Serverless-Devs
You could [cd /test/start-fc-event-nodejs14] and enjoy your serverless journey!
If you need help for this example, you can use [s -h] after you enter folder.
Document Star: https://github.com/Serverless-Devs/Serverless-Devs
Do you want to deploy the project immediately? Yes
......
helloworld:
region: cn-hangzhou
service:
name: hello-world-service
function:
name: event-nodejs14
runtime: nodejs14
handler: index.handler
memorySize: 128
timeout: 60
Options clés lors du flux interactif :
Cloud vendor : Sélectionnez Alibaba Cloud Serverless.
Template : Choisissez le type de fonction et le runtime, par exemple [Event] Node.js 14.
Project name : Acceptez la valeur par défaut ou saisissez un nom personnalisé.
Credential alias : Sélectionnez l'alias configuré lors de la configuration de Serverless Devs.
Deploy immediately : Sélectionnez Yes pour déployer en une seule étape, ou No pour différer le déploiement.
Méthode 2 : Flux de travail pas à pas avec s init
Initialiser le projet
sudo s init devsapp/start-fc-http-nodejs14
Cet exemple déploie une fonction HTTP sous Node.js 14. Remplacezhttppar un autre type de déclencheur, tel queevent, pour modifier le type de fonction. Remplaceznodejs14par un autre identifiant de runtime pour changer de runtime.
Exemple de sortie :
Serverless Awesome: https://github.com/Serverless-Devs/Serverless-Devs/blob/master/docs/zh/awesome.md
Please input your project name (init dir) start-fc-http-nodejs14
file decompression completed
____ _ _ ___ _ _ _ _____ ____
/ _ \/ \ / \\ \/// \ /\/ \ /| / // _\
| / \|| | | | \ / | | ||| |\ || | __\| /
| |-||| |_/\| | / / | \_/|| | \|| | | | \__
\_/ \|\____/\_//_/ \____/\_/ \| \_/ \____/
please select credential alias default
Welcome to the Aliyun FC start application
This application requires to open these services:
FC : https://fc.console.alibabacloud.com/
* The project is initialized. You can go to the project directory and run the s deploy command to deploy the project.
Thanks for using Serverless-Devs
You could [cd /test/start-fc-http-nodejs14] and enjoy your serverless journey!
If you need help for this example, you can use [s -h] after you enter folder.
Document Star: https://github.com/Serverless-Devs/Serverless-Devs
Do you want to deploy the project immediately? No
Après l'initialisation, le répertoire du projet contient les fichiers suivants :
| Fichier | Description |
|---|---|
s.yaml |
Définit les ressources Function Compute. Pour plus d'informations, consultez Syntaxe YAML et gestion des autorisations. |
s_en.yaml |
Contient la même configuration que s.yaml. Par défaut, le système utilise s.yaml. Pour utiliser s_en.yaml à la place, spécifiez le paramètre -t : s deploy -t s_en.yaml -y. |
code/ |
Contient index.js avec la logique de la fonction. |
readme.md |
Documente les dépendances, les modules et la configuration du projet. |
Accéder au répertoire du projet
cd start-fc-http-nodejs14
Compiler le projet (facultatif)
Exécutez s build pour compiler et empaqueter le projet localement :
sudo s build
Cette commande génère un répertoire .s à la racine du projet. Ce répertoire stocke les artefacts de compilation nécessaires au débogage et au déploiement.
Déboguer localement (facultatif)
Une fois la compilation terminée, testez la fonction sur votre machine avant de la déployer.
Fonctions HTTP :
sudo s local start
Exemple de sortie :
[2021-12-16 07:17:05] [INFO] [FC-LOCAL-INVOKE] - Using trigger for start: name: httpTrigger
type: http
config:
authType: anonymous
methods:
- GET
[2021-12-16 07:17:05] [INFO] [FC-LOCAL-INVOKE] - HttpTrigger httpTrigger of hello-world-service/http-trigger-nodejs14 was registered
url: http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
methods: GET
authType: anonymous
Tips: You can also use these commands to run or debug custom domain resources:
Start with customDomain:
* s local start auto
Debug with customDomain:
* s local start -d 3000 auto
Tips for next step
======================
* Deploy Resources: s deploy
helloworld:
status: succeed
function compute app listening on port 7013!
Appelez la fonction HTTP via cURL ou un navigateur :
curl http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
Vous pouvez également ouvrir l'URL suivante dans un navigateur :
http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
Fonctions événementielles :
sudo s local invoke
Le résultat s'affiche directement après l'exécution de la commande.
Déployer sur Function Compute
sudo s deploy -y
Exemple de sortie :
Checking Service, Function, Triggers (0.82s)
Creating Service, Function, Triggers (0.6s)
Creating custom domain (0.31s)
Tips for next step
======================
* Display information of the deployed resource: s info
* Display metrics: s metrics
* Display logs: s logs
* Invoke remote function: s invoke
* Remove Service: s remove service
* Remove Function: s remove function
* Remove Trigger: s remove trigger
* Remove CustomDomain: s remove domain
helloworld:
region: cn-hangzhou
service:
name: hello-world-service
function:
name: http-trigger-nodejs14
runtime: nodejs14
handler: index.handler
memorySize: 128
timeout: 60
url:
custom_domain:
-
domain: http://http-trigger-nodejs14.hello-world-service.188077086902****.cn-hangzhou.fc.devsapp.net
triggers:
-
type: http
name: httpTrigger
Appeler la fonction à distance (facultatif)
Après le déploiement, appelez la fonction dans le cloud pour vérifier son bon fonctionnement :
sudo s invoke -e '{"body": "","method":"GET","headers":{"header_1":"v1"},"queries":{"key":"value"},"path":"/"}'
Exemple de sortie :
Request url: https://188077086902****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
========= FC invoke Logs begin =========
FC Invoke Start RequestId: 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c
load code for handler:index.handler
2022-03-04T08:39:14.770Z 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c [verbose] hello world
FC Invoke End RequestId: 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c
Duration: 66.23 ms, Billed Duration: 67 ms, Memory Size: 128 MB, Max Memory Used: 42.48 MB
========= FC invoke Logs end =========
FC Invoke Result[Code: 200]:
{
path: '//',
queries: { key: 'value' },
headers: {
accept: 'application/json',
authorization: 'FC yourAccessKeyID:yourAccessKeySecret',
date: 'Fri, 04 Mar 2022 08:39:14 GMT',
header_1: 'v1',
host: '188077086902****.cn-hangzhou.fc.aliyuncs.com',
'user-agent': 'Node.js(v14.17.4) OS(linux/x64) SDK(@alicloud/fc2@v2.5.0)',
'x-forwarded-proto': 'http'
},
method: 'GET',
requestURI: '/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14//?key=value',
clientIP: '47.97.XX.XX',
body: ''
}
End of method: invoke
Vous pouvez également déclencher une fonction HTTP avec cURL :
curl https://188077086902****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
Supprimer les ressources (facultatif)
Si les ressources déployées ne sont plus nécessaires, supprimez-les :
sudo s remove service
Exemple de sortie :
Need to delete the resource in the cn-hangzhou area, the operation service is hello-world-service:
......
Delete trigger hello-world-service/http-trigger-nodejs14/httpTrigger success.
Delete function hello-world-service/http-trigger-nodejs14 success.
Delete service hello-world-service success.
[2022-03-04 08:40:26] [INFO] [FC] - Getting list on-demand: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service
[2022-03-04 08:40:26] [INFO] [FC] - Getting list provision: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service
[2022-03-04 08:40:26] [INFO] [FC] - Getting listAliases: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service
[2022-03-04 08:40:26] [INFO] [FC] - Getting list on-demand: _FC_NAS_hello-world-service
[2022-03-04 08:40:26] [INFO] [FC] - Getting list provision: _FC_NAS_hello-world-service
[2022-03-04 08:40:26] [INFO] [FC] - Getting listAliases: _FC_NAS_hello-world-service
End of method: remove
Cette commande supprime séquentiellement les déclencheurs, les fonctions et le service. Elle nettoie également les ressources NAS associées.