同じアカウントで Lambda 関数を Amazon SNS のトピックにサブスクライブするにはどうすればよいですか?

最終更新日: 2021 年 4 月 22 日

AWS Lambda 関数を AWS アカウントの Amazon Simple Notification Service (Amazon SNS) トピックにサブスクライブしたいと考えています。どうすればよいですか?

解決方法

注: この記事の説明は、チュートリアル: Amazon Simple Notification Service で AWS Lambda を使用するの手順に従います。ただし、この記事では、同じアカウントのセットアップ手順について説明します。前提条件とクロスアカウントのセットアップ手順については、チュートリアルをご参照ください。

1.    Amazon SNS トピックを作成するには、以下のコマンドを実行します。

注: lambda-same-account をトピックに使用する名前に置き換えてください。

$ aws sns create-topic --name lambda-same-account

コマンド出力で返されるトピックの Amazon リソースネーム (ARN) を書き留めます。後で必要になります。

2.    AWS リソースにアクセスするための Lambda の実行ロールを作成します。ロールの ARN を書き留めます。後で必要になります。

3.    デプロイパッケージを作成します。(チュートリアルのステップ 1 と 2 に従います)。

4.    次のコマンドを実行して、Lambda 関数を作成します。

注: sns-same-account を関数に必要な名前に置き換えます。arn:aws:iam::123456789012:role/service-role/lambda-sns-role を実行ロールの ARN に置き換えます。

$ aws lambda create-function --function-name sns-same-account \
--zip-file fileb://function.zip --handler index.handler --runtime nodejs14.x \
--role arn:aws:iam::123456789012:role/service-role/lambda-sns-role \
--timeout 60

コマンド出力で返される関数の ARN を書き留めます。これは次のステップで必要になります。

5.    以下のコマンドを実行して、Amazon SNS トピック用に Lambda アクセス権限を追加します。

注: sns-same-account を関数に付けた名前に置き換えます。arn:aws:sns:us-east-1:123456789012:lambda-same-account をトピックの ARN に置き換えます。

$ aws lambda add-permission --function-name sns-same-account \
--source-arn arn:aws:sns:us-east-1:123456789012:lambda-same-account \
--statement-id sns-same-account --action "lambda:InvokeFunction" \
--principal sns.amazonaws.com

6.    以下のコマンドを実行して、Lambda 関数を Amazon SNS トピックにサブスクライブします。

注: arn:aws:sns:us-east-1:123456789012:lambda-same-account をトピックの ARN に置き換えます。arn:aws:lambda:us-east-1:123456789012:function:sns-same-account を関数の ARN に置き換えます。

$ aws sns subscribe --protocol lambda \
--topic-arn arn:aws:sns:us-east-1:123456789012:lambda-same-account \
--notification-endpoint arn:aws:lambda:us-east-1:123456789012:function:sns-same-account

7.    サンプルメッセージを発行してサブスクリプションをテストするには、次のコマンドを実行します。

注: arn:aws:sns:us-east-1:123456789012:lambda-same-account をトピックの ARN に置き換えます。

$ aws sns publish --message "Hello World" --subject Test \
--topic-arn arn:aws:sns:us-east-1:123456789012:lambda-same-account

コマンド出力はメッセージ ID を返し、メッセージがトピックに発行されたことを確認します。

8.    (オプション) 以下のコマンドを実行して、Amazon CloudWatch Logs で Lambda 関数が呼び出されたことを確認します。
注: sns-same-account を関数の名前に置き換えます。

$ aws logs describe-log-streams --log-group-name /aws/lambda/sns-same-account

返された logStreamName を書き留めます。その後、次のコマンドを使用してログを取得します。
注: sns-same-account を関数の名前に置き換え、logStreamName を describe-log-streams によって返された logStreamName に置き換えます。

$ aws logs get-log-events --log-group-name /aws/lambda/sns-same-account \
--log-stream-name 'logStreamName'

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?