CDN トリガーを設定すると、指定された高速化ドメイン名に対して CDN サービスがオフライン CDN ログファイルを生成するたびに、Function Compute がトリガーされ、そのログファイルが保存されます。このトピックでは、Function Compute コンソールでターゲット関数に CDN トリガーを設定する方法について説明します。このプロセスには、トリガーの作成、入力パラメーターの設定、関数コードの記述とテストが含まれます。
シナリオ例
Alibaba Cloud CDN は、Object Storage Service (OSS) ドメイン名、IP アドレス、オリジンドメイン名、Function Compute ドメイン名など、複数のタイプのオリジンサーバーをサポートしています。各オリジンサーバータイプは、オリジンサーバーの複数のアドレスをサポートします。マルチオリジンのシナリオでは、オリジンサーバーにプライマリ/セカンダリの優先度と重みを設定して、負荷分散を実装できます。
このトピックでは、OSS をオリジンサーバーとして使用します。OSS コンソールでバケットを作成し、オリジンサーバーとして使用するドメイン名を取得してから、オリジンサーバーの高速化ドメイン名を追加します。オリジンサーバーのタイプを変更する方法の詳細については、「オリジンサーバーの設定」をご参照ください。
前提条件
Function Compute
Object Storage Service (OSS)
CDN
ステップ 1: CDN トリガーの作成
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
上部のナビゲーションバーで、リージョンを選択します。[関数] ページで、ターゲット関数をクリックします。
関数詳細ページで、[トリガー] タブをクリックし、[トリガーの作成] をクリックします。
[トリガーの作成] パネルでパラメーターを設定し、[OK] をクリックします。
パラメーター
アクション
例
トリガータイプ
[CDN] を選択します。
CDN
名前
トリガーのカスタム名を入力します。
cdn-trigger
バージョンまたはエイリアス
デフォルト値は [LATEST] です。別のバージョンまたはエイリアスのトリガーを作成する場合は、まず関数詳細ページの [バージョンまたはエイリアス] ドロップダウンリストからバージョンまたはエイリアスを選択します。バージョンとエイリアスの詳細については、「バージョンの管理」および「エイリアスの管理」をご参照ください。
LATEST
トリガーイベント
トリガーイベントのタイプを選択します。
トリガーイベントのタイプの選択方法の詳細については、「CDN イベントの定義」をご参照ください。
CdnDomainStarted
トリガーイベントバージョン
トリガーイベントのバージョン番号。
説明イベントバージョン 1.0.0 のみがサポートされています。
1.0.0
ドメイン名
高速化ドメイン名を入力します。
bucket*******.oss-cn-chengdu-internal.aliyuncs.com
説明
ドメイン名の説明を入力します。
cdntrigger
ロール名
[AliyunCDNEventNotificationRole] を選択します。
説明このタイプのトリガーを初めて作成する場合は、[OK] をクリックし、表示されるダイアログボックスで [今すぐ承認] をクリックします。
AliyunCDNEventNotificationRole
トリガーが作成されると、[トリガー名] リストに表示されます。トリガーを変更または削除するには、「トリガーの管理」をご参照ください。
ステップ 2: 関数の入力パラメーターの設定
関数詳細ページの [コード] タブで、[関数をテスト] の横にある
アイコンをクリックし、ドロップダウンリストから [テストパラメーターを設定] を選択します。[テストパラメーターの設定] パネルで、[新しいテストイベントの作成] または [既存のテストイベントの編集] を選択し、イベント名と内容を入力して、[OK] をクリックします。
イベントは Function Compute の入力パラメーターです。フォーマットは次の例のとおりです。eventParameter のキーと値のペアは、CDN イベントタイプによって異なります。
LogFileCreated イベントの例。
filePathを CDN ログファイルまたは任意のテストファイルのパスに置き換えます。{ "events": [ { "eventName": "LogFileCreated", "eventSource": "cdn", "region": "cn-hangzhou", "eventVersion": "1.0.0", "eventTime": "2018-06-14T15:31:49+08:00", "traceId": "c6459282-6a4d-4413-894c-e4ea3968****", "userIdentity": { "aliUid": "164901546557****" }, "resource": { "domain": "example.com" }, "eventParameter": { "domain": "example.com", "endTime": 1528959900, "fileSize": 1788115, "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", "startTime": 1528959600 } } ] }次の表に、イベントパラメーターのフィールドを示します。
パラメーター
タイプ
例
説明
eventName
String
LogFileCreated
イベントタイプ。
eventSource
String
cdn
イベントソースの名前。
region
String
cn-hangzhou
CDN が配置されているリージョン。
eventVersion
String
1.0.0
イベントトリガーのバージョン。
eventTime
String
2018-06-14T15:31:49+08:00
イベントが発生した時刻。
traceId
String
c6459282-6a4d-4413-894c-e4ea3968****
トラブルシューティングのためにイベントソースから渡される ID。
userIdentity
Map
ユーザープロパティ。
aliUid
String
164901546557****
Alibaba Cloud アカウント ID。
resource
Map
リソース情報。
domain
String
example.com
ドメイン名。
eventParameter
Map
イベントパラメーター。
domain
String
example.com
ドメイン名。
endTime
String
1528959900
ログファイルの終了時刻。
fileSize
String
1788115
ログファイルのサイズ。
filePath
String
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
ログファイルのパス。
startTime
String
1528959600
ログファイルの開始時刻。
CachedObjectsRefreshed および CachedObjectsPushed イベントの例。
{ "events": [ { "eventName": "CachedObjectsRefreshed", "eventVersion": "1.0.0", "eventSource": "cdn", "region": "cn-hangzhou", "eventTime": "2018-03-16T14:19:55+08:00", "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****", "resource": { "domain": "example.com" }, "eventParameter": { "objectPath": [ "/2018/03/16/13/33b430c57e7.mp4", "/2018/03/16/14/4ff6b9bd54d.mp4" ], "createTime": 1521180769, "domain": "example.com", "completeTime": 1521180777, "objectType": "File", "taskId": 2089687230 }, "userIdentity": { "aliUid": "164901546557****" } } ] }次の表に、イベントパラメーターのフィールドを示します。
パラメーター
タイプ
例
説明
eventName
String
CachedObjectsRefreshed
イベントタイプ。
eventSource
String
cdn
イベントソースの名前。
region
String
cn-hangzhou
CDN が配置されているリージョン。
eventVersion
String
1.0.0
イベントトリガーのバージョン。
eventTime
String
2018-06-14T15:31:49+08:00
イベントが発生した時刻。
traceId
String
c6459282-6a4d-4413-894c-e4ea3968****
トラブルシューティングのためにイベントソースから渡される ID。
resource
Map
リソース情報。
domain
String
example.com
ドメイン名。
eventParameter
Map
イベントパラメーター。
objectPath
String
/2018/03/16/13/33b430c57e7.mp4
リソース識別子。
createTime
String
1521180769
リフレッシュの開始時刻
domain
String
example.com
ドメイン名。
completeTime
String
1521180777
リフレッシュの終了時刻
objectType
String
File
パージタイプ。有効な値:
File: ファイル。
Directory: ディレクトリ。
taskId
String
2089687230
リソースパージタスクの ID。
userIdentity
Map
ユーザープロパティ。
aliUid
String
164901546557****
Alibaba Cloud アカウント ID。
CdnDomainStarted および CdnDomainStopped イベントの例。
{ "events": [ { "eventName": "CdnDomainStarted", "eventVersion": "1.0.0", "eventSource": "cdn", "region": "cn-hangzhou", "eventTime": "2018-03-16T14:19:55+08:00", "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****", "resource": { "domain": "example.com" }, "eventParameter": { "domain": "example.com", "status": "online" }, "userIdentity": { "aliUid": "164901546557****" } } ] }次の表に、イベントパラメーターのフィールドを示します。
パラメーター
タイプ
例
説明
eventName
String
CdnDomainStarted
イベントタイプ。
eventSource
String
cdn
イベントソースの名前。
region
String
cn-hangzhou
CDN が配置されているリージョン。
eventVersion
String
1.0.0
イベントトリガーのバージョン。
eventTime
String
2018-06-14T15:31:49+08:00
イベントが発生した時刻。
traceId
String
c6459282-6a4d-4413-894c-e4ea3968****
トラブルシューティングのためにイベントソースから渡される ID。
resource
Map
リソース情報。
domain
String
example.com
ドメイン名。
eventParameter
Map
イベントパラメーター。
domain
String
example.com
ドメイン名。
status
String
online
ドメイン名のステータス。
userIdentity
Map
ユーザープロパティ。
aliUid
String
164901546557****
Alibaba Cloud アカウント ID。
CdnDomainAdded および CdnDomainDeleted イベントの例。
{ "events": [ { "eventName": "CdnDomainAdded", "eventVersion": "1.0.0", "eventSource": "cdn", "region": "cn-hangzhou", "eventTime": "2018-03-16T14:19:55+08:00", "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e2****", "resource": { "domain": "example.com" }, "eventParameter": { "domain": "example.com" }, "userIdentity": { "aliUid": "164901546557****" } } ] }次の表に、イベントパラメーターのフィールドを示します。
パラメーター
タイプ
例
説明
eventName
String
CdnDomainAdded
イベントタイプ。
eventSource
String
cdn
イベントソースの名前。
region
String
cn-hangzhou
CDN が配置されているリージョン。
eventVersion
String
1.0.0
イベントトリガーのバージョン。
eventTime
String
2018-06-14T15:31:49+08:00
イベントが発生した時刻。
traceId
String
c6459282-6a4d-4413-894c-e4ea3968****
トラブルシューティングのためにイベントソースから渡される ID。
resource
Map
リソース情報。
domain
String
example.com
ドメイン名。
eventParameter
Map
イベントパラメーター。
domain
String
example.com
ドメイン名。
userIdentity
Map
ユーザープロパティ。
aliUid
String
164901546557****
Alibaba Cloud アカウント ID。
ステップ 3: 関数コードの記述とテスト
CDN トリガーを作成した後、関数コードを記述してテストし、期待どおりに動作することを確認する必要があります。本番環境では、CDN イベントが発生すると、トリガーが自動的に関数を実行します。
関数詳細ページの [コード] タブで、コードエディタにコードを記述し、[コードのデプロイ] をクリックします。
このトピックでは、Python コードを例として使用します。
# -*- coding: utf-8 -*- import logging import json logger = logging.getLogger("cdn-sample") def handler(event, context): evt = json.loads(event) eventObj = evt["events"][0] eventName = eventObj['eventName'] info = "" eventParam = eventObj['eventParameter'] domain = eventParam['domain'] if eventName == "CachedObjectsRefreshed" or eventName == "CachedObjectsPushed": objPathList = eventParam['objectPath'] info = ",".join(objPathList) elif eventName == "LogFileCreated": info = eventParam['filePath'] elif eventName == "CdnDomainStarted" or eventName == "CdnDomainStopped": # ここにビジネスロジックを記述します pass elif eventName == "CdnDomainAdded" or eventName == "CdnDomainDeleted": # ここにビジネスロジックを記述します pass return f"eventName:{eventName}, domain: {domain}, info: {info}"[関数のテスト] をクリックします。
実行が完了したら、[コード] タブの上で結果を表示できます。
詳細情報
Function Compute コンソールに加えて、次の方法でトリガーを設定することもできます。
Serverless Devs ツールを使用してトリガーを設定します。詳細については、「Serverless Devs の一般的なコマンド」をご参照ください。
SDK を使用してトリガーを設定します。詳細については、「SDK」をご参照ください。
トリガーを変更または削除するには、「トリガーの管理」をご参照ください。