概要
- 関数Aで
error
という文字列がログに出力されたら、関数BをCloudWatchのサブスクリプションフィルターを用いて実行する方法を簡単にまとめる。
方法
- 関数Aと関数Bは下記記事で使用した関数A(echo-error)と関数B(hello-world)を使用する。関数Aに若干の修正を加える。関数AのIAMロールに付与したカスタマーポリシーなどはそのままにしてある。
-
関数A(echo-error)を下記の様に修正する。(9行目をコメントアウトするだけ)
import { LambdaClient, InvokeCommand } from '@aws-sdk/client-lambda'; const lambdaClient = new LambdaClient({ region: 'ap-northeast-1' }); // 適切なリージョンを設定 export async function handler(event) { try { // 何らかの処理 console.log('error'); // await invokeFunctionB(); // 本当は例外のときに関数Bを呼び出すけど、動作確認のために常に呼び出す } catch (error) { console.error('error'); // 関数Bを呼び出す await invokeFunctionB(); } } async function invokeFunctionB() { const params = { FunctionName: '関数BのARN名', InvocationType: 'Event', // 非同期呼び出し Payload: JSON.stringify({}), // 関数Bに渡す引数を設定する事もできる }; try { const command = new InvokeCommand(params); const response = await lambdaClient.send(command); console.log('Function B invoked:', response); } catch (error) { console.error('Error invoking Function B:', error); } }
-
一旦、関数Aを実行して、関数Bが実行されないことを確認する。
-
CloudWatchで関数Aのロググループを表示する。
-
「サブスクリプションフィルター」を開く。
-
「作成」をクリックし「Lambda サブスクリプションフィルター」をクリックする。
-
下記のようにサブスクリプションフィルターを設定する 。
- Lambda関数:関数B(hello-world)
- ログ形式:その他
- サブスクリプションフィルターのパターン:
error
- サブスクリプションフィルター名:
error-chatch-subscription-filter
-
サブスクリプションフィルターを作成する 。
-
関数Aを実行するとサブスクリプションフィルターを通じて関数Bが実行されるようになる。