Lambda Destinations を使ってみた
はじめに
立神です。
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 キューを作成します。
- AWS マネジメントコンソールで「SQS」を検索して開く
- 「キューを作成」をクリック
- 以下の設定で作成
- タイプ:標準
- 名前:任意の名前(今回は
lambda-success-queueとしました。) - その他はデフォルトのまま

- 「キューを作成」をクリック
SNS トピックの作成
次に、失敗時の送信先となる SNS トピックを作成します。
- AWS マネジメントコンソールで「SNS」を検索して開く
- 左メニューから「トピック」を選択
- 「トピックの作成」をクリック
- 以下の設定で作成
- タイプ:スタンダード
- 名前:任意の名前(今回は
lambda-failure-topicとしました。) - その他はデフォルトのまま

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

Lambda 関数の作成
- AWS マネジメントコンソールで「Lambda」を検索して開く
- 「関数の作成」をクリック
- 以下の設定で作成
- オプション:一から作成
- 関数名:任意の名前(今回は
test-destinations-functionとしました。) - ランタイム:Node.js 22.x
- アーキテクチャ:x86_64
- その他はデフォルトのまま

- 「関数の作成」をクリック
- 作成した関数を編集
以下のコードに置き換えます。このコードは 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 + ')');
}
};
- 左メニューから「Deploy」をクリック
IAM ロールに権限を追加
Lambda Destinations が SQS と SNS に送信できるよう、実行ロールに権限を追加します。
- 設定タブを開き、左メニューから「アクセス権限」をクリック
- 実行ロール名がリンクになっているので、それをクリック

- 許可ポリシーに以下を追加
- AmazonSQSFullAccess
- AmazonSNSFullAccess
Lambda Destinations の設定
Lambda 関数の画面に戻り、左のメニューから「送信先」をクリックします。
成功時の送信先を設定
- 「送信先を追加」をクリック
- 以下の設定で作成
- ソース:非同期呼び出し
- 条件:正常
- 送信先タイプ:SQS キュー
- 送信先:作成した SQS キュー (今回は
lambda-success-queue)
- 「保存」をクリック

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

動作確認
以上で設定は完了です。実際の動作を確認してみます。
AWS CLI または CloudShell を使用して非同期呼び出しを行います。今回は CloudShell を使用しました。
- AWS コンソール上部のツールバーで「>_」アイコンをクリック
- ブラウザ下部にターミナルが表示されるので、以下のコマンドを実行
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-function と ap-northeast-1 の部分は実際の環境に合わせて変更してください。
実行が正常に完了すると、"StatusCode": 202 が表示されます。
SQS キューの確認
成功時の結果が SQS に送信されているか確認します。
- 作成したキューを開き、「メッセージを送受信」をクリック
- 「メッセージをポーリング」をクリック
- 受信したメッセージを確認し、以下のような内容が表示されていれば成功
{
"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 通知を確認
失敗時の結果がメールで届いているか確認します。
- 登録したメールアドレスの送受信を行い、新着メールを確認する
- 以下のようなメールが届いていれば成功

まとめ
今回は Lambda Destinations を使って、Lambda 関数の非同期実行結果を自動的に別のサービスに送信する仕組みを構築してみました。
従来はコード内で SDK を使って実装していた後続処理を、設定だけで実現できるのは想像以上に便利でした。特に、成功時と失敗時で異なる送信先を指定できる点は、エラーハンドリングの実装を大幅にシンプルにしてくれます。
実際に動作を確認してみると、Amazon SQS や Amazon SNS に送信されるペイロードには、リクエスト情報・レスポンス情報・エラー情報が含まれており、デバッグやログ分析に非常に有用だと感じました。
本ブログが誰かの参考になれば幸いです。
参考資料
Lambda 関数を非同期的に呼び出す - AWS Lambda
Lambda での再試行動作について - AWS Lambda
AWS Lambda 関数を使用するためのベストプラクティス - AWS Lambda
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。






