Lambda Destinations を使ってみた

Lambda Destinations を使ってみた

2025.11.19

はじめに

立神です。
AWS Lambda の非同期実行において、処理の成功・失敗時の後続処理をシンプルに実装できる Lambda Destinations を実際に使ってみました。

Lambda Destinations とは

Lambda Destinations は、Lambda 関数の非同期実行結果に応じて、後続の処理を自動的に実行できる機能です。
コードを書かずに成功時・失敗時の処理を分岐させることができ、それぞれ異なる送信先を指定することが可能です。

主な送信先

  • Lambda 関数
  • Amazon SQS(Amazon Simple Queue Service)
  • Amazon SNS(Amazon Simple Notification Service)
  • Amazon EventBridge

今回は Amazon SQS と Amazon SNS に送信します。

前提条件

本記事を実施するには、以下が必要です:

  • AWS マネジメントコンソールへのアクセス権限
  • 以下のサービスを使用する権限:
    • AWS Lambda
    • Amazon SQS
    • Amazon SNS
    • IAM
  • AWS CloudShell または AWS CLI の使用環境

やってみた

今回は以下の構成で実装します。

  • メインの Lambda 関数:ランダムに成功または失敗する処理
  • 成功時の送信先:SQS キュー
  • 失敗時の送信先:SNS トピック(メール通知)

SQS キューの作成

まず、成功時の送信先となる SQS キューを作成します。

  1. AWS マネジメントコンソールで「SQS」を検索して開く
  2. 「キューを作成」をクリック
  3. 以下の設定で作成
  • タイプ:標準
  • 名前:任意の名前(今回は lambda-success-queue としました。)
  • その他はデフォルトのまま
    queue-create.png
  1. 「キューを作成」をクリック

SNS トピックの作成

次に、失敗時の送信先となる SNS トピックを作成します。

  1. AWS マネジメントコンソールで「SNS」を検索して開く
  2. 左メニューから「トピック」を選択
  3. 「トピックの作成」をクリック
  4. 以下の設定で作成
  • タイプ:スタンダード
  • 名前:任意の名前(今回は lambda-failure-topic としました。)
  • その他はデフォルトのまま
    topic-create.png
  1. 「トピックの作成」をクリック

メール通知の設定

トピック作成後、失敗通知を受け取るためのメールアドレスを登録します。

  1. 作成したトピックの詳細画面で「サブスクリプションの作成」をクリック
  2. 以下の設定で作成
  • プロトコル:E メール
  • エンドポイント:通知を受け取るメールアドレス
  1. 「サブスクリプションの作成」をクリック
  2. エンドポイントで入力したメールアドレスに確認メールが届くので、「Confirm subscription」 リンクをクリック
    以下のようなページが表示されれば、サブスクリプションの確認は完了です。
    subscription-confirmed.png

Lambda 関数の作成

  1. AWS マネジメントコンソールで「Lambda」を検索して開く
  2. 「関数の作成」をクリック
  3. 以下の設定で作成
  • オプション:一から作成
  • 関数名:任意の名前(今回は test-destinations-function としました。)
  • ランタイム:Node.js 22.x
  • アーキテクチャ:x86_64
  • その他はデフォルトのまま
    alt text
  1. 「関数の作成」をクリック
  2. 作成した関数を編集
    以下のコードに置き換えます。このコードは 0 〜 1 のランダムな値を生成し、0.5 より大きければ成功、小さければエラーをスローして失敗します。
export const handler = async (event) => {
  console.log('Received event:', JSON.stringify(event, null, 2));
  
  // ランダムに成功または失敗を決定
  const random = Math.random();
  console.log('Random value:', random);
  
  if (random > 0.5) {
      // 成功
      const response = {
          statusCode: 200,
          body: JSON.stringify({
              message: '処理が成功しました',
              timestamp: new Date().toISOString(),
              randomValue: random
          })
      };
      console.log('Success response:', response);
      return response;
  } else {
      // 失敗
      console.log('Throwing error...');
      throw new Error('処理が失敗しました(ランダム値: ' + random + ')');
  }
};
  1. 左メニューから「Deploy」をクリック

IAM ロールに権限を追加

Lambda Destinations が SQS と SNS に送信できるよう、実行ロールに権限を追加します。

  1. 設定タブを開き、左メニューから「アクセス権限」をクリック
  2. 実行ロール名がリンクになっているので、それをクリック
    lambda-config.png
  3. 許可ポリシーに以下を追加
  • AmazonSQSFullAccess
  • AmazonSNSFullAccess

Lambda Destinations の設定

Lambda 関数の画面に戻り、左のメニューから「送信先」をクリックします。

成功時の送信先を設定

  1. 「送信先を追加」をクリック
  2. 以下の設定で作成
  • ソース:非同期呼び出し
  • 条件:正常
  • 送信先タイプ:SQS キュー
  • 送信先:作成した SQS キュー (今回は lambda-success-queue )
  1. 「保存」をクリック
    送信先追加.png

失敗時の送信先を設定

  1. 再度「送信先を追加」をクリック
  2. 以下の設定で作成
  • ソース:非同期呼び出し
  • 条件:失敗時
  • 送信先タイプ:SNS トピック
  • 送信先:作成した SNS トピック (今回は lambda-failure-topic )
  1. 「保存」をクリック
    送信先追加-2.png

動作確認

以上で設定は完了です。実際の動作を確認してみます。
AWS CLI または CloudShell を使用して非同期呼び出しを行います。今回は CloudShell を使用しました。

  1. AWS コンソール上部のツールバーで「>_」アイコンをクリック
  2. ブラウザ下部にターミナルが表示されるので、以下のコマンドを実行
for i in {1..5}; do
  aws lambda invoke \
    --function-name test-destinations-function \
    --invocation-type Event \
    --region ap-northeast-1 \
    response.json
  echo "実行 $i 完了"
  sleep 2
done

test-destinations-functionap-northeast-1 の部分は実際の環境に合わせて変更してください。
実行が正常に完了すると、"StatusCode": 202 が表示されます。

SQS キューの確認

成功時の結果が SQS に送信されているか確認します。

  1. 作成したキューを開き、「メッセージを送受信」をクリック
  2. 「メッセージをポーリング」をクリック
  3. 受信したメッセージを確認し、以下のような内容が表示されていれば成功
{
  "version": "1.0",
  "timestamp": "2025-11-14T07:29:08.566Z",
  "requestContext": {
    "requestId": "546a021c-9d69-45cd-9507-9cb76ff98360",
    "functionArn": "arn:aws:lambda:ap-northeast-1:...:function:test-destinations-function:$LATEST",
    "condition": "Success",
    "approximateInvokeCount": 1
  },
  "requestPayload": {},
  "responseContext": {
    "statusCode": 200,
    "executedVersion": "$LATEST"
  },
  "responsePayload": {
    "statusCode": 200,
    "body": "{\"message\":\"処理が成功しました\",\"timestamp\":\"2025-11-14T07:29:08.411Z\",\"randomValue\":0.764353739137491}"
  }
}

SNS 通知を確認

失敗時の結果がメールで届いているか確認します。

  1. 登録したメールアドレスの送受信を行い、新着メールを確認する
  2. 以下のようなメールが届いていれば成功
    failure-mail.png

まとめ

今回は Lambda Destinations を使って、Lambda 関数の非同期実行結果を自動的に別のサービスに送信する仕組みを構築してみました。
従来はコード内で SDK を使って実装していた後続処理を、設定だけで実現できるのは想像以上に便利でした。特に、成功時と失敗時で異なる送信先を指定できる点は、エラーハンドリングの実装を大幅にシンプルにしてくれます。
実際に動作を確認してみると、Amazon SQS や Amazon SNS に送信されるペイロードには、リクエスト情報・レスポンス情報・エラー情報が含まれており、デバッグやログ分析に非常に有用だと感じました。
本ブログが誰かの参考になれば幸いです。

参考資料

Lambda 関数を非同期的に呼び出す - AWS Lambda
Lambda での再試行動作について - AWS Lambda
AWS Lambda 関数を使用するためのベストプラクティス - AWS Lambda

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。

この記事をシェアする

FacebookHatena blogX

関連記事