FIFO トピック所有者の Amazon SNS メッセージアーカイブ - Amazon Simple Notification Service

FIFO トピック所有者の Amazon SNS メッセージアーカイブ

メッセージのアーカイブでは、トピックに発行されたすべてのメッセージの 1 つのコピーをアーカイブできます。トピックのメッセージアーカイブポリシーを有効にすることで、発行されたメッセージをトピック内に保存できます。これにより、そのトピックにリンクされているすべてのサブスクリプションのメッセージアーカイブが有効になります。メッセージのアーカイブ期間は、最短で 1 日、最長で 365 日です。

アーカイブポリシーを設定すると、追加料金がかかります。料金については、「Amazon SNS 料金」を参照してください。

AWS Management Console を使用するメッセージアーカイブポリシーを作成する

AWS Management Console を使用する新しいメッセージアーカイブポリシーを作成するには、このオプションを使用します。

  1. Amazon SNS コンソールにサインインします。

  2. トピックを選択するか、新しいトピックを作成できます。トピックの作成の詳細については、「Amazon SNS トピックを作成する」を参照してください。

    注記

    Amazon SNS メッセージのアーカイブとリプレイは、Application-to-Application (A2A) FIFO トピックでのみ使用できます。

  3. [トピックの編集] ページで [アーカイブポリシー] セクションを展開します。

  4. アーカイブポリシー機能を有効にし、トピック内でメッセージを保存する日数を入力します。

  5. [Save changes] (変更の保存) をクリックします。

メッセージアーカイブトピックポリシーを表示、編集、非アクティブ化するには

  • トピックの詳細ページでは、設定されている日数などのアーカイブポリシーのステータスがリテンションポリシーに表示されます。[アーカイブポリシー] タブを選択すると、以下のメッセージアーカイブの情報が表示されます。

    • ステータス — アーカイブポリシーが適用されると、アーカイブとリプレイのステータスは [有効] と表示されます。アーカイブポリシーが空の JSON オブジェクトに設定されている場合は、アーカイブとリプレイのステータスは [無効] と表示されます。

    • メッセージ保持期間 — 指定されたメッセージ保持日数。

    • アーカイブ開始日 — サブスクライバーがメッセージを再生できる日付。

    • JSON のプレビュー — アーカイブポリシーの JSON プレビュー。

  • (オプション) アーカイブポリシーを編集するには、トピックの [概要] ページに移動して [編集] を選択します。

  • (オプション) アーカイブポリシーを無効化するには、トピックの [概要] ページに移動して [編集] を選択します。アーカイブポリシーを無効化し、[変更の保存] を選択します。

  • (オプション) アーカイブポリシーを含むトピックを削除するには、前に説明したように、アーカイブポリシーを無効化する必要があります。

    重要

    メッセージが誤って削除されるのを防ぐため、メッセージアーカイブポリシーが有効なトピックは削除できません。トピックを削除する前に、トピックのメッセージアーカイブポリシーを無効化する必要があります。メッセージアーカイブポリシーを無効にすると、Amazon SNS ではアーカイブされたすべてのメッセージが削除されます。トピックを削除すると、サブスクリプションは削除され、転送中のメッセージが配信されない場合があります。

API を使用するメッセージアーカイブポリシーを作成する

API を使用するメッセージアーカイブポリシーを作成するには、属性 ArchivePolicy をトピックに追加する必要があります。ArchivePolicy は、API アクション CreateTopicSetTopicAttributes を使用して設定できます。 ArchivePolicy には Amazon SNS がメッセージを保持する日数を表す単一の値 MessageRetentionPeriod が含まれています。トピックのメッセージアーカイブを有効にするには、MessageRetentionPeriod を 0 より大きい整数値に設定します。たとえば、メッセージをアーカイブに 30 日間保持するには、ArchivePolicy を次のように設定します。

{ "ArchivePolicy": { "MessageRetentionPeriod": "30" } }

トピックのメッセージアーカイブを無効にしてアーカイブを消去するには、次のように ArchivePolicy の設定を解除します。

{}

SDK を使用するメッセージアーカイブポリシーを作成する

AWS SDK を使用するには、認証情報を使用して設定する必要があります。詳細については、『AWS SDK とツールのリファレンスガイド』の「config ファイルおよび credentials ファイル」を参照してください。

次のコード例は、Amazon SNS トピック用にそのトピックに発行されたすべてのメッセージを 30 日間保持するように ArchivePolicy を設定する方法を示しています。

// Specify the ARN of the Amazon SNS topic to set the ArchivePolicy for. String topicArn = "arn:aws:sns:us-east-2:123456789012:MyArchiveTopic.fifo"; // Set the MessageRetentionPeriod to 30 days for the ArchivePolicy. String archivePolicy = "{\"MessageRetentionPeriod\":\"30\"}"; // Set the ArchivePolicy for the Amazon SNS topic SetTopicAttributesRequest request = new SetTopicAttributesRequest() .withTopicArn(topicArn) .withAttributeName("ArchivePolicy") .withAttributeValue(archivePolicy); sns.setTopicAttributes(request);

AWS CloudFormation を使用するメッセージアーカイブポリシーを作成する

AWS CloudFormation を使用するアーカイブポリシーを作成するには、『AWS CloudFormation ユーザーガイド』の 「AWS::SNS::Topic」を参照してください。

暗号化されたアーカイブにアクセス権を付与する

暗号化されたトピックからのメッセージのリプレイをサブスクライバーが開始する前に、次の手順を完了する必要があります。過去のメッセージがリプレイされるため、Amazon SNS では、アーカイブ内のメッセージの暗号化に使用された KMS キーへの Decrypt アクセス権がプロビジョニングされている必要があります。

  1. KMS キーを使用してメッセージを暗号化し、トピック内に保存する場合、キーポリシーを使用してこれらのメッセージを復号化する機能を Amazon SNS に付与する必要があります。詳細については、「Amazon SNS に復号のアクセス権限を付与する」を参照してください。

  2. Amazon SNS に対して AWS KMS を有効にします。詳細については、「AWS KMS 許可を設定する」を参照してください。

重要

新しいセクションを KMS キーポリシーに追加するときは、ポリシー内の既存のセクションを変更しないでください。トピックの暗号化が有効で、KMS キーが無効か、または削除されている場合、または KMS キーポリシーが Amazon SNS に対して正しく設定されていない場合は、Amazon SNS はサブスクライバーに対してメッセージをリプレイできません。

Amazon SNS に復号のアクセス権限を付与する

Amazon SNS がトピックのアーカイブ内の暗号化されたメッセージにアクセスし、サブスクライブされたエンドポイントにリプレイするには、Amazon SNS サービスプリンシパルでこれらのメッセージを復号する必要があります。

トピック内からの履歴メッセージのリプレイ中に、保存されたメッセージを Amazon SNS サービスプリンシパルが復号することを許可するために必要なポリシーの例を次に示します。

{ "Sid": "Allow SNS to decrypt archived messages", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }

Amazon CloudWatch を使用してメッセージアーカイブメトリクスをモニタリングする

Amazon CloudWatch では、以下のメトリックスを使用してアーカイブされたメッセージをモニタリングできます。ワークロードの異常を通知し、影響を回避するのに役立てるために、これらのメトリクスに Amazon CloudWatch アラームを設定できます。詳細については、「Amazon SNS でのログ記録とモニタリング」を参照してください。

メトリクス 説明

ApproximateNumberOfMessagesArchived

トピックアーカイブにアーカイブされたメッセージの総数を 60 分の解像度でトピック所有者に提供します。

ApproximateNumberOfBytesArchived

トピックアーカイブのすべてのメッセージで、アーカイブされたバイトの総数を 60 分の解像度でトピック所有者に提供します。

NumberOfMessagesArchiveProcessing

1 分の解像度のインターバル中に、トピックアーカイブに保存されたメッセージの数をトピックの所有者に通知します。

NumberOfBytesArchiveProcessing

1 分の解像度のインターバル中に、トピックアーカイブに保存されたバイトの総数をトピックの所有者に通知します。

GetTopicAttributes API には、購読者がリプレイを開始できる最も古いタイムスタンプを表す BeginningArchiveTime プロパティが含まれています。以下に、この API アクションのレスポンスの例を示します。

{ "ArchivePolicy": { "MessageRetentionPeriod": "<integer>" }, "BeginningArchiveTime": "<timestamp>", ... }