0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

lambda 関数Aで例外が発生した場合、関数BをAWS SDKで実行する

Posted at

概要

  • lambda関数A(echo-error)のログに「error」という文字列が出力されたことをきっかけに、lambda関数B(hello-world)を実行する方法を簡単にまとめる。
  • 両lambda関数のランタイムはNode.js18とする。

方法

  1. 関数A(echo-error)の作成

    1. 下記の内容で関数を作成する。

      • 関数名: echo-error
      • ランタイム: Node.js 18.x
      • アーキテクチャ: x86_64
      • ロール: 「基本的なLambdaアクセス権限で新しいロールを作成」
    2. 下記のコードを記載する。

      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);
        }
      }
      
  2. 関数B(hello-world)の作成

    1. 下記の内容で関数を作成する。

      • 関数名: hello-world
      • ランタイム: Node.js 18.x
      • アーキテクチャ: x86_64
      • ロール: 「基本的なLambdaアクセス権限で新しいロールを作成」
    2. 下記のコードを記載する。

      export const handler = async(event) => {
          console.log('hello-world');
          // TODO implement
          const response = {
              statusCode: 200,
              body: JSON.stringify('Hello from Lambda!'),
          };
          return response;
      };
      
    3. 「hello-worldテスト」などを作成し、デプロイ後、テストして「hello-world」の文字列が出力されることを確認する。

  3. 関数AのIAMロールに権限追加

    1. 関数Aの画面を開く。

    2. 「設定」のタブをクリックする。

    3. 「アクセス権限」を開く。

    4. ロール名がリンクになっているのでクリックする。

    5. 「許可を追加」をクリックし、「インラインポリシーを作成」をクリックする。

    6. JSONで下記の内容を記載する。

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "関数BのARNの値"
          }
        ]
      }
      
    7. ポリシー名を「InvokeHelloWorldFuncion」とする。

実行

  1. 関数Aを実行すると関数Bも実行される。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?