EdgeScript (ES) CLI kullanarak tam betik yaşam döngüsünü yönetin: Bir betiği yerel olarak yazın, hazırlama ortamına dağıtın, davranışı doğrulayın ve ardından üretim ortamına taşıyın. Bu iş akışı, canlı trafiği etkilemeden önce EdgeScript (ES) mantığını güvenle test etmenizi sağlar.
ES CLI referans belgelerinin tamamı için bkz. Betikleri yönetmek için EdgeScript CLI kullanma .
Ön Koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Çalışma dizininizde indirilmiş ve kullanılabilir durumda olan
es.pyCLI aracıAlibaba Cloud CDN'de yapılandırılmış bir hızlandırılmış alan adı
Dağıtıma hazır bir ES betik dosyası (aşağıdaki örneklerde
m3u8.eskullanılır)
Çalışma Mantığı
Tüm komutlar, işlemi seçmek için bir action parametresiyle es.py aracını kullanır. Tüm adımlarda aynı alan adı hedeflenir; ortamlar arasında geçiş yapmak için yalnızca action değeri değişir.
Write script → Push to staging → Query staging → Test → Push to production → Query production
1. Adım: Betiği Yazma
ES mantığınızı yerel bir .es dosyası olarak kaydedin. Aşağıdaki örnekte, URI sonekini kontrol ederek tüm M3U8 isteklerini engelleyen ve bir 400 Bad Request yanıtı döndüren m3u8.es kullanılmaktadır.
$cat m3u8.es
if eq(substr($uri, -5, -1), '.m3u8') {
add_rsp_header('X-DEBUG-DENY-REASON', 'block m3u8')
exit(400)
}
2. Adım: Betiği Hazırlama Ortamına Gönderme
Betiği üretim ortamına ulaşmadan önce hazırlama ortamına dağıtmak için push_test_env komutunu çalıştırın.
$./es.py action=push_test_env domain=<your domain> rule='{"pos":"head","pri":"0","rule_path":"./m3u8.es","enable":"on"}'
Kural Parametreleri
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Beklenen Yanıt
Response Code:
=============
200 OK
Response Info:
==============
{
"RequestId": "FB98CC67-8FBA-44CF-A98A-BCE3B19FE510"
}
Bir RequestId içeren 200 OK yanıtı, betiğin başarıyla gönderildiğini doğrular.
3. Adım: Hazırlama Ortamını Sorgulama
Test etmeden önce betiğin doğru yapılandırıldığını onaylamak için query_test_env komutunu çalıştırın.
$./es.py action=query_test_env domain=<your domain>
Beklenen Yanıt
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"
}
Yanıttaki "Status": "success" değeri, betiğin hazırlama ortamında yapılandırıldığını doğrular.
4. Adım: Betiği Test Etme
Betiğin beklendiği gibi davrandığını doğrulamak için hazırlama ortamı üzerinden bir istek gönderin. Staging environment IP ifadesini hazırlama düğümünüzün gerçek IP adresiyle değiştirin.
$curl -x Staging environment IP:80 -o /dev/null -v 'http://www.archnote.net/test.m3u8'
Beklenen Yanıt Başlıkları
< 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
X-DEBUG-DENY-REASON: block m3u8 başlığını içeren bir 400 Bad Request yanıtı, betiğin M3U8 isteklerini amaçlandığı şekilde engellediğini doğrular.
5. Adım: Betiği Üretim Ortamına Gönderme
Betiği hazırlama ortamında doğruladıktan sonra, bunu üretim ortamına taşımak için publish_test_env komutunu çalıştırın.
$./es.py action=push_product_env domain=<your domain>
Beklenen Yanıt
Response Code:
=============
200 OK
Response Info:
==============
{
"RequestId": "F4B378F8-6AAE-457A-A70C-E856ED8341D8"
}
6. Adım: Üretim Ortamını Sorgulama
Betiğin üretimde etkin olduğunu onaylamak için query_product_env komutunu çalıştırın.
$./es.py action=query_product_env domain=<your domain>
Beklenen Yanıt
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"
}
"Status": "success"değeri, betiğin üretimde etkin olduğunu doğrular. Üretim yanıtı,FunctionArgsiçin hazırlama yanıtından farklı bir JSON şeması kullanır:FunctionArgs, düz bir dizi yerine birFunctionArgdizisi içeren bir JSON nesnesidir.
Sonraki Adımlar
Tam ES CLI komut referansını öğrenin: Betikleri yönetmek için EdgeScript CLI kullanma