CDN イベントトリガー
Alibaba Cloud CDN (Content Delivery Network) は、世界中に 1,200 以上のノードが分散しているため、Web サイトの応答時間をミリ秒に短縮し、スムーズなビデオストリーミングで、大量のトラフィックを処理します。低コストでスケーラブルなサービスとして、Alibaba Cloud CDN は、長期契約や基本料金は必要ありません。Alibaba Cloud Function Compute と Alibaba Cloud CDN のシームレスな連携により、FC はさまざまな種類の CDN イベントを受信して処理できます。ユーザーは、特定のドメインからのイベントを処理するフィルターを備えた CDN イベントトリガーを作成し、特定の関数でこれらのイベントを処理できます。たとえば、ユーザーは、”www.taobao.com” ドメインからの CDN キャッシュパージイベントを処理する CDN イベントトリガーと、いくつかのロギング関数を作成できます。
CDN イベント
CDN はユーザー指定のイベントを JSON 文字列に変換し、その関数を呼び出します。CDN イベントによってサポートされるイベントは、以下のようにトリガーされます。
イベント名 | イベントバージョン | フィルターキー | 説明 |
---|---|---|---|
CachedObjectsRefreshed | 1.0.0 | domain | CDN リソースのリフレッシュ |
CachedObjectsBlocked | 1.0.0 | domain | CDN リソースのブロック |
CachedObjectsPushed | 1.0.0 | domain | CDN リソースの先行読み込み |
logFileCreated | 1.0.0 | domain | 作成された CDN ログファイル |
CDN イベントスキーマ
CachedObjectsRefreshed、CachedObjectsPushed、CachedObjectsBlocked のイベント スキーマ:
{
"events": [
{
"eventName": "CachedObjectsRefreshed",//event name
"eventVersion": "1.0.0", // event version
"eventSource": "cdn", // event source name
"region": "cn-hangzhou", //default region:"cn-hangzhou"
"eventTime": "2018-03-16T14:19:55+08:00",//refresh start time
"traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e25acf",//id of event source, used for debugging
"resource": {
"domain": "example.com"
},
"eventParameter": {
"objectPath": [
"/2018/03/16/13/33b430c57e7.mp4",//content URI
"/2018/03/16/14/4ff6b9bd54d.mp4"//content URI
],
"createTime": 1521180769,//refresh start time
"domain": "example.com",//domain
"completeTime": 1521180777,//refresh complete time
"objectType": "File", //refresh type, including File and Directory
"taskId": 2089687230 //refresh task ID
},
"userIdentity": {
"aliUid": "1xxxxxxxxxx" //account id
}
}
]
}
LogFileCreated のイベント スキーマ:
{
"events": [
{
"eventName": "LogFileCreated",//event name
"eventSource": "cdn",//event source name
"region": "cn-hangzhou",//default region:"cn-hangzhou"
"eventVersion": "1.0.0",//event versino
"eventTime": "2018-06-14T15:31:49+08:00",//event start time
"userIdentity": {
"aliUid": "1xxxxxxxxxxxx" //account id
},
"resource": {
"domain": "example.com"//domain
},
"eventParameter": {
"domain": "example.com",//domain
"endTime": 1528959900, //end time of log file
"fileSize": 1788115,//log file size
"filePath": "http://cdnlog.cn-hangzhou.oss.aliyun-inc.com/www.aliyun.com/2017_12_27/www.aliyun.com_2017_12_27_0800_0900.gz?OSSAccessKeyId=xxxx&Expires=xxxx&Signature=xxxx",//log file path
"startTime": 1528959600 //start time of log file
},
"traceId": "c6459282-6a4d-4413-894c-e4ea39686738" //id of event source, used for debugging
}
]
}
CDN イベントトリガーの設定
トリガーの例:cdn_events_trigger.yml
triggerConfig:
eventName: “logFileCreated”
eventVersion: “1.0.0”
notes: “cdn events trigger test”
filter:
domain: {“www.taobao.com”,”www.tmall.com”}
トリガーパラメーターの説明
eventName
は、関数実行を呼び出す CDN イベントです。eventVersion
は、関数実行を呼び出す CDN イベントバージョンです。notes
は説明です。filter
はフィルターです。 (少なくとも 1 つのフィルターが必要)
フィルタースキーマ
filter:
key1: {value a,value b}
key2: {value c,value d}
デモ
所定の関数の CDN イベントトリガーの設定には、Function Compute コンソール、fcli、SDK の 3 つの方法があります。
デモ1:コンソール操作
この例では、Function Compute コンソールを使用して CDN イベントトリガーを設定する方法について説明します。トリガーを作成する方法の詳細については、「イベントソースサービスの使用」と 「トリガーの作成」をご参照ください。
Function Compute コンソール にログインし、必要に応じてリージョンとサービスを選択します。サービスを作成する必要がある場合は、サービスの作成をチェックしてください。
関数の作成中にトリガーを設定する
- 関数の作成をクリックし、空の関数を選択し、次へをクリックします。
- CDN イベントトリガーを選択し、以下のようにパラメーターを設定します。
- サービス名、関数名、関数の説明、ランタイムパラメーターを設定するには、インライン編集を選択し、次の Python ランタイムサンプルコードを貼り付け、次へをクリックします。
import json
import logging
LOG = logging.getLogger()
def handler(event, context):
logger = logging.getLogger()
eventObj = json.loads(event)["events"]
logger.info("EventCount: %d" % len(eventObj))
logger.info("eventName: %s" % eventObj[0]["eventName"])
logger.info("eventVersion: %s" % eventObj[0]["eventVersion"])
- (オプション) 許可を設定し、次へをクリックします。すべての情報にエラーがないことを確認し、作成をクリックします。
関数作成後にトリガーを設定する
- サービス内の関数を選択します。トリガータブをクリックし、トリガーの作成をクリックします。
- CDN イベントトリガーを選択します。以下のようにパラメーターを設定し、 OK をクリックします。
デモ 2:fcli 操作
まず、Trigger Config として yaml ファイルを作成します。以下のトリガー設定 yaml ファイルを持つトリガーは、CDN が www.taobao.com および www.tmall.com ドメインから logFileCreated (バージョン 1.0.0) イベントを受信する際に、いくつかの関数を呼び出します。
triggerConfig:
eventName: “logFileCreated”
eventVersion: “1.0.0”
notes: “cdn events trigger test”
filter:
domain: [“www.taobao.com”,”www.tmall.com”]
コマンドを実行して、関数フォルダの下にトリガーを作成します。
mkt serviceName/functionName -t cdn_events -r acs:ram::account_id:role/AliyunCDNEventNotificationRole -s acs:cdn:*:account_id -c TriggerConfig.yaml
fcli の詳細については、「fcli」 をご参照ください。
デモ 3:SDK プログラミング
fc-python-sdk を例として使用し、SDK による CDN イベントトリガーの設定方法を説明します。Function Compute は、fc-nodejs-sdk と fc-java-sdk を提供しています。
トリガー Python コードの作成
client = fc2.Client(
endpoint='<Your Endpoint>',
accessKeyID='<Your AccessKeyID>',
accessKeySecret='<Your AccessKeySecret>')
service_name = 'serviceName'
function_name = 'functionName'
trigger_name = 'triggerName'
trigger_type = 'cdn_events'
source_arn = 'acs:cdn:*:<Your Account ID>'
invocation_role = 'acs:ram::<Your Account ID>:role/<Your Invocation Role>'
trigger_config = {
'eventName': 'logFileCreated',
'eventVersion': '1.0.0',
'notes': 'notes',
'filter': {
'domain' : ['www.taobao.com'],
}
}
client.create_trigger(service_name, function_name, trigger_name, trigger_type, trigger_config, source_arn, invocation_role)
関数 Python コード
import json
import logging
LOG = logging.getLogger()
def handler(event, context):
logger = logging.getLogger()
eventObj = json.loads(event)["events"]
logger.info("EventCount: %d" % len(eventObj))
logger.info("eventName: %s" % eventObj[0]["eventName"])
logger.info("eventVersion: %s" % eventObj[0]["eventVersion"])