# Amazon Kinesis Firehose

<p><a href="https://aws.amazon.com/kinesis/data-firehose/" >Amazon Kinesis Firehose</a> gives you an easy and reliable way to load your streaming data into data lakes, data stores, and a host of other analytics tools. It is a fully-managed service that can be scaled automatically to match the load and throughput of your data, without requiring any additional administration.</p>
<p>RudderStack supports Amazon Kinesis Firehose as a destination where you can seamlessly send your event data.</p>
<p>Find the open source code for this destination in the <a href="https://github.com/rudderlabs/rudder-transformer/tree/main/src/v0/destinations/firehose" >GitHub repository</a>.</p>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="connection-compatibility">Connection compatibility</h2>
  
  
  
  <div class="quick-info">
    <div>
      <div class="connection-modes-column-headers">
        <table>
          <tr class="connection-modes-column-headers">
            <th colspan="4">
            Destination Information
          </th>
        </tr>
          <tr class="destination-info-content">
            <td>
              <ul>
                <li>
                  <b>Status:</b> Generally Available 
                </li>
                <li>
                  <b>Supported sources:</b>  
                  
                      Android (Java)
                      ,
                  
                  
                      Android (Kotlin)
                      ,
                  
                  
                      iOS (Obj-C)
                      ,
                  
                  
                      iOS (Swift)
                      ,
                  
                  
                      Web,
                  
                  
                      Unity,
                  
                  
                      AMP
                      ,
                  
                  
                      Cloud,
                  
                  
                      Warehouse,
                  
                  
                      React Native
                      ,
                  
                  
                      Flutter,
                  
                  
                      Cordova,
                  
                  
                      Shopify
                  
                </li>
                <li>
                  Refer to it as <b>Amazon Kinesis Firehose</b> in the <a href="/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/filtering/#filtering-destinations">Integrations object</a>.
                </li>
              </ul>
            </td>
          </tr>
        </table>
      </div>
      <div class="table-content connection-modes-table">
        
          <table>
            <tr class="heading connection-modes-header">
              <th colspan="4">
              Connection Modes
              <a href=/docs/destinations/rudderstack-connection-modes>
                <i class="fa-regular fa-circle-info"></i>
              </a>
            </th>
          </tr>
            <tr class="connection-modes-column-headers">
              <th>Source</th>
              <th>Cloud mode</th>
              <th>Device mode</th>
              <th>Hybrid mode</th>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                AMP
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                Android (Java)
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                Android (Kotlin)
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                Cloud
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                Cordova
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                Flutter
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                iOS (Obj-C)
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                iOS (Swift)
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                React Native
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                Shopify
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                Unity
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                Warehouse
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
            <tr class="connection-modes-row">
              <td>
                Web
                
              </td>
              <td>
                <img src=/docs/images/tick.svg loading="lazy" decoding="async" class="img__small" alt="supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
              <td>
                 <img src=/docs/images/no-image.svg loading="lazy"
                    decoding="async" class="img__small" alt="not supported" />
              </td>
            </tr>
            
          </table>
         
      </div>
      <div class="table-content message-types-table">
          <table>
            <tr class="heading message-types-header">
              <th colspan="9">
              Supported Message Types
            </th>
          </tr>
          <tr class="message-types-column-headers">
            <th>Source</th>
            <th>Identify</th>
            <th>Page</th>
            <th>Track</th>
            <th>Screen</th>
            <th>Group</th>
            <th>Alias</th>
            <th>Record</th>
            <th>AudienceList</th>
          </tr>
          
          
          
          
          
            </table>
        </div>
    </div>
  </div>
  

<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="get-started">Get started</h2><p>Once you have confirmed that the source platform supports sending events to Kinesis Firehose, follow these steps:</p>
<ol>
<li>From your RudderStack dashboard, add the source. Then, from the list of destinations, select <strong>Amazon Kinesis Firehose</strong>.</li>
<li>Assign a name to your destination and click <strong>Continue</strong>.</li>
</ol>
<!-- end-chunk -->
<!-- begin-chunk -->
<h3 id="connection-settings">Connection settings</h3><p>To successfully set up Kinesis Firehose as a destination, you need to configure the following settings:</p>
<ul>
<li><strong>AWS Region</strong>: Enter the AWS region in which you have created the Kinesis Firehose stream. This is a required field.</li>
<li><strong>Role-based Authentication</strong>: Enable this setting to use the RudderStack IAM role for authentication. For more information on creating an AWS IAM role for RudderStack, refer to <a href="https://www.rudderstack.com/docs/destinations/aws-iam-role-for-rudderstack/#creating-a-rudderstack-iam-role" >this guide</a>.
<ul>
<li><strong>IAM Role ARN</strong>: Enter the ARN of the IAM role.</li>
</ul>
</li>
</ul>

<blockquote class="warning">
  <div class="tip-quote">
    
    <div class="tip-text">It is highly recommended to enable this setting as the access keys-based authentication method is now deprecated.</div>
  </div>
</blockquote>
<ul>
<li>If <strong>Role-based Authentication</strong> is disabled, you need to enter the <strong>AWS Access Key ID</strong> and <strong>AWS Secret Access Key</strong> to authorize RudderStack in order to write to the configured stream.</li>
</ul>

<html lang="en">
<blockquote class="info">
  <div class="tip-quote">
    
    <div class="tip-text">In both the role-based and access key-based authentication methods, you need to set a policy specifying the required permissions for RudderStack to write to your Kinesis Firehose stream. Refer to the <a href="#policy-permissions" >Policy permissions</a> section below for more information.</div>
  </div>
</blockquote>

</html>
<ul>
<li><strong>Mapping event to delivery streams</strong>: Use this setting to map the RudderStack  <strong>Event Name</strong> to a Kinesis Firehose <strong>Delivery Stream</strong>.</li>
</ul>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="sending-events-to-kinesis-firehose">Sending events to Kinesis Firehose</h2><p>RudderStack supports sending the <code>identify</code>, <code>page</code>, and <code>track</code> events to specific Kinesis Firehose streams by configuring them in the dashboard.</p>
<p>You can also send an event <code>type</code> as <code>page</code>, <code>identify</code>, or <code>track</code>. For the <code>track</code> events, you can specify the event name based on the event name in the payload. For example:</p>
<ul>
<li>If the event name is <code>page</code>, RudderStack sends all events with the <code>type</code> set to <code>page</code>.</li>
<li>If event name is <code>Product Added</code> , RudderStack sends all track events with the <code>event</code> as <code>Product Added</code>.</li>
</ul>

<html lang="en">
<blockquote class="info">
  <div class="tip-quote">
    
    <div class="tip-text">To send all events to a particular stream irrespective of the type or name, you can use <code>*</code> as the event name in the dashboard settings.</div>
  </div>
</blockquote>

</html>

<blockquote class="warning">
  <div class="tip-quote">
    
    <div class="tip-text">Note that the field <strong>Delivery Stream Name</strong> is case sensitive and has to be specified exactly as named in AWS. On the other hand, the <strong>Event Name</strong> field is not case sensitive, and thus RudderStack does not differentiate between <code>Page</code> or <code>page</code> before sending it to the Firehose stream.</div>
  </div>
</blockquote>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="policy-permissions">Policy permissions</h2><p>To use the Firehose destination with RudderStack correctly, you must have a Firehose stream created in AWS. For more information on creating a Kinesis Firehose data delivery stream, refer to this <a href="http://docs.aws.amazon.com/firehose/latest/dev/basic-create.html">AWS documentation</a>.</p>
<p>You also need to create an IAM role and attach the policy containing the necessary permissions (<code>PutRecord</code>) for RudderStack to write to the stream.</p>
<ul>
<li>To create an IAM role, follow the instructions on <a href="http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console" >Creating an IAM role</a>.</li>
<li>For more information on creating an IAM policy, refer to this <a href="http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html">AWS documentation</a>.</li>
</ul>
<p>A sample permissions policy that allows a user to send event data into Kinesis Firehose is shown below:</p>
<div class="rs-code">
  <div class="rs-code__head">javascript<button class="rs-code__copy" type="button">
      
      Copy
    </button>
  </div>
  <div class="highlight"><pre class="chroma"><code class="language-javascript" data-lang="javascript">{
  &#34;Version&#34;: &#34;2012-10-17&#34;,
  &#34;Statement&#34;: [
    {
      &#34;Effect&#34;: &#34;Allow&#34;,
      &#34;Action&#34;: [
        &#34;firehose:PutRecord&#34;
      ],
      &#34;Resource&#34;: [
        &#34;arn:aws:firehose:{region}:{account-id}:stream/{stream-name}&#34;
      ]
    }
  ]
}</code></pre></div>
</div>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="faq">FAQ</h2><!-- end-chunk -->
<!-- begin-chunk -->
<h4 id="how-does-event-mapping-work-with-the-delivery-stream">How does event mapping work with the delivery stream?</h4><ul>
<li>If there is no delivery stream set for an event in the dashboard settings, RudderStack will not send the event to the Firehose stream.</li>
<li>If an event is set with a delivery stream, RudderStack sends the payload to the configured delivery stream.</li>
<li>If you have set the event <code>type</code>, <strong>Event Name</strong>, and <code>*</code> for mapping purposes, RudderStack gives the topmost priority to the event name, followed by <code>type</code>, and then <code>*</code>.  For example, if the type of event is <code>track</code> and <strong>Event Name</strong> is <code>Product Added</code>, RudderStack does the mapping as shown:</li>
</ul>

<figure class="image--main "  >
    <a 
         href="/docs/images/screenshot-2020-07-14-at-10.37.02-pm.webp"
        
        >
        <img src="/docs/images/screenshot-2020-07-14-at-10.37.02-pm.webp" 
         
         
         
        decoding="async" loading="lazy" class="img-shortcode"/>
    </a>
    
</figure>

<p>Then all events go to the stream mapped with <code>Product Added</code>.</p>

