Log Service トリガーは定期的に Logstore より増分データを取得します。増分データにより、Function Compute でログ更新分の ETL(Extract Transform Load)がトリガーされます。
シナリオ
Log Service トリガーは、データクリーニングおよび ETL に適しています。下図のとおり、Log Service により、ログ収集、ETL、照会、分析を迅速に行うことができます。
下図のとおり、トリガーは送信先にデータを送信し、クラウド内にビッグデータサービス間のデータパイプラインを構築することができます。
説明:
- カラムベースのストレージ構築とアップロード
- フィールドの事前処理とアップロード
- カスタム化し、応答を保存します。
Log Service トリガーを設定
トリガー例
次の slsTrigger.yml は、Log Service トリガーの設定の雛形です。
triggerConfig:
sourceConfig:
project: "etl"
logstore: "etl-log"
jobConfig:
maxRetryTime: 3
triggerInterval: 60
functionParameter:
a: "b"
c: "d"
logConfig:
project: "ali-fc-test"
logstore: "test-store"
enable: true
トリガーパラメータ
sourceConfig
は設定パラメータのデータソースで、次の属性があります。Logstore
:データソース(Logstore)の名前。トリガーは定期的にここで指定された Logstore よりデータを取得し、ETL 処理のために Function Compute にデータを送信します。作成後に本パラメータを変更することはできません。
jobConfig
は、タスク設定パラメータで、次のプロパティがあります。triggerInterval
:Log Service よりトリガーされた関数実行の間隔。値は、3〜600(秒単位)。たとえば、triggerInterval: 60
は本関数は、60 秒ごとに直近 60 秒以内に各シャードに書き込まれたデータの位置を取得します。増分データにより、本関数はトリガーされます。Logstore シャードのトラフィック量が 1 MB/秒以上と多いようであれば、トリガー間隔を短くすることを推奨します。そうすると、適当なサイズのデータを関数は処理することになります。maxRetryTime
:各トリガーの最大再試行数。値は 0 〜 100。Log Service により、関数実行がトリガーされたときに、許可が足りない、ネットワークエラー、関数実行の例外といったエラーが発生することがあります。最大再試行数に達しても関数実行に失敗することがあります。このような場合には、Log Service はトリガー間隔のあとに関数を再度実行します。サービスに対しての影響は関数コードのロジックにもよります。
functionParameter
:イベントパラメータは .yml ファイルより本パラメータを直接使用します。関数の使用方法はその関数のロジックによります。関数によって関数の設定は異なります。手順にしたがってデフォルトの関数テンプレートのパラメータが必要な場合があります。初期値は、空({})です。logConfig
は、トリガーのログ設定であり、次のプロパティがあります。project
:Log Service プロジェクトの名前logstore
:ログファイルを格納する Logstore 名
enable
でトリガーを有効にします。値は、true または false。
イベント形式
{
"parameter":{
"a":"b",
"c":"d"
},
"source":{
"endpoint":"http://cn-shanghai-intranet.log.aliyuncs.com",
"projectName":"vangie-fc-test",
"logstoreName":"fc-test",
"shardId":0,
"beginCursor":"MTUyMzI2NzI5NDY1NjI4MzgzNg==",
"endCursor":"MTUyMzI2NzI5NDY1NjI4MzgzNw=="
},
"jobName":"05c79f637c6b46eaa85911cae032cf47551af7bb",
"taskId":"d22697c0-2a41-4d35-b27c-dccec8856768",
"cursorTime":1523323454
}
parameter
:トリガーに設定する関数のパラメータsource
:Function Compute が Log Service より読み込むログブロックの情報endpoint
:Log Service プロジェクトのリージョンprojectName
:プロジェクト名logstoreName
:Logstore 名shardId
:Logstore 内の特定のシャードbeginCursor
:トリガー関数のシャード読み込み開始位置endCursor
:トリガー関数のシャード読み込み終了位置
jobName
:Log Service 内の ETL ジョブ名。Function Compute 内の Log Service トリガーは、Log Service の ETL ジョブに対応します。taskId
:指定された関数実行の識別子。この実行は ETL ジョブに対応します。cursorTime
:Log Service のバックエンドに送信される最新ログエントリの unix_timestamp。ログエントリを取得する際に関数はこの情報を読み込みます。
Log Service トリガーの作成
例 1. Function Compute コンソールを使用
Function Compute および Log Service は必ず同じリージョンにデプロイします。同じリージョンでないと、Log Service トリガーを設定する際に関数サービスは Log Service を探し出すことができません。詳細は、「リージョンとゾーン」をご参照ください。
Alibaba Cloud コンソールにログインします。
Log Service コンソール にログインします。Logstore を 1 つ作成してログファイルおよびデータソースを処理します。また、Function Compute の生成するログファイルを格納する別の Logstore を作成します。詳細については、Log Service のトピック「準備」 をご参照ください。
Function Compute コンソール にログインし、サービスを作成します。表示される [サービスの作成] ダイアログボックスで、
リージョンを選択します。例では、「中国東部(上海)」リージョンを使用します。
[サービスの作成] をクリックします。
表示される [サービスの作成] ダイアログボックスで、サービス名を入力します。例では、サービス名を「log-com」とします。
[詳細設定] オプションを有効にします。
[ログ設定] で利用可能なログプロジェクトおよび Logstore を設定します。
[ロール設定] の [ロール操作] ドロップダウンリストより「新しいロールを作成」を選択します。[システムポリシー] ドロップダウンリストより、
AliyunLogFullAccess
およびAliyunLogReadOnlyAccess
を選択します。[承認]、[OK] の順にクリックし、アクションを確認します。
左のナビゲーションペインより、作成した新規サービスを選択します。
[関数の作成] をクリックして [関数の作成] ページに移動します。
- [すべて選択] をクリックし、ドロップダウンリストより「python2.7」 を選択します。例では、Python コードを実行します。
[空の関数] の [選択] をクリックします。
注意:関数の作成時または作成後にトリガーを作成します。トリガーを作成したら設定します。詳細は、「基本操作」を参照。
[トリガータイプ] ドロップダウンリストより [Log Service (Log)] を選択します。[トリガー名]、[ログプロジェクト名]、[トリガーログ]、[呼び出し間隔]、[再試行回数]、および [関数設定] を設定します。例では、トリガーを次のように設定します。
関数コードのイベントパラメータに応じて [関数設定] 欄を設定します。例では、[関数設定] を次のように設定します。
※トリガーにAliyunLogETLRole
ポリシーを付ける必要があります。{
"source":{
"endpoint": "http://cn-shanghai-intranet.log.aliyuncs.com"
},
"target": {
"endpoint": "http://cn-shanghai-intranet.log.aliyuncs.com",
"projectName": "etl-test",
"logstoreName": "nginx_access_log_rep"
}
}
[サービス名]、[関数名]、[関数の説明]、[ランタイム]、および [ランタイム環境]のパラメータを設定します。
- [次へ] をクリックします。
- すべての設定が正しいことを確認の上、[作成] をクリックします。
例 2. Pyhton SDK を使用
例では、fc-python-sdk を使用します。
import fc2
client = fc2.Client(
endpoint = '<Your Endpoint>',
accessKeyID = '<Your AccessKeyID>',
accessKeySecret = '<Your AccessKeySecret>')
service_name = '<service_name>'
function_name = '<function_name>'
trigger_name = '<trigger_name>'
# ログトリガーを作成
log_trigger_config = {
'sourceConfig': {
'logstore': 'log_store_source'
},
'jobConfig': {
'triggerInterval': 60,
'maxRetryTime': 10
},
'functionParameter': {},
'logConfig': {
'project': 'log_project',
'logstore': 'log_store'
},
'enable': False
}
source_arn = 'acs:log:cn-shanghai:12345678:project/log_project'
invocation_role = 'acs:ram::12345678:role/aliyunlogetlrole'
client.create_trigger('service_name', 'function_name', 'trigger_name', 'oss',
log_trigger_config, source_arn, invocation_role)
参照
Log Service トリガーの使用例「デモ概要」