Sending funny dog GIFs using AWS IoT Button and Lambda

I bought an AWS IOT button the other day out of curiosity. I’m not sure on a more permanent solution for it just yet but I’d figured it would do something simple to start.

Goal: Make this button send me funny dog gifs using Lambda. Plus, the infosec community loves dog gifs right??

Fair warning, there is a bit of a set up needed prior to creating the lambda function and connecting the button.

Things you’ll need:

  • Giphy API Key from here.
  • AWS IoT Enterprise Button
  • AWS IoT App from app store for iOS or Android
  • Companion Github Files — check out the python source code
  • Your personal phone number to receive the gifs
  • Your Wifi Password


# These steps assume you have the correct IAM permissions to do 
# this locally. If not, please check your IAM policies.
# create lambda package, "zip it up & zip it out"mkdir dogbutton
cd dogbutton
virtualenv --python=/usr/local/bin/python3.7 venv
source venv/bin/activate
# install necessary modules
pip install twilio requests giphy_client
cd venv/lib/python3.7/site-packages
# create # <- must be named this
<copy + paste code from file in GitHub repo>
zip -r9 .
# create lambda # replace aws account number
aws lambda create-function --function-name "dogbutton" --runtime "python3.7" --role "arn:aws:iam::<aws_account_id>:role/lambda_basic_execution" --handler "lambda_function.lambda_handler" --timeout 5 --zip-file "fileb://./" --region "us-west-2"
# If you need to update lambda with a newer package, remove the
# previous zip in the same directory, re-zip the package up when
# ready, and re-upload using this:
aws lambda update-function-code --function-name "dogbutton" --zip-file "fileb://./" --region "us-west-2"

After the packaged was uploaded, I switched to the console to add the following environment variables:

P.S. Make sure the variables twilio_number and my_number are in the correct format. For me, that meant they followed this format (adding a +1 in front):


Then, I set up and ran the basic test events. If everything is set up properly, you should get a gif texted to your phone.

Now to give this function to an IoT button.

Roll of the sleeves

While this screen was waiting, I opened the AWS IoT 1-Click App. If you haven’t already, you’ll need to login with your AWS account.

Side Poll: Anyone else having log in fatigue from all the multi-factor logins?

Side Note: It felt a little strange having turn ON my GPS location in order to complete the next step. No dropdown? Enter zip? No?? Bluetooth is needed as well.

I clicked Configure Wi-Fi (have your WiFi password ready!), Manually Enter Device ID, then configure. Follow the instructions from here until you are back on the default screen on the app.

If you switch back to the console, you should see this:

After hitting Done, on the next screen, under Actions, I enabled the button. On the left hand side, I clicked Manage -> Projects.

Here I created a new project and assigned that button to the lambda function created earlier. On Step 1, you’ll name your project and on Step 2, you’ll see the screen below:

After you have created the project, the second to last step is to create a placement and assign the button to this project.

The last step is the best part….. Testing!

If everything is correct, you should receive a funny dog gif via text within 15 seconds after hitting the button. Here is the one I got:

Hope this article has been helpful and thank you for taking the time to read it.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store