質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

1577閲覧

lambdaでAPNsに大量件数プッシュ通知する場合の接続管理について

aizak

総合スコア0

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2021/07/28 12:08

編集2021/07/28 12:37

ざっくりとした質問ですが、Amazon SNS でのAPNsへのプッシュ通知をlambdaで実装した場合、大量件数の通知をする場合にAPNsからDoS攻撃と判定される事はあり得ますか?

下記制約等です

  1. lambdaで実装されるのは、以下のようなサンプルの実装とします
  2. 1つのlambdaの起動につき、1回の処理は1s~1mの間で終了するとします
  3. 1つのlambdaで通知するエンドポイントの数は500~1000とします
  4. lambdaは常に100~1000の間で同時起動されます
  5. 2,3の処理が、1日に2,30以上繰り返されます

以下、awsからSNSでのプッシュ通知のNode.jsのサンプルです。
これにデバイストークン取得部分とfor文での繰り返し処理が追加されたような感じで考えていただけると。

nodejs:

1https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/sns-examples-publishing-messages.html 2 3// Load the AWS SDK for Node.js 4var AWS = require('aws-sdk'); 5// Set region 6AWS.config.update({region: 'REGION'}); 7 8// Create publish parameters 9var params = { 10 Message: 'MESSAGE_TEXT', /* required */ 11 TopicArn: 'TOPIC_ARN' 12}; 13 14// Create promise and SNS service object 15var publishTextPromise = new AWS.SNS({apiVersion: '2010-03-31'}).publish(params).promise(); 16 17// Handle promise's fulfilled/rejected states 18publishTextPromise.then( 19 function(data) { 20 console.log(`Message ${params.Message} sent to the topic ${params.TopicArn}`); 21 console.log("MessageID is " + data.MessageId); 22 }).catch( 23 function(err) { 24 console.error(err, err.stack); 25 });

以下、Apple公式のAPNSのベストプラクティス

https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html 接続を管理するためのベストプラクティス 複数の通知にわたってAPNとの接続を開いたままにします。接続を繰り返し開閉しないでください。APNは、迅速な接続と切断をサービス拒否攻撃として扱います。長期間アイドル状態になることがわかっている場合を除いて、接続を開いたままにしておく必要があります。たとえば、ユーザーに通知を1日1回だけ送信する場合は、毎日新しい接続を使用することをお勧めします。 送信するプッシュリクエストごとに新しいプロバイダー認証トークンを生成しないでください。トークンを取得したら、トークンの有効期間(1時間)の間、すべてのプッシュリクエストに引き続きトークンを使用します。 APNサーバーへの複数の接続を確立して、パフォーマンスを向上させることができます。多数のリモート通知を送信する場合は、それらを複数のサーバーエンドポイントへの接続に分散します。これにより、単一の接続を使用する場合と比較して、リモート通知をより速く送信できるようになり、APNがより速く配信できるようになるため、パフォーマンスが向上します。 プロバイダー証明書が取り消された場合、またはプロバイダートークンの署名に使用しているキーが取り消された場合は、APNへの既存の接続をすべて閉じてから、新しい接続を開きます。 HTTP / 2PINGフレームを使用して、接続の状態を確認できます。

SNS詳しくなく、
複数の通知にわたってAPNとの接続を開いたままにします。接続を繰り返し開閉しないでください。という部分が、lambda+SNSの構成で引っかからないのかどうかがいまいちよくわかっておらず、誰か詳しい方いたら教えてください。
何か足りないところあれば補足します。
よろしくお願いします。

補足
APNsの接続管理の問題でlambdaの使用を取りやめた事例1つだけ見つけました
https://www.schibsted.pl/blog/how-we-deliver-millions-of-push-notifications-in-10-seconds/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2021/07/28 13:49

マネージドサービスの中身の話なので双方のサポートに問い合わせたほうが早いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問