Use a CLI do EdgeScript (ES) para gerenciar todo o ciclo de vida dos scripts: escreva localmente, implante no ambiente de staging, verifique o comportamento e promova para produção. Esse fluxo permite testar a lógica do EdgeScript (ES) com segurança antes que ela afete o tráfego em tempo real.
Para consultar a documentação completa de referência da CLI do ES, acesse Usar a CLI do EdgeScript para gerenciar scripts .
Pré-requisitos
Antes de começar, certifique-se de ter:
A ferramenta de CLI
es.pybaixada e disponível no seu diretório de trabalhoUm nome de domínio acelerado configurado no Alibaba Cloud CDN
Um arquivo de script ES pronto para implantação (os exemplos abaixo usam
m3u8.es)
Como funciona
Todos os comandos usam es.py com um parâmetro action para selecionar a operação. O mesmo domínio é o alvo em todas as etapas; apenas o valor de action muda para transitar entre os ambientes.
Write script → Push to staging → Query staging → Test → Push to production → Query production
Etapa 1: Escrever o script
Salve sua lógica ES como um arquivo .es local. O exemplo a seguir usa m3u8.es para bloquear todas as requisições M3U8 ao verificar o sufixo da URI e retornar uma resposta 400 Bad Request.
$cat m3u8.es
if eq(substr($uri, -5, -1), '.m3u8') {
add_rsp_header('X-DEBUG-DENY-REASON', 'block m3u8')
exit(400)
}
Etapa 2: Enviar o script para o ambiente de staging
Execute push_test_env para implantar o script em staging antes que ele chegue à produção.
$./es.py action=push_test_env domain=<your domain> rule='{"pos":"head","pri":"0","rule_path":"./m3u8.es","enable":"on"}'
Parâmetros da regra
|
Parâmetro |
Descrição |
Valor de exemplo |
|
|
Posição de execução no pipeline de requisição |
|
|
|
Prioridade (número menor = prioridade maior) |
|
|
|
Caminho para o arquivo de script |
|
|
|
Indica se a regra está ativa |
|
Resposta esperada
Response Code:
=============
200 OK
Response Info:
==============
{
"RequestId": "FB98CC67-8FBA-44CF-A98A-BCE3B19FE510"
}
Uma resposta 200 OK contendo um RequestId confirma o envio bem-sucedido do script.
Etapa 3: Consultar o ambiente de staging
Execute query_test_env para confirmar se o script está configurado corretamente antes de testar.
$./es.py action=query_test_env domain=<your domain>
Resposta esperada
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": "dsl_ex"
}
],
"RequestId": "4DDBF3DB-BCAC-4074-AC1E-B6C1F1C6CBFB"
}
Um "Status": "success" na resposta confirma que o script está configurado no ambiente de staging.
Etapa 4: Testar o script
Envie uma requisição pelo ambiente de staging para verificar se o script se comporta conforme o esperado. Substitua Staging environment IP pelo endereço IP real do seu nó de staging.
$curl -x Staging environment IP:80 -o /dev/null -v 'http://www.archnote.net/test.m3u8'
Cabeçalhos de resposta esperados
< 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
Uma resposta 400 Bad Request com o cabeçalho X-DEBUG-DENY-REASON: block m3u8 confirma que o script bloqueia requisições M3U8 conforme planejado.
Etapa 5: Enviar o script para o ambiente de produção
Após validar o script em staging, execute push_product_env para promovê-lo à produção.
$./es.py action=push_product_env domain=<your domain>
Resposta esperada
Response Code:
=============
200 OK
Response Info:
==============
{
"RequestId": "F4B378F8-6AAE-457A-A70C-E856ED8341D8"
}
Etapa 6: Consultar o ambiente de produção
Execute query_product_env para confirmar se o script está ativo em produção.
$./es.py action=query_product_env domain=<your domain>
Resposta esperada
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": "dsl_ex"
}
]
},
"RequestId": "36D57C1D-C820-43DA-8E70-DADC4B8BD4DD"
}
Um"Status": "success"confirma que o script está ativo em produção. A resposta de produção usa um esquema JSON diferente paraFunctionArgsem comparação à resposta de staging:FunctionArgsé um objeto JSON contendo um arrayFunctionArg, em vez de um array simples.
Próximos passos
Consulte a referência completa de comandos da CLI do ES: Usar a CLI do EdgeScript para gerenciar scripts