[アップデート] Amazon SNS で保留中のサブスクリプションが自動削除されるまでの時間が 48 時間に変更されました

[アップデート] Amazon SNS で保留中のサブスクリプションが自動削除されるまでの時間が 48 時間に変更されました

Clock Icon2023.05.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

Amazon SNS では作成したトピックに対してサブスクライブすることで、対象のエンドポイントへ通知を送信することが出来ます。
一部のエンドポイントタイプはサブスクライブを作成した後に、通知先側で確認作業を行うまで未完了という扱いで通知をまだ送信出来ない状態となっています。

従来はこの保留中サブスクリプションは 72 時間経過後に自動削除される仕様でした。

これが、先日のアップデートで 48 時間で削除されるように変更されました。

サブスクリプションを作成

5 月 11 日の 7 時ごろにいくつかサブスクリプションを作成しました。
FIFO とスタンダードのトピックを作成します。

スタンダードでは様々なエンドポイントターゲットを指定することが出来ます。
そのうち、確認が必要なエンドポイントは EMAIL と HTTP/HTTPS です。それ以外は確認は不要です。

なお、FIFO については SQS のみエンドポイント指定が可能なので、今回のアップデートはそもそも FIFO トピックの場合は関係ありません。

確認

サブスクライブから 24 時間後に確認してみるとまだ保留中の状態でした。

サブスクライブから 48 時間後に確認してみると、保留中のものが削除されていることが確認出来ました。

ちなみに、その付近の CloudTrail イベントなどを探ってみましたが、削除されるイベントのようなものは発生していませんでした。
EventBridge で保留状態の終了を拾って通知するようなことをしたいを前に考えたのですが、イベントベースだとちょっと難しそうですね。ポーリングすれば出来るかもしれない。

手動キャンセル出来るのか確認してみた

やはり宛先間違いなどを手動削除は難しいのでしょうか。48 時間待つしか無いのでしょうか。
気になったので試してみました。

まず、サブスクリプションを削除するためにはunsubscribeコマンドを使うことが出来ます。
そのためにはサブスクリプションの ARN が必要なのですが、保留中サブスクリプションの場合は次のように ARN を取得することが出来ません。

% aws sns list-subscriptions-by-topic --topic-arn arn:aws:sns:ap-northeast-1:123456789012:hoge0511standard
{
    "Subscriptions": [
        {
            "SubscriptionArn": "PendingConfirmation",
            "Owner": "123456789012",
            "Protocol": "email",
            "Endpoint": "[email protected]",
            "TopicArn": "arn:aws:sns:ap-northeast-1:123456789012:hoge0511standard"
        },
        {
            "SubscriptionArn": "arn:aws:sns:ap-northeast-1:123456789012:hoge0511standard:71dde68b-eff0-49e3-b511-bb5b8650b57c",
            "Owner": "123456789012",
            "Protocol": "sms",
            "Endpoint": "+811111111111",
            "TopicArn": "arn:aws:sns:ap-northeast-1:123456789012:hoge0511standard"
        }
    ]
}

ただし、API からサブスクライブを作成する場合は、作成時に ARN を取得するオプションを実は使うことが出来ます。

% cat subscript.json
{
    "TopicArn": "arn:aws:sns:ap-northeast-1:123456789012:hoge0511standard",
    "Protocol": "email",
    "Endpoint": "[email protected]",
    "ReturnSubscriptionArn": true
}
% aws sns subscribe --cli-input-json file://subscribe.json
{
    "SubscriptionArn": "arn:aws:sns:ap-northeast-1:123456789012:hoge0511standard:19a4ab98-de25-4660-b317-a0dccd2d2f14"
}

「これは、API 経由でこのオプションで ARN を取得すれば保留期間終了を待たずにキャンセル出来るのでは」と思って試してみました。
しかし、結果としては次のように保留中の Unsubscribe はサポートされていないことがわかりました。

% aws sns unsubscribe --subscription-arn arn:aws:sns:ap-northeast-1:123456789012:hoge0511standard:19a4ab98-de25-4660-b317-a0dccd2d2f14

An error occurred (InvalidParameter) when calling the Unsubscribe operation: Invalid parameter: SubscriptionArn Reason: Cannot unsubscribe a subscription that is pending confirmation

さいごに

本日は Amazon SNS が保留中のサブスクリプションを自動削除期間が短くなったので、実際にどのくらいで削除されるのかを確認してみました。
私が確認した際には 48 時間ちょうどで削除されていました。

また、これを機に手動削除出来るのかも調査してみましたが、結果としては Unsubscribe API が、保留中サブスクリプションの制御を行っているので、不可能であると確認できました。

今回のアップデートで誤ったエンドポイントを指定した場合に従来 72 時間残り続けていたものを、より高速(48 時間)で削除してくれるようになったと考えることが出来ます。

一方で、関係者のメールアドレスなどを通知先に設定後に確認依頼を行うことがあると思うのですが、その猶予期間が 48 時間に短くなったという側面もあります。
この時間は延長させることは出来ないので、48 時間になったという点を認識しておきましょう。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.