This project contains an example implementation and infrastructure code to both destinations SQS as well as firehose:
- Provisions necessary AWS infrastructure to receive and store Amazon Marketing Stream data, as well as confirm Stream dataset subscriptions for SQS. The Stream subscription process has been simplified now, with Kinesis Data Firehose, you no longer need to confirm your subscription.
- Subscribe to datasets and manage subscriptions using a CLI.
This is a reference implementation, and not the only definitive way to consume Amazon Marketing Stream data. Note that this implementation is subject to change and future releases may not be backwards compatible.
This application, developed using Python and the AWS Cloud Development Kit (CDK), supports two deployment options: one for SQS and another for the new destination Firehose. However, SQS is the default deployment.
The SQS application deployment provisions the following AWS infrastructure components for each dataset and region combination:
- An SQS queue (StreamIngressQueue) that receives initial messages from Stream.
- A lambda (StreamFanoutLambda) that identifies whether a message contains subscription details or data.
- A second SQS queue (SubscriptionConfirmationQueue) that forwards subscription confirmation messages to a second lambda (SubscriptionConfirmationLambda) that confirms the subscription.
- An SNS topic (StreamFanoutDataTopic that) forwards data through a KinesisDateFirehouse (StreamStorageFirehose) to an S3 bucket (StreamStorageBucket) where the data is stored.
Note: The provisioning of each SQS queue also includes an associated dead-letter queue.
The Firehose application deployment provisions the following AWS infrastructure components for each dataset and region combination:
- A KinesisDateFirehouse (StreamStorageFirehose).
- An S3 bucket (StreamStorageBucket) where the data is stored.
- A [IAM Roles] (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) (FirehoseSubscriberRole) and (FirehoseSubscriptionRole) so that amazon marketing stream can send the messages to KinesisDateFirehouse.
Learn how to set up the reference application by watching our video demo.
This package includes following templates for all available datasets for advertising regions NA, EU, and FE. All NA stacks will be deployed in AWS region us-east-1
, EU stacks will be deployed in AWS region eu-west-1
, and FE stacks will be deployed in AWS region us-west-2
to minimize latency of message delivery. For more information on datasets, see the Stream data guide.
- AmzStream-NA-sp-traffic
- AmzStream-NA-sp-conversion
- AmzStream-NA-budget-usage
- AmzStream-NA-sd-traffic
- AmzStream-NA-sd-conversion
- AmzStream-NA-sb-traffic
- AmzStream-NA-sb-conversion
- AmzStream-NA-sb-clickstream
- AmzStream-NA-sb-rich-media
- AmzStream-NA-campaigns
- AmzStream-NA-adgroups
- AmzStream-NA-ads
- AmzStream-NA-targets
- AmzStream-NA-sponsored-ads-campaign-diagnostics-recommendations
- AmzStream-NA-sp-budget-recommendations
- AmzStream-EU-sp-traffic
- AmzStream-EU-sp-conversion
- AmzStream-EU-budget-usage
- AmzStream-EU-sd-traffic
- AmzStream-EU-sd-conversion
- AmzStream-EU-sb-traffic
- AmzStream-EU-sb-conversion
- AmzStream-EU-sb-clickstream
- AmzStream-EU-sb-rich-media
- AmzStream-EU-campaigns
- AmzStream-EU-adgroups
- AmzStream-EU-ads
- AmzStream-EU-targets
- AmzStream-EU-sponsored-ads-campaign-diagnostics-recommendations
- AmzStream-EU-sp-budget-recommendations
- AmzStream-FE-sp-traffic
- AmzStream-FE-sp-conversion
- AmzStream-FE-budget-usage
- AmzStream-FE-sd-traffic
- AmzStream-FE-sd-conversion
- AmzStream-FE-sb-traffic
- AmzStream-FE-sb-conversion
- AmzStream-FE-sb-clickstream
- AmzStream-FE-sb-rich-media
- AmzStream-FE-campaigns
- AmzStream-FE-adgroups
- AmzStream-FE-ads
- AmzStream-FE-targets
- AmzStream-FE-sponsored-ads-campaign-diagnostics-recommendations
- AmzStream-FE-sp-budget-recommendations
- AWS account
- AWS Cloud Development Kit (CDK)
- Python 3.7 or later including pip and virtualenv
We recommend exploring the contents of this project and familiarizing yourself with the AWS infrastructure before deploying.
-
Initialize your project and activate a virtualenv. The
cdk.json
file tells the CDK Toolkit how to execute your app. This project is set up like a standard Python project. The initialization process creates a virtualenv within this project, stored under the .venv directory. To create the virtualenv, it assumes that there is apython3
executable in your path with access to thevenv
package. If the automatic creation of the virtualenv fails, you can always create the virtualenv manually once the init process completes.Manually create a virtualenv on MacOS and Linux
Creating a virtual environment
python3 -m venv .venv
After the init process completes and the virtualenv is created, you can use the following step to activate your virtualenv.
source .venv/bin/activate
Manually create a virtualenv on Windows
% .venv\Scripts\activate.bat
-
Install the required dependencies.
pip install -r requirements.txt
-
Synthesize the CloudFormation templates for this code.
cdk synth
To view the CloudFormation templates created by the synthesize step.
cdk ls
-
Deploy CloudFormation templates.
Depending on your requirements, you can choose to deploy all CloudFormation templates
SQS -
cdk deploy --all
Firehose -
cdk deploy --all --context delivery_type=firehose
or individual templates
SQS -
cdk deploy AmzStream-NA-sp-traffic
Firehose -
cdk deploy AmzStream-NA-sp-traffic --context delivery_type=firehose
At the end of deployment, your output should resemble:
SQS Outputs: AmzStream-NA-sp-traffic.IngressIngressQueue91B67342 = arn:aws:sqs:us-east-1:2xxxxxxxxxxx:AmzStream-NA-sp-traffic-IngressQueue26236266-Jvxxxxxxxxxx AmzStream-NA-sp-traffic.StorageLandingZoneBucketFE2101CB = arn:aws:s3:::amzstream-na-sp-traffic-storagelz10f6c360-1hxxxxxxxxxxx Stack ARN: arn:aws:cloudformation:us-east-1:2xxxxxxxxxxx:stack/AmzStream-NA-sp-traffic/57151cc0-b625-11ed-a641-12730e200e31
Firehose Outputs: AmzStream-NA-sb-traffic.FirehoseSubscriberRoleInfraArn3358A9BC = arn:aws:iam::88xxxxxxxx:role/sb-traff-NA-subscriber AmzStream-NA-sb-traffic.FirehoseSubscriptionRoleInfraArn22E3DAAD = arn:aws:iam::88xxxxxxxx:role/sb-traff-NA-subscription AmzStream-NA-sb-traffic.StorageDeliveryStreamArnBB2306AC = arn:aws:firehose:us-east-1:88xxxxxxxx:deliverystream/AmzStream-NA-sb-traffic-StorageFirehoseEEA939E5-rDi6fvblOARo AmzStream-NA-sb-traffic.StorageLandingZoneBucketFE2101CB = arn:aws:s3:::amzstream-na-sb-traffic-storagelz10f6c360-4xbrfa1i3lxh Stack ARN: arn:aws:cloudformation:us-east-1:88xxxxxxxx:stack/AmzStream-NA-sb-traffic/e63f06f0-0790-11ef-b509-127247d88f9b
Note:
- This example uses
AmzStream-NA-sp-traffic
as an example. AmzStream-NA-sp-traffic.IngressIngressQueue91B67342
is the name of the example queue that will receive messages for datasetsp-traffic
from NA region.arn:aws:sqs:us-east-1:2xxxxxxxxxxx:AmzStream-NA-sp-traffic-IngressQueue26236266-Jvxxxxxxxxxx
is the ARN of the example queue and should be used for fielddestinationArn
while calling the subscription API as listed in the subscription step of the onboarding guide.AmzStream-NA-sp-traffic.StorageLandingZoneBucketFE2101CB
is the name of the example S3 bucket that will store all the received messages for this dataset.
- This example uses
cdk ls
Lists all stacks in the appcdk synth
Emits the synthesized CloudFormation templatecdk bootstrap
Deploys the CDK toolkit stack into an AWS environmentcdk deploy
Deploys this stack to your default AWS account/regioncdk diff
Compares deployed stack with current statecdk docs
Opens CDK documentationcdk destroy
Destroys this stack to your default AWS account/region
We provide a Stream subscription management command line tool that supports following commands:
- Create - Creates an Amazon Marketing Stream subscription.
- Get - Gets information on a Amazon Marketing Stream subscription by ID.
- List - Lists all Amazon Marketing Stream subscriptions associated with your Amazon Advertising API profile.
- Update - Updates an Amazon Marketing Stream subscription by ID.
In order to use the CLI, you must create a credentials.yml file with your Amazon Ads API credentials. If you don't have credentials for the Ads API, review the Onboarding process.
- macOS and Other Unix:
~/.config/python-ad-api
- Windows:
%APPDATA%\python-ad-api
where the APPDATA environment variable falls back to%HOME%\AppData\Roaming
if undefined
For more information, see Python Confuse module help.
Example: ~/.config/python-ad-api/credentials.yml
version: '1.0'
default:
refresh_token: 'your-refresh-token'
client_id: 'your-client-id'
client_secret: 'your-client-secret'
profile_id: 'your-profile-id'
Once you start receiving Stream data in AWS, you can learn more about aggregating and querying Stream data in our documentation.
You can view instructions for using the CLI using python -m amz_stream_cli --help
.
Example:
% python -m amz_stream_cli --help
Usage: amz_stream_cli [OPTIONS] COMMAND [ARGS]...
╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --version -v Show the application's version and exit. │
│ --install-completion Install completion for the current shell. │
│ --show-completion Show completion for the current shell, to copy it or customize the installation. │
│ --help Show this message and exit. │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ create Creates Amazon Marketing Stream subscription. │
│ get Gets information on specific Amazon Marketing Stream subscription by ID. │
│ list Lists all Amazon Marketing Stream subscriptions associated with your Amazon Advertising API account. │
│ update Updates specific Amazon Marketing Stream subscription by ID. │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
For help on individual commands, use the following:
python -m amz_stream_cli create --help
python -m amz_stream_cli get --help
python -m amz_stream_cli list --help
python -m amz_stream_cli update --help