# frozen_string_literal: true # WARNING ABOUT GENERATED CODE # # This file is generated. See the contributing guide for more information: # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md # # WARNING ABOUT GENERATED CODE module Aws::SNS class Topic extend Aws::Deprecations # @overload def initialize(arn, options = {}) # @param [String] arn # @option options [Client] :client # @overload def initialize(options = {}) # @option options [required, String] :arn # @option options [Client] :client def initialize(*args) options = Hash === args.last ? args.pop.dup : {} @arn = extract_arn(args, options) @data = options.delete(:data) @client = options.delete(:client) || Client.new(options) @waiter_block_warned = false end # @!group Read-Only Attributes # @return [String] def arn @arn end # A map of the topic's attributes. Attributes in this map include the # following: # # * `DeliveryPolicy` – The JSON serialization of the topic's delivery # policy. # # * `DisplayName` – The human-readable name used in the `From` field for # notifications to `email` and `email-json` endpoints. # # * `EffectiveDeliveryPolicy` – The JSON serialization of the effective # delivery policy, taking system defaults into account. # # * `Owner` – The Amazon Web Services account ID of the topic's owner. # # * `Policy` – The JSON serialization of the topic's access control # policy. # # * `SignatureVersion` – The signature version corresponds to the # hashing algorithm used while creating the signature of the # notifications, subscription confirmations, or unsubscribe # confirmation messages sent by Amazon SNS. # # * By default, `SignatureVersion` is set to **1**. The signature is a # Base64-encoded **SHA1withRSA** signature. # # * When you set `SignatureVersion` to **2**. Amazon SNS uses a # Base64-encoded **SHA256withRSA** signature. # # If the API response does not include the `SignatureVersion` # attribute, it means that the `SignatureVersion` for the topic has # value **1**. # # # # * `SubscriptionsConfirmed` – The number of confirmed subscriptions for # the topic. # # * `SubscriptionsDeleted` – The number of deleted subscriptions for the # topic. # # * `SubscriptionsPending` – The number of subscriptions pending # confirmation for the topic. # # * `TopicArn` – The topic's ARN. # # * `TracingConfig` – Tracing mode of an Amazon SNS topic. By default # `TracingConfig` is set to `PassThrough`, and the topic passes # through the tracing header it receives from an Amazon SNS publisher # to its subscriptions. If set to `Active`, Amazon SNS will vend X-Ray # segment data to topic owner account if the sampled flag in the # tracing header is true. This is only supported on standard topics. # # The following attribute applies only to [server-side-encryption][1]: # # * `KmsMasterKeyId` - The ID of an Amazon Web Services managed customer # master key (CMK) for Amazon SNS or a custom CMK. For more # information, see [Key Terms][2]. For more examples, see [KeyId][3] # in the *Key Management Service API Reference*. # # ^ # # The following attributes apply only to [FIFO topics][4]: # # * `FifoTopic` – When this is set to `true`, a FIFO topic is created. # # * `ContentBasedDeduplication` – Enables content-based deduplication # for FIFO topics. # # * By default, `ContentBasedDeduplication` is set to `false`. If you # create a FIFO topic and this attribute is `false`, you must # specify a value for the `MessageDeduplicationId` parameter for the # [Publish][5] action. # # * When you set `ContentBasedDeduplication` to `true`, Amazon SNS # uses a SHA-256 hash to generate the `MessageDeduplicationId` using # the body of the message (but not the attributes of the message). # # (Optional) To override the generated value, you can specify a # value for the `MessageDeduplicationId` parameter for the `Publish` # action. # # # # [1]: https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html # [2]: https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html#sse-key-terms # [3]: https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters # [4]: https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html # [5]: https://docs.aws.amazon.com/sns/latest/api/API_Publish.html # @return [Hash] def attributes data[:attributes] end # @!endgroup # @return [Client] def client @client end # Loads, or reloads {#data} for the current {Topic}. # Returns `self` making it possible to chain methods. # # topic.reload.data # # @return [self] def load resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do @client.get_topic_attributes(topic_arn: @arn) end @data = resp.data self end alias :reload :load # @return [Types::GetTopicAttributesResponse] # Returns the data for this {Topic}. Calls # {Client#get_topic_attributes} if {#data_loaded?} is `false`. def data load unless @data @data end # @return [Boolean] # Returns `true` if this resource is loaded. Accessing attributes or # {#data} on an unloaded resource will trigger a call to {#load}. def data_loaded? !!@data end # @!group Actions # @example Request syntax with placeholder values # # topic.add_permission({ # label: "label", # required # aws_account_id: ["delegate"], # required # action_name: ["action"], # required # }) # @param [Hash] options ({}) # @option options [required, String] :label # A unique identifier for the new policy statement. # @option options [required, Array] :aws_account_id # The Amazon Web Services account IDs of the users (principals) who will # be given access to the specified actions. The users must have Amazon # Web Services account, but do not need to be signed up for this # service. # @option options [required, Array] :action_name # The action you want to allow for the specified principal(s). # # Valid values: Any Amazon SNS action name, for example `Publish`. # @return [EmptyStructure] def add_permission(options = {}) options = options.merge(topic_arn: @arn) resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do @client.add_permission(options) end resp.data end # @example Request syntax with placeholder values # # subscription = topic.confirm_subscription({ # token: "token", # required # authenticate_on_unsubscribe: "authenticateOnUnsubscribe", # }) # @param [Hash] options ({}) # @option options [required, String] :token # Short-lived token sent to an endpoint during the `Subscribe` action. # @option options [String] :authenticate_on_unsubscribe # Disallows unauthenticated unsubscribes of the subscription. If the # value of this parameter is `true` and the request has an Amazon Web # Services signature, then only the topic owner and the subscription # owner can unsubscribe the endpoint. The unsubscribe action requires # Amazon Web Services authentication. # @return [Subscription] def confirm_subscription(options = {}) options = options.merge(topic_arn: @arn) resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do @client.confirm_subscription(options) end Subscription.new( arn: resp.data.subscription_arn, client: @client ) end # @example Request syntax with placeholder values # # topic.delete() # @param [Hash] options ({}) # @return [EmptyStructure] def delete(options = {}) options = options.merge(topic_arn: @arn) resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do @client.delete_topic(options) end resp.data end # @example Request syntax with placeholder values # # topic.publish({ # target_arn: "String", # phone_number: "PhoneNumber", # message: "message", # required # subject: "subject", # message_structure: "messageStructure", # message_attributes: { # "String" => { # data_type: "String", # required # string_value: "String", # binary_value: "data", # }, # }, # message_deduplication_id: "String", # message_group_id: "String", # }) # @param [Hash] options ({}) # @option options [String] :target_arn # If you don't specify a value for the `TargetArn` parameter, you must # specify a value for the `PhoneNumber` or `TopicArn` parameters. # @option options [String] :phone_number # The phone number to which you want to deliver an SMS message. Use # E.164 format. # # If you don't specify a value for the `PhoneNumber` parameter, you # must specify a value for the `TargetArn` or `TopicArn` parameters. # @option options [required, String] :message # The message you want to send. # # If you are publishing to a topic and you want to send the same message # to all transport protocols, include the text of the message as a # String value. If you want to send different messages for each # transport protocol, set the value of the `MessageStructure` parameter # to `json` and use a JSON object for the `Message` parameter. # # # # Constraints: # # * With the exception of SMS, messages must be UTF-8 encoded strings # and at most 256 KB in size (262,144 bytes, not 262,144 characters). # # * For SMS, each message can contain up to 140 characters. This # character limit depends on the encoding schema. For example, an SMS # message can contain 160 GSM characters, 140 ASCII characters, or 70 # UCS-2 characters. # # If you publish a message that exceeds this size limit, Amazon SNS # sends the message as multiple messages, each fitting within the size # limit. Messages aren't truncated mid-word but are cut off at # whole-word boundaries. # # The total size limit for a single SMS `Publish` action is 1,600 # characters. # # JSON-specific constraints: # # * Keys in the JSON object that correspond to supported transport # protocols must have simple JSON string values. # # * The values will be parsed (unescaped) before they are used in # outgoing messages. # # * Outbound notifications are JSON encoded (meaning that the characters # will be reescaped for sending). # # * Values have a minimum length of 0 (the empty string, "", is # allowed). # # * Values have a maximum length bounded by the overall message size # (so, including multiple protocols may limit message sizes). # # * Non-string values will cause the key to be ignored. # # * Keys that do not correspond to supported transport protocols are # ignored. # # * Duplicate keys are not allowed. # # * Failure to parse or validate any key or value in the message will # cause the `Publish` call to return an error (no partial delivery). # @option options [String] :subject # Optional parameter to be used as the "Subject" line when the message # is delivered to email endpoints. This field will also be included, if # present, in the standard JSON messages delivered to other endpoints. # # Constraints: Subjects must be UTF-8 text with no line breaks or # control characters, and less than 100 characters long. # @option options [String] :message_structure # Set `MessageStructure` to `json` if you want to send a different # message for each protocol. For example, using one publish action, you # can send a short message to your SMS subscribers and a longer message # to your email subscribers. If you set `MessageStructure` to `json`, # the value of the `Message` parameter must: # # * be a syntactically valid JSON object; and # # * contain at least a top-level JSON key of "default" with a value # that is a string. # # You can define other top-level keys that define the message you want # to send to a specific transport protocol (e.g., "http"). # # Valid value: `json` # @option options [Hash] :message_attributes # Message attributes for Publish action. # @option options [String] :message_deduplication_id # This parameter applies only to FIFO (first-in-first-out) topics. The # `MessageDeduplicationId` can contain up to 128 alphanumeric characters # `(a-z, A-Z, 0-9)` and punctuation `` # (!"#$%&'()*+,-./:;<=>?@[\]^_`\{|\}~) ``. # # Every message must have a unique `MessageDeduplicationId`, which is a # token used for deduplication of sent messages. If a message with a # particular `MessageDeduplicationId` is sent successfully, any message # sent with the same `MessageDeduplicationId` during the 5-minute # deduplication interval is treated as a duplicate. # # If the topic has `ContentBasedDeduplication` set, the system generates # a `MessageDeduplicationId` based on the contents of the message. Your # `MessageDeduplicationId` overrides the generated one. # @option options [String] :message_group_id # This parameter applies only to FIFO (first-in-first-out) topics. The # `MessageGroupId` can contain up to 128 alphanumeric characters `(a-z, # A-Z, 0-9)` and punctuation `` (!"#$%&'()*+,-./:;<=>?@[\]^_`\{|\}~) ``. # # The `MessageGroupId` is a tag that specifies that a message belongs to # a specific message group. Messages that belong to the same message # group are processed in a FIFO manner (however, messages in different # message groups might be processed out of order). Every message must # include a `MessageGroupId`. # @return [Types::PublishResponse] def publish(options = {}) options = options.merge(topic_arn: @arn) resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do @client.publish(options) end resp.data end # @example Request syntax with placeholder values # # topic.remove_permission({ # label: "label", # required # }) # @param [Hash] options ({}) # @option options [required, String] :label # The unique label of the statement you want to remove. # @return [EmptyStructure] def remove_permission(options = {}) options = options.merge(topic_arn: @arn) resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do @client.remove_permission(options) end resp.data end # @example Request syntax with placeholder values # # topic.set_attributes({ # attribute_name: "attributeName", # required # attribute_value: "attributeValue", # }) # @param [Hash] options ({}) # @option options [required, String] :attribute_name # A map of attributes with their corresponding values. # # The following lists the names, descriptions, and values of the special # request parameters that the `SetTopicAttributes` action uses: # # * `ApplicationSuccessFeedbackRoleArn` – Indicates failed message # delivery status for an Amazon SNS topic that is subscribed to a # platform application endpoint. # # * `DeliveryPolicy` – The policy that defines how Amazon SNS retries # failed deliveries to HTTP/S endpoints. # # * `DisplayName` – The display name to use for a topic with SMS # subscriptions. # # * `Policy` – The policy that defines who can access your topic. By # default, only the topic owner can publish or subscribe to the topic. # # * `TracingConfig` – Tracing mode of an Amazon SNS topic. By default # `TracingConfig` is set to `PassThrough`, and the topic passes # through the tracing header it receives from an Amazon SNS publisher # to its subscriptions. If set to `Active`, Amazon SNS will vend X-Ray # segment data to topic owner account if the sampled flag in the # tracing header is true. This is only supported on standard topics. # # * HTTP # # * `HTTPSuccessFeedbackRoleArn` – Indicates successful message # delivery status for an Amazon SNS topic that is subscribed to an # HTTP endpoint. # # * `HTTPSuccessFeedbackSampleRate` – Indicates percentage of # successful messages to sample for an Amazon SNS topic that is # subscribed to an HTTP endpoint. # # * `HTTPFailureFeedbackRoleArn` – Indicates failed message delivery # status for an Amazon SNS topic that is subscribed to an HTTP # endpoint. # # * Amazon Kinesis Data Firehose # # * `FirehoseSuccessFeedbackRoleArn` – Indicates successful message # delivery status for an Amazon SNS topic that is subscribed to an # Amazon Kinesis Data Firehose endpoint. # # * `FirehoseSuccessFeedbackSampleRate` – Indicates percentage of # successful messages to sample for an Amazon SNS topic that is # subscribed to an Amazon Kinesis Data Firehose endpoint. # # * `FirehoseFailureFeedbackRoleArn` – Indicates failed message # delivery status for an Amazon SNS topic that is subscribed to an # Amazon Kinesis Data Firehose endpoint. # # * Lambda # # * `LambdaSuccessFeedbackRoleArn` – Indicates successful message # delivery status for an Amazon SNS topic that is subscribed to an # Lambda endpoint. # # * `LambdaSuccessFeedbackSampleRate` – Indicates percentage of # successful messages to sample for an Amazon SNS topic that is # subscribed to an Lambda endpoint. # # * `LambdaFailureFeedbackRoleArn` – Indicates failed message delivery # status for an Amazon SNS topic that is subscribed to an Lambda # endpoint. # # * Platform application endpoint # # * `ApplicationSuccessFeedbackRoleArn` – Indicates successful message # delivery status for an Amazon SNS topic that is subscribed to an # Amazon Web Services application endpoint. # # * `ApplicationSuccessFeedbackSampleRate` – Indicates percentage of # successful messages to sample for an Amazon SNS topic that is # subscribed to an Amazon Web Services application endpoint. # # * `ApplicationFailureFeedbackRoleArn` – Indicates failed message # delivery status for an Amazon SNS topic that is subscribed to an # Amazon Web Services application endpoint. # # In addition to being able to configure topic attributes for message # delivery status of notification messages sent to Amazon SNS # application endpoints, you can also configure application attributes # for the delivery status of push notification messages sent to push # notification services. # # For example, For more information, see [Using Amazon SNS Application # Attributes for Message Delivery Status][1]. # # # # * Amazon SQS # # * `SQSSuccessFeedbackRoleArn` – Indicates successful message # delivery status for an Amazon SNS topic that is subscribed to an # Amazon SQS endpoint. # # * `SQSSuccessFeedbackSampleRate` – Indicates percentage of # successful messages to sample for an Amazon SNS topic that is # subscribed to an Amazon SQS endpoint. # # * `SQSFailureFeedbackRoleArn` – Indicates failed message delivery # status for an Amazon SNS topic that is subscribed to an Amazon SQS # endpoint. # # The <ENDPOINT>SuccessFeedbackRoleArn and # <ENDPOINT>FailureFeedbackRoleArn attributes are used to give # Amazon SNS write access to use CloudWatch Logs on your behalf. The # <ENDPOINT>SuccessFeedbackSampleRate attribute is for specifying # the sample rate percentage (0-100) of successfully delivered messages. # After you configure the <ENDPOINT>FailureFeedbackRoleArn # attribute, then all failed message deliveries generate CloudWatch # Logs. # # # # The following attribute applies only to [server-side-encryption][2]: # # * `KmsMasterKeyId` – The ID of an Amazon Web Services managed customer # master key (CMK) for Amazon SNS or a custom CMK. For more # information, see [Key Terms][3]. For more examples, see [KeyId][4] # in the *Key Management Service API Reference*. # # * `SignatureVersion` – The signature version corresponds to the # hashing algorithm used while creating the signature of the # notifications, subscription confirmations, or unsubscribe # confirmation messages sent by Amazon SNS. By default, # `SignatureVersion` is set to `1`. # # The following attribute applies only to [FIFO topics][5]: # # * `ContentBasedDeduplication` – Enables content-based deduplication # for FIFO topics. # # * By default, `ContentBasedDeduplication` is set to `false`. If you # create a FIFO topic and this attribute is `false`, you must # specify a value for the `MessageDeduplicationId` parameter for the # [Publish][6] action. # # * When you set `ContentBasedDeduplication` to `true`, Amazon SNS # uses a SHA-256 hash to generate the `MessageDeduplicationId` using # the body of the message (but not the attributes of the message). # # (Optional) To override the generated value, you can specify a # value for the `MessageDeduplicationId` parameter for the `Publish` # action. # # # # [1]: https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html # [2]: https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html # [3]: https://docs.aws.amazon.com/sns/latest/dg/sns-server-side-encryption.html#sse-key-terms # [4]: https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters # [5]: https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html # [6]: https://docs.aws.amazon.com/sns/latest/api/API_Publish.html # @option options [String] :attribute_value # The new value for the attribute. # @return [EmptyStructure] def set_attributes(options = {}) options = options.merge(topic_arn: @arn) resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do @client.set_topic_attributes(options) end resp.data end # @example Request syntax with placeholder values # # subscription = topic.subscribe({ # protocol: "protocol", # required # endpoint: "endpoint", # attributes: { # "attributeName" => "attributeValue", # }, # return_subscription_arn: false, # }) # @param [Hash] options ({}) # @option options [required, String] :protocol # The protocol that you want to use. Supported protocols include: # # * `http` – delivery of JSON-encoded message via HTTP POST # # * `https` – delivery of JSON-encoded message via HTTPS POST # # * `email` – delivery of message via SMTP # # * `email-json` – delivery of JSON-encoded message via SMTP # # * `sms` – delivery of message via SMS # # * `sqs` – delivery of JSON-encoded message to an Amazon SQS queue # # * `application` – delivery of JSON-encoded message to an EndpointArn # for a mobile app and device # # * `lambda` – delivery of JSON-encoded message to an Lambda function # # * `firehose` – delivery of JSON-encoded message to an Amazon Kinesis # Data Firehose delivery stream. # @option options [String] :endpoint # The endpoint that you want to receive notifications. Endpoints vary by # protocol: # # * For the `http` protocol, the (public) endpoint is a URL beginning # with `http://`. # # * For the `https` protocol, the (public) endpoint is a URL beginning # with `https://`. # # * For the `email` protocol, the endpoint is an email address. # # * For the `email-json` protocol, the endpoint is an email address. # # * For the `sms` protocol, the endpoint is a phone number of an # SMS-enabled device. # # * For the `sqs` protocol, the endpoint is the ARN of an Amazon SQS # queue. # # * For the `application` protocol, the endpoint is the EndpointArn of a # mobile app and device. # # * For the `lambda` protocol, the endpoint is the ARN of an Lambda # function. # # * For the `firehose` protocol, the endpoint is the ARN of an Amazon # Kinesis Data Firehose delivery stream. # @option options [Hash] :attributes # A map of attributes with their corresponding values. # # The following lists the names, descriptions, and values of the special # request parameters that the `Subscribe` action uses: # # * `DeliveryPolicy` – The policy that defines how Amazon SNS retries # failed deliveries to HTTP/S endpoints. # # * `FilterPolicy` – The simple JSON object that lets your subscriber # receive only a subset of messages, rather than receiving every # message published to the topic. # # * `FilterPolicyScope` – This attribute lets you choose the filtering # scope by using one of the following string value types: # # * `MessageAttributes` (default) – The filter is applied on the # message attributes. # # * `MessageBody` – The filter is applied on the message body. # # * `RawMessageDelivery` – When set to `true`, enables raw message # delivery to Amazon SQS or HTTP/S endpoints. This eliminates the need # for the endpoints to process JSON formatting, which is otherwise # created for Amazon SNS metadata. # # * `RedrivePolicy` – When specified, sends undeliverable messages to # the specified Amazon SQS dead-letter queue. Messages that can't be # delivered due to client errors (for example, when the subscribed # endpoint is unreachable) or server errors (for example, when the # service that powers the subscribed endpoint becomes unavailable) are # held in the dead-letter queue for further analysis or reprocessing. # # The following attribute applies only to Amazon Data Firehose delivery # stream subscriptions: # # * `SubscriptionRoleArn` – The ARN of the IAM role that has the # following: # # * Permission to write to the Firehose delivery stream # # * Amazon SNS listed as a trusted entity # # Specifying a valid ARN for this attribute is required for Firehose # delivery stream subscriptions. For more information, see [Fanout to # Firehose delivery streams][1] in the *Amazon SNS Developer Guide*. # # The following attributes apply only to [FIFO topics][2]: # # * `ReplayPolicy` – Adds or updates an inline policy document for a # subscription to replay messages stored in the specified Amazon SNS # topic. # # * `ReplayStatus` – Retrieves the status of the subscription message # replay, which can be one of the following: # # * `Completed` – The replay has successfully redelivered all # messages, and is now delivering newly published messages. If an # ending point was specified in the `ReplayPolicy` then the # subscription will no longer receive newly published messages. # # * `In progress` – The replay is currently replaying the selected # messages. # # * `Failed` – The replay was unable to complete. # # * `Pending` – The default state while the replay initiates. # # # # [1]: https://docs.aws.amazon.com/sns/latest/dg/sns-firehose-as-subscriber.html # [2]: https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html # @option options [Boolean] :return_subscription_arn # Sets whether the response from the `Subscribe` request includes the # subscription ARN, even if the subscription is not yet confirmed. # # If you set this parameter to `true`, the response includes the ARN in # all cases, even if the subscription is not yet confirmed. In addition # to the ARN for confirmed subscriptions, the response also includes the # `pending subscription` ARN value for subscriptions that aren't yet # confirmed. A subscription becomes confirmed when the subscriber calls # the `ConfirmSubscription` action with a confirmation token. # # # # The default value is `false`. # @return [Subscription] def subscribe(options = {}) options = options.merge(topic_arn: @arn) resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do @client.subscribe(options) end Subscription.new( arn: resp.data.subscription_arn, client: @client ) end # @!group Associations # @example Request syntax with placeholder values # # topic.subscriptions() # @param [Hash] options ({}) # @return [Subscription::Collection] def subscriptions(options = {}) batches = Enumerator.new do |y| options = options.merge(topic_arn: @arn) resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do @client.list_subscriptions_by_topic(options) end resp.each_page do |page| batch = [] page.data.subscriptions.each do |s| batch << Subscription.new( arn: s.subscription_arn, client: @client ) end y.yield(batch) end end Subscription::Collection.new(batches) end # @deprecated # @api private def identifiers { arn: @arn } end deprecated(:identifiers) private def extract_arn(args, options) value = args[0] || options.delete(:arn) case value when String then value when nil then raise ArgumentError, "missing required option :arn" else msg = "expected :arn to be a String, got #{value.class}" raise ArgumentError, msg end end class Collection < Aws::Resources::Collection; end end end