エッジスクリプト (ES) CLI を使用して、スクリプトのライフサイクル全体 (ローカルでのスクリプト作成、ステージング環境へのデプロイ、動作の検証、本番環境への昇格) を管理します。このワークフローにより、ライブトラフィックに影響を与える前に、ES のロジックを安全にテストできます。
ES CLI の完全なリファレンスドキュメントについては、「EdgeScript CLI を使用したスクリプトの管理」をご参照ください。
前提条件
開始する前に、以下を確認してください。
es.pyCLI ツールがダウンロードされ、作業ディレクトリで利用可能であることAlibaba Cloud CDN で高速化ドメイン名が設定されていること
デプロイ準備ができた ES スクリプトファイルがあること (以下の例では
m3u8.esを使用します)
仕組み
すべてのコマンドは es.py と action パラメーターを使用して操作を選択します。すべてのステップで同じドメインが対象となり、環境間を移動するために action の値のみが変更されます。
スクリプトの作成 → ステージングへのプッシュ → ステージングのクエリ → テスト → 本番環境へのプッシュ → 本番環境のクエリステップ 1:スクリプトの作成
ES ロジックをローカルの .es ファイルとして保存します。以下の例では m3u8.es を使用して、URI サフィックスをチェックし、400 Bad Request 応答を返すことで、すべての M3U8 リクエストをブロックします。
$cat m3u8.es
if eq(substr($uri, -5, -1), '.m3u8') {
add_rsp_header('X-DEBUG-DENY-REASON', 'block m3u8')
exit(400)
}ステップ 2:ステージング環境へのスクリプトのプッシュ
push_test_env を実行して、スクリプトを本番環境に到達させる前にステージング環境にデプロイします。
$./es.py action=push_test_env domain=<your domain> rule='{"pos":"head","pri":"0","rule_path":"./m3u8.es","enable":"on"}'ルールのパラメーター
| パラメーター | 説明 | 値の例 |
|---|---|---|
pos | リクエストパイプラインにおける実行位置 | head |
pri | 優先度 (数値が小さいほど優先度が高くなります) | 0 |
rule_path | ローカルの .es スクリプトファイルへのパス | ./m3u8.es |
enable | ルールがアクティブであるかどうか | on |
想定される応答
Response Code:
=============
200 OK
Response Info:
==============
{
"RequestId": "FB98CC67-8FBA-44CF-A98A-BCE3B19FE510"
}200 OK の応答と RequestId は、スクリプトが正常にプッシュされたことを示します。
ステップ 3:ステージング環境のクエリ
query_test_env を実行して、テスト前にスクリプトが正しく設定されていることを確認します。
$./es.py action=query_test_env domain=<your domain>想定される応答
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"
}応答内の "Status": "success" は、スクリプトがステージング環境で設定されていることを示します。ステップ 4:スクリプトのテスト
ステージング環境を通じてリクエストを送信し、スクリプトが期待どおりに動作することを確認します。Staging environment IP を、ご利用のステージングノードの実際の IP アドレスに置き換えてください。
$curl -x Staging environment IP:80 -o /dev/null -v 'http://www.archnote.net/test.m3u8'想定されるレスポンスヘッダー
< 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: 2a7b771b15634428415537484eX-DEBUG-DENY-REASON: block m3u8 ヘッダーを含む 400 Bad Request の応答は、スクリプトが意図したとおりに M3U8 リクエストをブロックしていることを示します。
ステップ 5:本番環境へのスクリプトのプッシュ
ステージング環境でスクリプトを検証した後、push_product_env を実行して本番環境に昇格させます。
$./es.py action=push_product_env domain=<your domain>想定される応答
Response Code:
=============
200 OK
Response Info:
==============
{
"RequestId": "F4B378F8-6AAE-457A-A70C-E856ED8341D8"
}ステップ 6:本番環境のクエリ
query_product_env を実行して、スクリプトが本番環境でアクティブであることを確認します。
$./es.py action=query_product_env domain=<your domain>想定される応答
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"
}"Status": "success"は、スクリプトが本番環境でアクティブであることを示します。本番環境の応答では、ステージング環境の応答とは異なるFunctionArgsの JSON スキーマが使用されます。FunctionArgsはフラットな配列ではなく、FunctionArg配列を含む JSON オブジェクトです。
次のステップ
ES CLI の完全なコマンドリファレンスを学ぶ:EdgeScript CLI を使用したスクリプトの管理