edit-icon download-icon

CDN イベントトリガー

最終更新日: May 31, 2019

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 のイベント スキーマ:

  1. {
  2. "events": [
  3. {
  4. "eventName": "CachedObjectsRefreshed",//event name
  5. "eventVersion": "1.0.0", // event version
  6. "eventSource": "cdn", // event source name
  7. "region": "cn-hangzhou", //default region:"cn-hangzhou"
  8. "eventTime": "2018-03-16T14:19:55+08:00",//refresh start time
  9. "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e25acf",//id of event source, used for debugging
  10. "resource": {
  11. "domain": "example.com"
  12. },
  13. "eventParameter": {
  14. "objectPath": [
  15. "/2018/03/16/13/33b430c57e7.mp4",//content URI
  16. "/2018/03/16/14/4ff6b9bd54d.mp4"//content URI
  17. ],
  18. "createTime": 1521180769,//refresh start time
  19. "domain": "example.com",//domain
  20. "completeTime": 1521180777,//refresh complete time
  21. "objectType": "File", //refresh type, including File and Directory
  22. "taskId": 2089687230 //refresh task ID
  23. },
  24. "userIdentity": {
  25. "aliUid": "1xxxxxxxxxx" //account id
  26. }
  27. }
  28. ]
  29. }

LogFileCreated のイベント スキーマ:

  1. {
  2. "events": [
  3. {
  4. "eventName": "LogFileCreated",//event name
  5. "eventSource": "cdn",//event source name
  6. "region": "cn-hangzhou",//default region:"cn-hangzhou"
  7. "eventVersion": "1.0.0",//event versino
  8. "eventTime": "2018-06-14T15:31:49+08:00",//event start time
  9. "userIdentity": {
  10. "aliUid": "1xxxxxxxxxxxx" //account id
  11. },
  12. "resource": {
  13. "domain": "example.com"//domain
  14. },
  15. "eventParameter": {
  16. "domain": "example.com",//domain
  17. "endTime": 1528959900, //end time of log file
  18. "fileSize": 1788115,//log file size
  19. "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
  20. "startTime": 1528959600 //start time of log file
  21. },
  22. "traceId": "c6459282-6a4d-4413-894c-e4ea39686738" //id of event source, used for debugging
  23. }
  24. ]
  25. }

CDN イベントトリガーの設定

トリガーの例:cdn_events_trigger.yml

  1. triggerConfig:
  2. eventName: logFileCreated
  3. eventVersion: 1.0.0
  4. notes: cdn events trigger test
  5. filter:
  6. domain: {“www.taobao.com”,”www.tmall.com”}

トリガーパラメーターの説明

  • eventName は、関数実行を呼び出す CDN イベントです。
  • eventVersion は、関数実行を呼び出す CDN イベントバージョンです。
  • notes は説明です。
  • filter はフィルターです。 (少なくとも 1 つのフィルターが必要)

フィルタースキーマ

  1. filter:
  2. key1: {value avalue b}
  3. key2: {value cvalue d}

デモ

所定の関数の CDN イベントトリガーの設定には、Function Compute コンソールfcliSDK の 3 つの方法があります。

デモ1:コンソール操作

この例では、Function Compute コンソールを使用して CDN イベントトリガーを設定する方法について説明します。トリガーを作成する方法の詳細については、「イベントソースサービスの使用」と 「トリガーの作成」をご参照ください。

Function Compute コンソール にログインし、必要に応じてリージョンとサービスを選択します。サービスを作成する必要がある場合は、サービスの作成をチェックしてください。

関数の作成中にトリガーを設定する
  1. 関数の作成をクリックし、空の関数を選択し、次へをクリックします。
  2. CDN イベントトリガーを選択し、以下のようにパラメーターを設定します。createfuntionandtrigger
  3. サービス名、関数名、関数の説明、ランタイムパラメーターを設定するには、インライン編集を選択し、次の Python ランタイムサンプルコードを貼り付け、次へをクリックします。
  1. import json
  2. import logging
  3. LOG = logging.getLogger()
  4. def handler(event, context):
  5. logger = logging.getLogger()
  6. eventObj = json.loads(event)["events"]
  7. logger.info("EventCount: %d" % len(eventObj))
  8. logger.info("eventName: %s" % eventObj[0]["eventName"])
  9. logger.info("eventVersion: %s" % eventObj[0]["eventVersion"])
  1. (オプション) 許可を設定し、次へをクリックします。すべての情報にエラーがないことを確認し、作成をクリックします。

関数作成後にトリガーを設定する

  1. サービス内の関数を選択します。トリガータブをクリックし、トリガーの作成をクリックします。
  2. CDN イベントトリガーを選択します。以下のようにパラメーターを設定し、 OK をクリックします。createtrigger

デモ 2:fcli 操作

まず、Trigger Config として yaml ファイルを作成します。以下のトリガー設定 yaml ファイルを持つトリガーは、CDN が www.taobao.com および www.tmall.com ドメインから logFileCreated (バージョン 1.0.0) イベントを受信する際に、いくつかの関数を呼び出します。

  1. triggerConfig:
  2. eventName: logFileCreated
  3. eventVersion: 1.0.0
  4. notes: cdn events trigger test
  5. filter:
  6. domain: [“www.taobao.com”,”www.tmall.com”]

コマンドを実行して、関数フォルダの下にトリガーを作成します。

  1. 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-sdkfc-java-sdk を提供しています。

トリガー Python コードの作成

  1. client = fc2.Client(
  2. endpoint='<Your Endpoint>',
  3. accessKeyID='<Your AccessKeyID>',
  4. accessKeySecret='<Your AccessKeySecret>')
  5. service_name = 'serviceName'
  6. function_name = 'functionName'
  7. trigger_name = 'triggerName'
  8. trigger_type = 'cdn_events'
  9. source_arn = 'acs:cdn:*:<Your Account ID>'
  10. invocation_role = 'acs:ram::<Your Account ID>:role/<Your Invocation Role>'
  11. trigger_config = {
  12. 'eventName': 'logFileCreated',
  13. 'eventVersion': '1.0.0',
  14. 'notes': 'notes',
  15. 'filter': {
  16. 'domain' : ['www.taobao.com'],
  17. }
  18. }
  19. client.create_trigger(service_name, function_name, trigger_name, trigger_type, trigger_config, source_arn, invocation_role)

関数 Python コード

  1. import json
  2. import logging
  3. LOG = logging.getLogger()
  4. def handler(event, context):
  5. logger = logging.getLogger()
  6. eventObj = json.loads(event)["events"]
  7. logger.info("EventCount: %d" % len(eventObj))
  8. logger.info("eventName: %s" % eventObj[0]["eventName"])
  9. logger.info("eventVersion: %s" % eventObj[0]["eventVersion"])