Utilisez la CLI EdgeScript (ES) pour gérer le cycle de vie complet des scripts : rédigez un script localement, déployez-le dans l'environnement de préproduction, vérifiez son comportement, puis promouvez-le en production. Ce flux de travail vous permet de tester en toute sécurité la logique EdgeScript (ES) avant qu'elle n'impacte le trafic en direct.
Pour consulter la documentation de référence complète de la CLI ES, voir Utiliser la CLI EdgeScript pour gérer les scripts .
Prérequis
Avant de commencer, assurez-vous d'avoir :
L'outil CLI
es.pytéléchargé et disponible dans votre répertoire de travailUn nom de domaine accéléré configuré dans Alibaba Cloud CDN
Un fichier de script ES prêt à être déployé (les exemples ci-dessous utilisent
m3u8.es)
Fonctionnement
Toutes les commandes utilisent es.py avec un paramètre action pour sélectionner l'opération. Le même domaine est ciblé à toutes les étapes ; seule la valeur du paramètre action change pour passer d'un environnement à l'autre.
Write script → Push to staging → Query staging → Test → Push to production → Query production
Étape 1 : Rédiger le script
Enregistrez votre logique ES dans un fichier local .es. L'exemple suivant utilise m3u8.es pour bloquer toutes les requêtes M3U8 en vérifiant le suffixe de l'URI et en renvoyant une réponse 400 Bad Request.
$cat m3u8.es
if eq(substr($uri, -5, -1), '.m3u8') {
add_rsp_header('X-DEBUG-DENY-REASON', 'block m3u8')
exit(400)
}
Étape 2 : Pousser le script vers l'environnement de préproduction
Exécutez push_test_env pour déployer le script en préproduction avant qu'il n'atteigne la production.
$./es.py action=push_test_env domain=<your domain> rule='{"pos":"head","pri":"0","rule_path":"./m3u8.es","enable":"on"}'
Paramètres de règle
|
Paramètre |
Description |
Valeur d'exemple |
|
|
Position d'exécution dans le pipeline de requête |
|
|
|
Priorité (un chiffre plus bas indique une priorité plus élevée) |
|
|
|
Chemin d'accès au fichier de script local |
|
|
|
Indique si la règle est active |
|
Réponse attendue
Response Code:
=============
200 OK
Response Info:
==============
{
"RequestId": "FB98CC67-8FBA-44CF-A98A-BCE3B19FE510"
}
Une réponse 200 OK accompagnée d'un RequestId confirme que le script a bien été poussé.
Étape 3 : Interroger l'environnement de préproduction
Exécutez query_test_env pour confirmer que le script est correctement configuré avant de lancer les tests.
$./es.py action=query_test_env domain=<your domain>
Réponse attendue
Response Code:
=============
200 OK
Response Info:
==============
{
"DomainConfigs": [
{
"Status": "success",
"ConfigId": 17432558,
"FunctionArgs": [
{
"ArgName": "enable",
"ArgValue": "on"
},
{
"ArgName": "pri",
"ArgValue": "0"
},
{
"ArgName": "pos",
"ArgValue": "head"
},
{
"ArgName": "rule",
"ArgValue": "if eq(substr($uri, -5, -1), '.m3u8') {\n add_rsp_header('X-DEBUG-DENY-REASON', 'block m3u8')\n exit(400)\n}\n"
}
],
"FunctionName": "edge_function"
}
],
"RequestId": "4DDBF3DB-BCAC-4074-AC1E-B6C1F1C6CBFB"
}
La présence de "Status": "success" dans la réponse confirme que le script est configuré dans l'environnement de préproduction.
Étape 4 : Tester le script
Envoyez une requête via l'environnement de préproduction pour vérifier que le script se comporte comme prévu. Remplacez Staging environment IP par l'adresse IP réelle de votre nœud de préproduction.
$curl -x Staging environment IP:80 -o /dev/null -v 'http://www.archnote.net/test.m3u8'
En-têtes de réponse attendus
< HTTP/1.1 400 Bad Request
< Server: Tengine
< Date: Thu, 18 Jul 2019 09:40:41 GMT
< Content-Type: text/html
< Content-Length: 265
< Connection: close
< X-DEBUG-DENY-REASON: block m3u8
< Via: cache1.cn1191-1[,0]
< Timing-Allow-Origin: *
< EagleId: 2a7b771b15634428415537484e
Une réponse 400 Bad Request accompagnée de l'en-tête X-DEBUG-DENY-REASON: block m3u8 confirme que le script bloque bien les requêtes M3U8.
Étape 5 : Pousser le script vers l'environnement de production
Après avoir vérifié le script en préproduction, exécutez publish_test_env pour le promouvoir en production.
$./es.py action=push_product_env domain=<your domain>
Réponse attendue
Response Code:
=============
200 OK
Response Info:
==============
{
"RequestId": "F4B378F8-6AAE-457A-A70C-E856ED8341D8"
}
Étape 6 : Interroger l'environnement de production
Exécutez query_product_env pour confirmer que le script est actif en production.
$./es.py action=query_product_env domain=<your domain>
Réponse attendue
Response Code:
=============
200 OK
Response Info:
==============
{
"DomainConfigs": {
"DomainConfig": [
{
"Status": "success",
"ConfigId": 17432558,
"FunctionArgs": {
"FunctionArg": [
{
"ArgName": "enable",
"ArgValue": "on"
},
{
"ArgName": "pri",
"ArgValue": "0"
},
{
"ArgName": "pos",
"ArgValue": "head"
},
{
"ArgName": "rule",
"ArgValue": "if eq(substr($uri, -5, -1), '.m3u8') {\n add_rsp_header('X-DEBUG-DENY-REASON', 'block m3u8')\n exit(400)\n}\n"
}
]
},
"FunctionName": "edge_function"
}
]
},
"RequestId": "36D57C1D-C820-43DA-8E70-DADC4B8BD4DD"
}
La mention"Status": "success"confirme que le script est actif en production. La réponse de production utilise un schéma JSON différent pourFunctionArgspar rapport à la réponse de préproduction :FunctionArgsest un objet JSON contenant un tableauFunctionArg, plutôt qu'un tableau plat.
Étapes suivantes
Consultez la référence complète des commandes de la CLI ES : Utiliser la CLI EdgeScript pour gérer les scripts