Alibaba Cloud CDNトリガーを設定した後、Alibaba Cloud CDNが指定された高速化ドメイン名でオフラインログファイルを生成するたびに、Alibaba Cloud CDNイベントがFunction ComputeをトリガーしてAlibaba Cloud CDNのオフラインログを保存します。 このトピックでは、function Computeコンソールで関数のAlibaba Cloud CDNトリガーを設定する方法について説明します。トリガーの作成方法、入力パラメーターの設定方法、関数コードの書き込みとテスト方法などがあります。
シナリオの例
Alibaba Cloud CDNは、Object Storage Service (OSS) エンドポイント、オリジンサーバーのIPアドレス、オリジンサーバーのドメイン名、およびFunction Computeドメイン名をサポートしています。 各タイプのオリジンサーバーを1つ以上指定し、プライマリとセカンダリのオリジンサーバーを指定して負荷を分散できます。
このトピックでは、OSSエンドポイントをオリジンサーバーとして使用します。 OSSコンソールでバケットを作成し、オリジンサーバーとしてエンドポイントを取得してから、Alibaba Cloud CDNにドメイン名を追加する必要があります。 オリジンサーバーを変更する方法の詳細については、「オリジンサーバーの設定」をご参照ください。
始める前に
Function Compute
OSS
CDN
ステップ1: Alibaba Cloud CDNトリガーの作成
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスと機能] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで、管理するサービスを見つけ、[操作] 列の [関数] をクリックします。
関数ページで、変更する関数をクリックします。
関数の詳細ページで、トリガータブからバージョンまたはエイリアスを選択します。バージョンまたはエイリアスドロップダウンリストをクリックし、トリガーの作成
[トリガーの作成] パネルでパラメーターを設定し、[OK] をクリックします。
パラメーター
説明
例
トリガータイプ
[Alibaba Cloud CDN] を選択します。
CDN
名前
トリガー名を入力します。
cdn-trigger
バージョンまたはエイリアス
デフォルト値はLATESTです。 別のバージョンまたはエイリアスのトリガーを作成する場合は、関数の詳細ページのバージョンまたはエイリアスドロップダウンリストからバージョンまたはエイリアスを選択します。 バージョンとエイリアスの詳細については、「バージョンの管理」および「エイリアスの管理」をご参照ください。
LATEST
トリガーイベント
トリガーイベントの種類を選択します。
イベントタイプの選択方法の詳細については、「概要」の「CDNイベント」セクションをご参照ください。
CdnDomainStarted
Trigger Eventバージョン
トリガーイベントのバージョンを指定します。
説明イベントバージョン1.0.0のみサポートされています。
1.0.0
ドメイン名
高速化ドメイン名を入力します。
バケツ ******* .oss-cn-chengdu-internal.aliyuncs.com
説明
高速化ドメイン名に関する説明を入力します。
cdntrigger
ロール名
[AliyunCDNEventNotificationRole] を選択します。
説明上記のパラメーターを設定したら、[OK] をクリックします。 このタイプのトリガーを初めて作成する場合は、表示されるメッセージの [今すぐ許可] をクリックします。
AliyunCDNEventNotificationRole
トリガーが作成されると、[トリガー] タブに表示されます。 既存のトリガーを変更または削除するには、「トリガーの管理」をご参照ください。
ステップ2: 関数の入力パラメータを設定する
関数の詳細ページで、コードタブをクリックし、テスト機能の隣のアイコンを選択し、ドロップダウンリストからテストパラメーターの設定を選択します。
では、テストパラメーターの設定パネルを選択します。新しいテストイベントの作成または既存のテストイベントの変更タブ、設定イベント名とイベントの内容をクリックし、OKをクリックします。
イベントパラメーターは、Function Computeの入力パラメーターです。 次の項目は、イベントの形式を示しています。 eventParameterのキーと値のペアは、Alibaba Cloud CDNイベントタイプによって異なります。
LogFileCreatedイベントの例
filePathをAlibaba Cloud 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 } } ] }
次の表に、eventパラメーターのフィールドを示します。
項目
データ型
例
説明
eventName
String
LogFileCreated
イベントのタイプ。
eventSource
String
cdn
イベントソースの名前。
region
String
cn-hangzhou
Alibaba Cloud CDNが存在するリージョン。 デフォルト値: cn-hangzhou
eventVersion
String
1.0.0
イベントトリガーのバージョン。
eventTime
String
2018-06-14T15:31:49 + 08:00
イベントが発生した時刻。
traceId
String
c6459282-6a4d-4413-894c-e4ea3968 ****
トラブルシューティングのためにイベントソースによって配信されるID。
userIdentity
地図
ユーザーに関する情報。
aliUid
String
164901546557 ****
名前空間を作成したAlibaba CloudアカウントのID。
リソース
地図
リソースに関する情報。
ドメイン
String
example.com
ドメイン名。
eventParameter
地図
イベントパラメーター。
ドメイン
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****" } } ] }
次の表に、eventパラメーターのフィールドを示します。
項目
データ型
例
説明
eventName
String
CachedObjectsRefreshed
イベントのタイプ。
eventSource
String
cdn
イベントソースの名前。
region
String
cn-hangzhou
Alibaba Cloud CDNが存在するリージョン。 デフォルト値: cn-hangzhou
eventVersion
String
1.0.0
イベントトリガーのバージョン。
eventTime
String
2018-06-14T15:31:49 + 08:00
イベントが発生した時刻。
traceId
String
c6459282-6a4d-4413-894c-e4ea3968 ****
トラブルシューティングのためにイベントソースによって配信されるID。
リソース
地図
リソースに関する情報。
ドメイン
String
example.com
ドメイン名。
eventParameter
地図
イベントパラメーター。
objectPath
String
/2018/03/16/13/33b430c57e7.mp4
リソース識別子。
createTime
String
1521180769
リフレッシュの開始時刻。
ドメイン
String
example.com
ドメイン名。
completeTime
String
1521180777
更新の終了時間。
objectType
String
ファイル
更新されるアイテム。 有効な値:
ファイル: files
ディレクトリ: フォルダ
taskId
String
2089687230
リソース更新タスクのID。
userIdentity
地図
ユーザーに関する情報。
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****" } } ] }
次の表に、eventパラメーターのフィールドを示します。
項目
データ型
例
説明
eventName
String
CdnDomainStarted
イベントのタイプ。
eventSource
String
cdn
イベントソースの名前。
region
String
cn-hangzhou
Alibaba Cloud CDNが存在するリージョン。 デフォルト値: cn-hangzhou
eventVersion
String
1.0.0
イベントトリガーのバージョン。
eventTime
String
2018-06-14T15:31:49 + 08:00
イベントが発生した時刻。
traceId
String
c6459282-6a4d-4413-894c-e4ea3968 ****
トラブルシューティングのためにイベントソースによって配信されるID。
リソース
地図
リソースに関する情報。
ドメイン
String
example.com
ドメイン名。
eventParameter
地図
イベントパラメーター。
ドメイン
String
example.com
ドメイン名。
status
String
online
高速化ドメイン名のステータス。
userIdentity
地図
ユーザーに関する情報。
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****" } } ] }
次の表に、eventパラメーターのフィールドを示します。
項目
データ型
例
説明
eventName
String
CdnDomainAdded
イベントタイプ。
eventSource
String
cdn
イベントソースの名前。
region
String
cn-hangzhou
Alibaba Cloud CDNが存在するリージョン。 デフォルト値: cn-hangzhou
eventVersion
String
1.0.0
イベントトリガーのバージョン。
eventTime
String
2018-06-14T15:31:49 + 08:00
イベントが発生した時刻。
traceId
String
c6459282-6a4d-4413-894c-e4ea3968 ****
トラブルシューティングのためにイベントソースによって配信されるID。
リソース
地図
リソースに関する情報。
ドメイン
String
example.com
ドメイン名。
eventParameter
地図
イベントパラメーター。
ドメイン
String
example.com
ドメイン名。
userIdentity
地図
ユーザーに関する情報。
aliUid
String
164901546557 ****
名前空間を作成したAlibaba CloudアカウントのID。
ステップ3: 関数の書き込みとテスト
CDNトリガーを作成した後、関数コードを記述し、関数をテストしてコードが正しいかどうかを確認できます。 Alibaba Cloud CDNイベントが発生すると、Alibaba Cloud 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": # Corresponding business logic pass elif eventName == "CdnDomainAdded" or eventName == "CdnDomainDeleted": # Corresponding business logic pass return f"eventName:{eventName}, domain: {domain}, info: {info}"
コードタブで、テスト機能をクリックします。
関数の実行後、[コード] タブで結果を表示できます。
関連ドキュメント
Function Computeコンソールに加えて、次の方法を使用してトリガーを設定できます。
Serverless Devsを使用してトリガーを設定します。 詳細については、「Serverless Devs」をご参照ください。
SDKを使用してトリガーを設定します。 詳細は、SDK をご参照ください。
既存のトリガーを変更または削除するには、「トリガーの管理」をご参照ください。