すべてのプロダクト
Search
ドキュメントセンター

CDN:CLI を使用した EdgeScript の管理

最終更新日:Apr 01, 2026

エッジスクリプト (ES) CLI を使用して、スクリプトのライフサイクル全体 (ローカルでのスクリプト作成、ステージング環境へのデプロイ、動作の検証、本番環境への昇格) を管理します。このワークフローにより、ライブトラフィックに影響を与える前に、ES のロジックを安全にテストできます。

ES CLI の完全なリファレンスドキュメントについては、「EdgeScript CLI を使用したスクリプトの管理」をご参照ください。

前提条件

開始する前に、以下を確認してください。

  • es.py CLI ツールがダウンロードされ、作業ディレクトリで利用可能であること

  • Alibaba Cloud CDN で高速化ドメイン名が設定されていること

  • デプロイ準備ができた ES スクリプトファイルがあること (以下の例では m3u8.es を使用します)

仕組み

すべてのコマンドは es.pyaction パラメーターを使用して操作を選択します。すべてのステップで同じドメインが対象となり、環境間を移動するために 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: 2a7b771b15634428415537484e

X-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 オブジェクトです。

次のステップ