概要
- lambda関数A(echo-error)のログに「error」という文字列が出力されたことをきっかけに、lambda関数B(hello-world)を実行する方法を簡単にまとめる。
- 両lambda関数のランタイムはNode.js18とする。
方法
-
関数A(echo-error)の作成
-
下記の内容で関数を作成する。
- 関数名: echo-error
- ランタイム: Node.js 18.x
- アーキテクチャ: x86_64
- ロール: 「基本的なLambdaアクセス権限で新しいロールを作成」
-
下記のコードを記載する。
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); } }
-
-
関数B(hello-world)の作成
-
下記の内容で関数を作成する。
- 関数名: hello-world
- ランタイム: Node.js 18.x
- アーキテクチャ: x86_64
- ロール: 「基本的なLambdaアクセス権限で新しいロールを作成」
-
下記のコードを記載する。
export const handler = async(event) => { console.log('hello-world'); // TODO implement const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
-
「hello-worldテスト」などを作成し、デプロイ後、テストして「hello-world」の文字列が出力されることを確認する。
-
-
関数AのIAMロールに権限追加
-
関数Aの画面を開く。
-
「設定」のタブをクリックする。
-
「アクセス権限」を開く。
-
ロール名がリンクになっているのでクリックする。
-
「許可を追加」をクリックし、「インラインポリシーを作成」をクリックする。
-
JSONで下記の内容を記載する。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "関数BのARNの値" } ] }
-
ポリシー名を「InvokeHelloWorldFuncion」とする。
-
実行
- 関数Aを実行すると関数Bも実行される。
参考文献