Todos os produtos
Search
Central de documentação

CDN:Gerenciar EdgeScript com a CLI

Última atualização: Jul 03, 2026

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.py baixada e disponível no seu diretório de trabalho

  • Um 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

pos

Posição de execução no pipeline de requisição

head

pri

Prioridade (número menor = prioridade maior)

0

rule_path

Caminho para o arquivo de script .es local

./m3u8.es

enable

Indica se a regra está ativa

on

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 para FunctionArgs em comparação à resposta de staging: FunctionArgs é um objeto JSON contendo um array FunctionArg , em vez de um array simples.

Próximos passos