io.github.cdklabs.tweetqueue.package-info Maven / Gradle / Ivy
Show all versions of cdk-tweet-queue Show documentation
/**
* Tweet Queue for AWS CDK
*
* This is an AWS CDK construct library which
* allows you to get a feed of Twitter search results into an SQS queue. It works
* by periodically polling the freely available Twitter Standard Search
* API and
* sending all new tweets to an SQS queue.
*
* Inspired by
* @jlhood's
* aws-serverless-twitter-event-source
*
*
Architecture
*
*
*
*
* - A CloudWatch Event Rule triggers the poller AWS Lambda function periodically
* - The poller reads the last checkpoint from a DynamoDB table (if exists)
* - The poller issues a Twitter search query for all new tweets
* - The poller enqueues all tweets to an SQS queue
* - The poller stores the ID of the last tweet into the DynamoDB checkpoint table.
* - Rinse & repeat.
*
*
*
Twitter API Keys
*
* To issue a Twitter search request, you will need to
* apply for a Twitter
* developer account, and obtain API keys through by defining a new
* application.
*
* The Twitter API keys are read by the poller from an AWS Secrets
* Manager entry. The entry must contain
* the following attributes: consumer_key
, consumer_secret
, access_token_key
* and access_token_secret
(exact names).
*
*
* - Create a new AWS Secrets Manager entry for your API keys
* - Fill in the key values as shown below:
*
* - Store the key
* - Obtain the ARN of the secret (you will need it soon).
*
*
*
Usage
*
* Use npm
to install the module in your CDK project. This will also add it to
* your package.json
file.
*
*
* $ npm install cdk-tweet-queue
*
*
* Add a TweetQueue
to your CDK stack:
*
*
* import { TweetQueue } from 'cdk-tweet-queue';
*
* const queue = new TweetQueue(this, 'TweetStream', {
* // this is the ARN of the secret you stored
* secretArn: 'arn:aws:secretsmanager:us-east-1:1234567891234:secret:xxxxxxxxx'
*
* // twitter search query
* // see https://developer.twitter.com/en/docs/tweets/search/guides/standard-operators
* query: '#awscdk',
*
* // optional properties
* intervalMin: 60, // optional: polling interval in minutes
* retentionPeriodSec: 60, // optional: queue retention period
* visibilityTimeoutSec: 60, // optional: queue visilibity timeout
* });
*
*
* Now, queue
is an sqs.Queue
object and can be used anywhere a queue is
* accepted. For example, you could process the queue messages using an AWS Lambda
* function by setting up an SQS event source mapping.
*
*
Development
*
* The project is managed by projen and offers the following commands:
*
*
* yarn projen
- Synthesize the project configuration.
* yarn compile
- Compile all source code.
* yarn test
- Run all tests.
* yarn build
- Complie, test, and package the module.
*
*
*
Integration test
*
* There is also an integration test that can be executed by running the following commands. You will need to set the TWEET_QUEUE_SECRET_ARN
environment variable in order for the test to be able to use your Twitter API keys.
*
*
* $ yarn integ:deploy
*
*
* Don't forget to destroy:
*
*
* $ yarn integ:destroy
*
*
* You can also run any cdk command on the integration test application by running:
*
*
* yarn integ <command>
*
*
*
License
*
* Apache-2.0
*/
@software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable)
package io.github.cdklabs.tweetqueue;