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'
関連情報
AWS Lambda 関数を Amazon SNS から呼び出す