AWS Lambda 関数を呼び出すように Amazon CloudWatch サブスクリプションフィルターを構成したいと考えています。
簡単な説明
Amazon CloudWatch Logs では、Lambda 関数にログデータを送信するサブスクリプションフィルターを使用できます。CloudWatch Logs のサブスクリプションフィルターは base64 でエンコードされ、GZIP 形式で圧縮されています。
Lambda 関数を作成する前に、生成されるログデータの容量を計算します。必ず、ボリューム容量を管理できる関数を作成してください。関数に十分なボリュームがない場合、ログストリームはスロットリングされます。詳細については、「Lambda のクォータ」をご参照ください。
注: CloudWatch Logs データを大量にストリーミングすると、使用料金が高くなる可能性があります。AWS Budgets を使用して支出と使用量を追跡するのがベストプラクティスです。手順については、「AWS Budgets を使用して支出と使用量を追跡するにはどうすればよいですか?」を参照してください。
解決方法
AWS Lambda 関数にログデータを送信する CloudWatch Logs サブスクリプションフィルターを作成します。
注: AWS コマンドラインインターフェイス (AWS CLI) のコマンド実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
1. Lambda 関数を呼び出すためのアクセス許可を CloudWatch Logs に付与するには、次のような AWS CLI コマンドの add-permission を実行します。
aws lambda add-permission \
--function-name "helloworld" \
--statement-id "helloworld" \
--principal "logs.amazonaws.com" \
--action "lambda:InvokeFunction" \
--source-arn "arn:aws:logs:region:123456789123:log-group:YourLogGroup:*" \
--source-account "123456789012"
重要:「helloworld」は Lambda 関数名に、「YourLogGroup」はロググループに、サンプルアカウント番号は自分のアカウントに置き換えます。
2. AWS CLI コマンドの put-subscription-filter を使用してサブスクリプションフィルターを作成し、キーワードを含むログイベントを送信します。次の例では、「ERROR」というキーワードが Lambda 関数に使用されています。
重要:「YourLogGroup」はロググループに、サンプルアカウント番号は自分のアカウントに置き換えます。
aws logs put-subscription-filter \
--log-group-name YourLogGroup \
--filter-name demo \
--filter-pattern "ERROR" \
--destination-arn arn:aws:lambda:region:123456789123:function:helloworld
CloudWatch ロググループ「YourLogGroup」は、次のようなキーワード「ERROR」を含むログイベントを受信すると、Lambda 関数を呼び出します。
{
"awslogs": {
"data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwWQRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpLwivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQDQiMdxRQEAAA=="
}
}
関連情報
フィルターとパターンの構文