{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Amazonka.Kinesis.SubscribeToShard -- Copyright : (c) 2013-2023 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- This operation establishes an HTTP\/2 connection between the consumer -- you specify in the @ConsumerARN@ parameter and the shard you specify in -- the @ShardId@ parameter. After the connection is successfully -- established, Kinesis Data Streams pushes records from the shard to the -- consumer over this connection. Before you call this operation, call -- RegisterStreamConsumer to register the consumer with Kinesis Data -- Streams. -- -- When the @SubscribeToShard@ call succeeds, your consumer starts -- receiving events of type SubscribeToShardEvent over the HTTP\/2 -- connection for up to 5 minutes, after which time you need to call -- @SubscribeToShard@ again to renew the subscription if you want to -- continue to receive records. -- -- You can make one call to @SubscribeToShard@ per second per registered -- consumer per shard. For example, if you have a 4000 shard stream and two -- registered stream consumers, you can make one @SubscribeToShard@ request -- per second for each combination of shard and registered consumer, -- allowing you to subscribe both consumers to all 4000 shards in one -- second. -- -- If you call @SubscribeToShard@ again with the same @ConsumerARN@ and -- @ShardId@ within 5 seconds of a successful call, you\'ll get a -- @ResourceInUseException@. If you call @SubscribeToShard@ 5 seconds or -- more after a successful call, the second call takes over the -- subscription and the previous connection expires or fails with a -- @ResourceInUseException@. -- -- For an example of how to use this operations, see -- . module Amazonka.Kinesis.SubscribeToShard ( -- * Creating a Request SubscribeToShard (..), newSubscribeToShard, -- * Request Lenses subscribeToShard_consumerARN, subscribeToShard_shardId, subscribeToShard_startingPosition, -- * Destructuring the Response SubscribeToShardResponse (..), newSubscribeToShardResponse, -- * Response Lenses subscribeToShardResponse_httpStatus, subscribeToShardResponse_eventStream, ) where import qualified Amazonka.Core as Core import qualified Amazonka.Core.Lens.Internal as Lens import qualified Amazonka.Data as Data import Amazonka.Kinesis.Types import qualified Amazonka.Prelude as Prelude import qualified Amazonka.Request as Request import qualified Amazonka.Response as Response -- | /See:/ 'newSubscribeToShard' smart constructor. data SubscribeToShard = SubscribeToShard' { -- | For this parameter, use the value you obtained when you called -- RegisterStreamConsumer. consumerARN :: Prelude.Text, -- | The ID of the shard you want to subscribe to. To see a list of all the -- shards for a given stream, use ListShards. shardId :: Prelude.Text, -- | The starting position in the data stream from which to start streaming. startingPosition :: StartingPosition } deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic) -- | -- Create a value of 'SubscribeToShard' with all optional fields omitted. -- -- Use or to modify other optional fields. -- -- The following record fields are available, with the corresponding lenses provided -- for backwards compatibility: -- -- 'consumerARN', 'subscribeToShard_consumerARN' - For this parameter, use the value you obtained when you called -- RegisterStreamConsumer. -- -- 'shardId', 'subscribeToShard_shardId' - The ID of the shard you want to subscribe to. To see a list of all the -- shards for a given stream, use ListShards. -- -- 'startingPosition', 'subscribeToShard_startingPosition' - The starting position in the data stream from which to start streaming. newSubscribeToShard :: -- | 'consumerARN' Prelude.Text -> -- | 'shardId' Prelude.Text -> -- | 'startingPosition' StartingPosition -> SubscribeToShard newSubscribeToShard pConsumerARN_ pShardId_ pStartingPosition_ = SubscribeToShard' { consumerARN = pConsumerARN_, shardId = pShardId_, startingPosition = pStartingPosition_ } -- | For this parameter, use the value you obtained when you called -- RegisterStreamConsumer. subscribeToShard_consumerARN :: Lens.Lens' SubscribeToShard Prelude.Text subscribeToShard_consumerARN = Lens.lens (\SubscribeToShard' {consumerARN} -> consumerARN) (\s@SubscribeToShard' {} a -> s {consumerARN = a} :: SubscribeToShard) -- | The ID of the shard you want to subscribe to. To see a list of all the -- shards for a given stream, use ListShards. subscribeToShard_shardId :: Lens.Lens' SubscribeToShard Prelude.Text subscribeToShard_shardId = Lens.lens (\SubscribeToShard' {shardId} -> shardId) (\s@SubscribeToShard' {} a -> s {shardId = a} :: SubscribeToShard) -- | The starting position in the data stream from which to start streaming. subscribeToShard_startingPosition :: Lens.Lens' SubscribeToShard StartingPosition subscribeToShard_startingPosition = Lens.lens (\SubscribeToShard' {startingPosition} -> startingPosition) (\s@SubscribeToShard' {} a -> s {startingPosition = a} :: SubscribeToShard) instance Core.AWSRequest SubscribeToShard where type AWSResponse SubscribeToShard = SubscribeToShardResponse request overrides = Request.postJSON (overrides defaultService) response = Response.receiveJSON ( \s h x -> SubscribeToShardResponse' Prelude.<$> (Prelude.pure (Prelude.fromEnum s)) Prelude.<*> (x Data..:> "EventStream") ) instance Prelude.Hashable SubscribeToShard where hashWithSalt _salt SubscribeToShard' {..} = _salt `Prelude.hashWithSalt` consumerARN `Prelude.hashWithSalt` shardId `Prelude.hashWithSalt` startingPosition instance Prelude.NFData SubscribeToShard where rnf SubscribeToShard' {..} = Prelude.rnf consumerARN `Prelude.seq` Prelude.rnf shardId `Prelude.seq` Prelude.rnf startingPosition instance Data.ToHeaders SubscribeToShard where toHeaders = Prelude.const ( Prelude.mconcat [ "X-Amz-Target" Data.=# ( "Kinesis_20131202.SubscribeToShard" :: Prelude.ByteString ), "Content-Type" Data.=# ( "application/x-amz-json-1.1" :: Prelude.ByteString ) ] ) instance Data.ToJSON SubscribeToShard where toJSON SubscribeToShard' {..} = Data.object ( Prelude.catMaybes [ Prelude.Just ("ConsumerARN" Data..= consumerARN), Prelude.Just ("ShardId" Data..= shardId), Prelude.Just ("StartingPosition" Data..= startingPosition) ] ) instance Data.ToPath SubscribeToShard where toPath = Prelude.const "/" instance Data.ToQuery SubscribeToShard where toQuery = Prelude.const Prelude.mempty -- | /See:/ 'newSubscribeToShardResponse' smart constructor. data SubscribeToShardResponse = SubscribeToShardResponse' { -- | The response's http status code. httpStatus :: Prelude.Int, -- | The event stream that your consumer can use to read records from the -- shard. eventStream :: Data.Value } deriving (Prelude.Generic) -- | -- Create a value of 'SubscribeToShardResponse' with all optional fields omitted. -- -- Use or to modify other optional fields. -- -- The following record fields are available, with the corresponding lenses provided -- for backwards compatibility: -- -- 'httpStatus', 'subscribeToShardResponse_httpStatus' - The response's http status code. -- -- 'eventStream', 'subscribeToShardResponse_eventStream' - The event stream that your consumer can use to read records from the -- shard. newSubscribeToShardResponse :: -- | 'httpStatus' Prelude.Int -> -- | 'eventStream' Data.Value -> SubscribeToShardResponse newSubscribeToShardResponse pHttpStatus_ pEventStream_ = SubscribeToShardResponse' { httpStatus = pHttpStatus_, eventStream = pEventStream_ } -- | The response's http status code. subscribeToShardResponse_httpStatus :: Lens.Lens' SubscribeToShardResponse Prelude.Int subscribeToShardResponse_httpStatus = Lens.lens (\SubscribeToShardResponse' {httpStatus} -> httpStatus) (\s@SubscribeToShardResponse' {} a -> s {httpStatus = a} :: SubscribeToShardResponse) -- | The event stream that your consumer can use to read records from the -- shard. subscribeToShardResponse_eventStream :: Lens.Lens' SubscribeToShardResponse Data.Value subscribeToShardResponse_eventStream = Lens.lens (\SubscribeToShardResponse' {eventStream} -> eventStream) (\s@SubscribeToShardResponse' {} a -> s {eventStream = a} :: SubscribeToShardResponse) instance Prelude.NFData SubscribeToShardResponse where rnf SubscribeToShardResponse' {..} = Prelude.rnf httpStatus `Prelude.seq` Prelude.rnf eventStream